Γρήγορες κεφαλίδες πυρήνα, ένα σύνολο ενημερώσεων κώδικα που επιταχύνουν τη συλλογή του πυρήνα κατά 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, stepwise_MS Selective mode of headerFICONS, stepwise_MS Selection of headerFICONS. ενοποίηση αρχείων 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 builds αύξησε επίσης τη χρήση του πυρήνα της CPU κατά τη διάρκεια της ώρας)

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

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

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


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

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

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