Έχει δημοσιευτεί ένα σύνολο ενημερώσεων κώδικα που επιταχύνουν τη δημιουργία του πυρήνα του Linux κατά 50-80%

Ο Ingo Molnar, γνωστός προγραμματιστής πυρήνα Linux και συγγραφέας του προγραμματιστή εργασιών CFS (Completely Fair Scheduler), πρότεινε για συζήτηση στη λίστα αλληλογραφίας προγραμματιστών πυρήνα Linux μια σειρά ενημερώσεων κώδικα που επηρεάζουν περισσότερα από τα μισά αρχεία στις πηγές του πυρήνα και παρέχουν αύξηση στην ταχύτητα μιας πλήρους αναδόμησης πυρήνα κατά 50-80% ανάλογα με τις ρυθμίσεις. Η υλοποιούμενη βελτιστοποίηση είναι αξιοσημείωτη καθώς σχετίζεται με την προσθήκη του μεγαλύτερου συνόλου αλλαγών στην ιστορία της ανάπτυξης του πυρήνα - 2297 ενημερώσεις κώδικα προτάθηκαν για συμπερίληψη ταυτόχρονα, αλλάζοντας περισσότερα από 25 χιλιάδες αρχεία (10 χιλιάδες αρχεία κεφαλίδας στο "συμπεριλαμβάνονται /" και "arch/*/include/" καταλόγους "και 15 χιλιάδες αρχεία με κείμενα πηγής).

Το κέρδος απόδοσης επιτυγχάνεται αλλάζοντας τη μέθοδο επεξεργασίας των αρχείων κεφαλίδας. Σημειώνεται ότι πάνω από τριάντα χρόνια ανάπτυξης του πυρήνα, η κατάσταση των αρχείων κεφαλίδας έχει πάρει μια καταθλιπτική εμφάνιση λόγω της παρουσίας μεγάλου αριθμού διασταυρούμενων εξαρτήσεων μεταξύ των αρχείων. Η αναδιάρθρωση του αρχείου κεφαλίδας διήρκεσε περισσότερο από ένα χρόνο και απαιτούσε σημαντική επανεπεξεργασία της ιεραρχίας και των εξαρτήσεων. Κατά τη διάρκεια της αναδιάρθρωσης, έγινε δουλειά για τον διαχωρισμό των ορισμών τύπων και των API για διαφορετικά υποσυστήματα πυρήνα.

Μεταξύ των αλλαγών που έγιναν: διαχωρισμός αρχείων κεφαλίδας υψηλού επιπέδου μεταξύ τους, εξάλειψη ενσωματωμένων λειτουργιών που συνδέουν αρχεία κεφαλίδας, διαχωρισμός αρχείων κεφαλίδας για τύπους και API, εξασφάλιση ξεχωριστής συναρμολόγησης αρχείων κεφαλίδας (περίπου 80 αρχεία είχαν έμμεσες εξαρτήσεις που παρεμβαίνουν στη συναρμολόγηση, εκτίθενται μέσω άλλα αρχεία κεφαλίδας), αυτόματη προσθήκη εξαρτήσεων σε αρχεία ".h" και ".c", βελτιστοποίηση βήμα προς βήμα αρχείων κεφαλίδας, χρήση της λειτουργίας "CONFIG_KALLSYMS_FAST=y", επιλεκτική ενοποίηση αρχείων C σε μπλοκ συναρμολόγησης μειώστε τον αριθμό των αρχείων αντικειμένων.

Ως αποτέλεσμα, η δουλειά που έγινε κατέστησε δυνατή τη μείωση του μεγέθους των αρχείων κεφαλίδας που υποβάλλονται σε επεξεργασία στο στάδιο της μετα-προεπεξεργασίας κατά 1-2 τάξεις μεγέθους. Για παράδειγμα, πριν από τη βελτιστοποίηση, η χρήση του αρχείου κεφαλίδας "linux/gfp.h" είχε ως αποτέλεσμα την προσθήκη 13543 γραμμών κώδικα και τη συμπερίληψη 303 εξαρτημένων αρχείων κεφαλίδας και μετά τη βελτιστοποίηση το μέγεθος μειώθηκε σε 181 γραμμές και 26 εξαρτημένα αρχεία. Ή ένα άλλο παράδειγμα: κατά την προεπεξεργασία του αρχείου "kernel/pid.c" χωρίς ενημέρωση κώδικα, περιλαμβάνονται 94 χιλιάδες γραμμές κώδικα, οι περισσότερες από τις οποίες δεν χρησιμοποιούνται στο pid.c. Ο διαχωρισμός των αρχείων κεφαλίδας κατέστησε δυνατή τη μείωση της ποσότητας του επεξεργασμένου κώδικα κατά τρεις φορές, μειώνοντας τον αριθμό των επεξεργασμένων γραμμών σε 36 χιλιάδες.

Όταν ο πυρήνας ανακατασκευάστηκε πλήρως με την εντολή "make -j96 vmlinux" σε ένα δοκιμαστικό σύστημα, η εφαρμογή των patches έδειξε μείωση του χρόνου κατασκευής του κλάδου v5.16-rc7 από 231.34 σε 129.97 δευτερόλεπτα (από 15.5 σε 27.7 builds ανά ώρα), και αύξησε επίσης την αποτελεσματικότητα της χρήσης πυρήνων CPU κατά τη διάρκεια των συναρμολογήσεων. Με μια σταδιακή κατασκευή, το αποτέλεσμα της βελτιστοποίησης είναι ακόμη πιο αισθητό - ο χρόνος για την εκ νέου κατασκευή του πυρήνα μετά την πραγματοποίηση αλλαγών στα αρχεία κεφαλίδας έχει μειωθεί σημαντικά (από 112% σε 173% ανάλογα με το αρχείο κεφαλίδας που αλλάζει). Οι βελτιστοποιήσεις είναι προς το παρόν διαθέσιμες μόνο για αρχιτεκτονικές ARM64, MIPS, Sparc και x86 (32 και 64 bit).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο