Επιτάχυνση εκκίνησης προγραμμάτων με prelinking

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Η μέθοδος του prelinking μπορεί να επιφέρει σημαντική μείωση του χρόνου εκκίνησης των προγραμμάτων. Μάθετε πώς μπορείτε να αυξήσετε τις επιδόσεις της εγκατάστασης linux στον υπολογιστή σας.


Λίγα λόγια για την μέθοδο prelinking

Ένα από τα θετικά του ελεύθερου λογισμικού είναι η επαναχρησιμοποίηση του κώδικα στα διάφορα προγράμματα. Όποιος έχει ασχοληθεί έστω και λίγο με linux ή κάποιο ελεύθερο λειτουργικό σύστημα, θα έχει διαπιστώσει ότι υπάρχουν πολλά αρχεία βιβλιοθηκών στο σύστημά του (πρόκειται για τα αρχεία που συνήθως περιέχουν το συνθετικό lib στην ονομασία τους). Πρόκειται για μία σειρά ομαδοποιημένων λειτουργιών οι οποίες συναντώνται συχνά σε διάφορες εφαρμογές. Συνεπώς, αντί κάθε προγραμματιστής που φτιάχνει ένα πρόγραμμα να γράφει δικό του κώδικα για μία βασική λειτουργία, μπορεί να χρησιμοποιήσει μία βιβλιοθήκη η οποία έχει έτοιμη και υλοποιημένη την λειτουργία που τον ενδιαφέρει. Για παράδειγμα η βιβλιοθήκη με το όνομα id3lib παρέχει την λειτουργία της ανάγνωσης και διαχείρισης του ID3 Tag μουσικών αρχείων mp3. Έτσι, ένα ελεύθερο πρόγραμμα που αναπαράγει αρχεία .mp3 δεν χρειάζεται να έχει υλοποιημένη μία τέτοια λειτουργία, αλλά μπορεί να την "δανειστεί" από την εν λόγω βιβλιοθήκη. Αυτό βοηθάει τους δημιουργούς των προγραμμάτων να επικεντρώνονται στην ουσία των προγραμμάτων τους και να μην αναλώνονται σε περιφερειακές λειτουργίες που δεν είναι του άμεσου ενδιαφέροντος της εφαρμογής. Παράλληλα, μειώνουν τον απαιτούμενο χώρο στον δίσκο μας, αφού η ίδια βιβλιοθήκη μπορεί να χρησιμοποιείται από μία πληθώρα προγραμμάτων που είναι εγκατεστημένα στο σύστημά μας.

Όταν μία εφαρμογή εκκινήσει, γίνεται ένας έλεγχος για το ποιες βιβλιοθήκες απαιτούνται για την λειτουργία του. Οι βιβλιοθήκες (τα αρχεία lib δηλαδή) αφού βεβαιωθούν από το σύστημα, σκανάρονται ώστε να βρεθεί ποιο ακριβώς κομμάτι τους περιέχει τις απαραίτητες λειτουργίες (πχ μπορεί ένα πρόγραμμα να "ενδιαφέρεται" μόνο για την λειτουργία ανάγνωσης του ID3 Tag και όχι για την επεξεργασία του). Έτσι, όταν χρειαστεί να κληθεί η αντίστοιχη λειτουργία από την βιβλιοθήκη, το σύστημα γνωρίζει που ακριβώς πρέπει να την αναζητήσει και να την εκτελέσει. Αυτή η διαδικασία ονομάζεται dynamic linking.

Το pre linking, κάνει το linking μια ώρα αρχίτερα. Δηλαδή, πριν εκκινηθεί η εφαρμογή από τον χρήστη, γίνεται η αναζήτηση των απαιτούμενων βιβλιοθηκών από την εφαρμογή και δημιουργείται ένα είδος χάρτη. Όταν λοιπόν η εφαρμογή εκκινήσει και αναζητήσει μία λειτουργία από μία βιβλιοθήκη, το σύστημα μέσω του χάρτη γνωρίζει ήδη που θα βρει την λειτουργία.

