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

Ίνγκο Μόλναρ, ένας πολύ γνωστός προγραμματιστής πυρήνα Linux και συγγραφέας του CFS Task Scheduler πρότεινε για τη συζήτηση της λίστας αλληλογραφίας για την ανάπτυξη πυρήνα Linux έναν αριθμό ενημερώσεων κώδικα, που επηρεάζουν περισσότερα από τα μισά αρχεία στην πηγή του πυρήνα και παρέχουν συνολική αύξηση της ταχύτητας αναδόμησης του πυρήνα κατά 50 -80% ανάλογα με τη διαμόρφωση.

Η υλοποιούμενη βελτιστοποίηση είναι αξιοσημείωτο στο ότι σχετίζεται με την προσθήκη του μεγαλύτερου συνόλου αλλαγών στην ιστορία της ανάπτυξης του πυρήνα: ξεκίνησαν να συμπεριλάβουν 2297 ενημερώσεις κώδικα ταυτόχρονα, αλλάζοντας περισσότερα από 25 χιλιάδες αρχεία.

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

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

Είμαι στην ευχάριστη θέση να ανακοινώσω την πρώτη δημόσια κυκλοφορία του νέου μου έργου "Fast Kernel Headers" με το οποίο εργάζομαι από τα τέλη του 2020, το οποίο είναι μια ολοκληρωμένη επανεξέταση της ιεραρχίας κεφαλίδας και των εξαρτήσεων κεφαλίδας του πυρήνα Linux, με διπλάσιο στόχο: :

– επιτάχυνση δημιουργίας πυρήνα (τόσο απόλυτους όσο και αυξητικούς χρόνους κατασκευής)

– αποσύνδεση των ορισμών τύπου υποσυστήματος και API μεταξύ τους

Όπως γνωρίζουν οι περισσότεροι προγραμματιστές πυρήνα, υπάρχουν περίπου ~ 10,000 κύριες κεφαλίδες .h στον πυρήνα του Linux, στις ιεραρχίες include / και arch / * / include /. Τα τελευταία 30+ χρόνια, έχουν εξελιχθεί σε ένα περίπλοκο και επίπονο σύνολο διασταυρούμενων εξαρτήσεων που ονομάζουμε στοργικά «Κόλαση της Εξάρτησης».

Μεταξύ των αλλαγών που έγιναν είναι: διαχωρισμός αρχείων κεφαλίδας υψηλού επιπέδου μεταξύ τους, εξαίρεση ενσωματωμένων λειτουργιών που συνδέουν αρχεία κεφαλίδας, αντιστοίχιση αρχείων κεφαλίδας για τύπους και 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" στο σύστημα δοκιμής, η ενημέρωση κώδικα έδειξε μείωση του χρόνου μεταγλώττισης του κλάδου v5.16-rc7 από 231,34 σε 129,97, 15,5 δευτερόλεπτα (από 27,7 σε XNUMX builds ανά ώρα) και επίσης αύξησε την αποτελεσματικότητα της χρήσης του πυρήνα της CPU κατά την κατασκευή.

Με μια σταδιακή μεταγλώττιση, το εφέ βελτιστοποίησης είναι ακόμη πιο αισθητό: ο χρόνος για την αναδόμηση του πυρήνα μετά την πραγματοποίηση αλλαγών στα αρχεία κεφαλίδας έχει μειωθεί σημαντικά (από 112% σε 173%, ανάλογα με το αρχείο κεφαλίδας που έχει αλλάξει) .

Οι βελτιστοποιήσεις είναι προς το παρόν διαθέσιμες μόνο για αρχιτεκτονικές ARM64, MIPS, Sparc και x86 (32 bit και 64 bit).

Ωραία αν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες στο παρακάτω σύνδεσμο.


Το περιεχόμενο του άρθρου συμμορφώνεται με τις αρχές μας συντακτική ηθική. Για να αναφέρετε ένα σφάλμα κάντε κλικ Aquí.

Γίνε ο πρώτος που θα σχολιάσει

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί.

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

bool (αλήθεια)