Αυτό φυσικά προϋποθέτει ότι αν αλλάξει η βιβλιοθήκη (πχ σε ενδεχόμενο update του συστήματος) ο παραπάνω χάρτης πρέπει να ξαναδημιουργηθεί. Την πρώτη φορά που δημιουργείται ο χάρτης η διαδικασία απαιτεί πολύ χρόνο. Ύστερα όμως, για κάθε ανανέωσή του απαιτείται μηδαμινός χρόνος.

Πώς μπορεί να εγκατασταθεί το prelinking στην διανομή μας

Το πρόγραμμα που κάνει την δουλειά του prelinking ονομάζεται prelink. Οι περισσότερες διανομές διαθέτουν έτοιμο πακέτο του prelink το οποίο συνήθως προγραμματίζεται να εκτελείται καθημερινά μέσω του cron. Γιαυτό και είναι προτιμότερο να εγκαταστήσετε το prelink από τον package manager της διανομής σας και όχι με compilation του κώδικα.

Αφού εγκαταστήσετε το prelink μέσω του package manager της διανομής σας βεβαιωθείτε ότι στο αρχείο /etc/default/prelink υπάρχει η γραμμή PRELINKING=yes(στο gentoo το αρχείο βρίσκεται στο /etc/conf.d/prelink). Αν αντί για yes υπάρχει κάτι άλλο, αλλάξτε το σε yes, ώστε η γραμμή να γράφει ακριβώς την παραπάνω φράση. Μετά θα πρέπει να εκτελέσετε "χειροκίνητα" την εντολή του prelink που τρέχει μέσω του cron:

# /etc/cron.daily/prelink

Φυσικά, την παραπάνω εντολή θα πρέπει να την εκτελέσετε ως root, όπως επίσης ως root θα πρέπει να επεξεργαστείτε το αρχείο /etc/default/prelink. Όπως είπαμε, η διαδικασία θα απαιτήσει πολύ χρόνο, αλλά την επόμενη φορά που θα εκτελεστεί η χρόνος θα είναι ελάχιστος. Για να το διαπιστώσετε, εκτελέστε ξαα την εντολή

# /etc/cron.daily/prelink

Θα διαπιστώσετε ότι ο χρόνος την δεύτερη φορά είναι απειροελάχιστος.

Τώρα πλέον έχετε ένα σύστημα που χρησιμοποιεί την μέθοδο του prelinking για την σύνδεση των εκτελέσιμων αρχείων με τις απαραίτητες βιβλιοθήκες.

Για να "αναιρέσετε" το prelinking, δώστε την εντολή prelink -au, ως root φυσικά.

Αύξηση επιδόσεων

Η επιτάχυνση στην εκκίνηση των εφαρμογών είναι μεγαλύτερη σε αυτές που χρησιμοποιούν πολλές βιβλιοθήκες. Τέτοιες εφαρμογές είναι το OpenOffice, το KDE και το Gnome. Φυσικά, σε προγράμματα που χρησιμοποιούνται ελάχιστες βιβλιοθήκες ή καθόλου η επιτάχυνση είναι από αμελητέα έως ανύπαρκτη. Πάντως στη χειρότερη περίπτωση απλά δεν θα δείτε διαφορά στο χρόνο εκκίνησης των προγραμμάτων, καθώς δεν αναφέρεται περίπτωση όπου παρατηρείται μείωση επιδόσεων.

Παρατηρήσεις

Αν υπάρχει πρόβλημα στην εκκίνηση κάποιων εφαρμογών και είχατε κάνει πρόσφατα update του συστήματός σας, τότε ίσως να πρέπει να εκτελέσετε το prelink χειροκίνητα αμέσως μετά το update:

# /etc/cron.daily/prelink

Σύνδεσμοι