Το έργο Gentoo εισήγαγε το σύστημα διαχείρισης πακέτων Portage 3.0

Σταθεροποιήθηκε έκδοση συστήματος διαχείρισης πακέτων Portage 3.0, που χρησιμοποιείται στη διανομή Gentoo Linux. Το νήμα που παρουσιάστηκε συνόψισε τη μακροπρόθεσμη εργασία για τη μετάβαση στην Python 3 και το τέλος της υποστήριξης για την Python 2.7.

Εκτός από το τέλος της υποστήριξης για την Python 2.7, μια άλλη σημαντική αλλαγή ήταν η συμπερίληψη του βελτιστοποιήσεις, το οποίο κατέστησε δυνατή την επιτάχυνση των υπολογισμών που σχετίζονται με τον προσδιορισμό των εξαρτήσεων κατά 50-60%. Είναι ενδιαφέρον ότι ορισμένοι προγραμματιστές πρότειναν να ξαναγράψουν τον κώδικα ανάλυσης εξάρτησης σε C/C++ ή Go για να επιταχύνουν τη λειτουργία του, αλλά κατάφεραν να λύσουν το υπάρχον πρόβλημα με λίγη προσπάθεια.

Η δημιουργία προφίλ του υπάρχοντος κώδικα έδειξε ότι το μεγαλύτερο μέρος του χρόνου υπολογισμού ξοδεύτηκε για την κλήση των συναρτήσεων use_reduce και catpkgsplit με ένα επαναλαμβανόμενο σύνολο ορισμάτων (για παράδειγμα, η συνάρτηση catpkgsplit κλήθηκε 1 έως 5 εκατομμύρια φορές). Για να επιταχυνθούν τα πράγματα, χρησιμοποιήθηκε η προσωρινή αποθήκευση των αποτελεσμάτων αυτών των συναρτήσεων χρησιμοποιώντας λεξικά. Η καλύτερη επιλογή για αποθήκευση κρυφής μνήμης ήταν η ενσωματωμένη συνάρτηση lru_cache, αλλά ήταν διαθέσιμη μόνο σε εκδόσεις Python που ξεκινούσαν με την έκδοση 3.2. Για συμβατότητα με προηγούμενες εκδόσεις, προστέθηκε ένα στέλεχος για να αντικαταστήσει το lru_cache, αλλά η απόφαση να διακοπεί η υποστήριξη για την Python 2.7 στο Portage 3.0 απλοποίησε σημαντικά την εργασία και κατέστησε δυνατή την εκτέλεση χωρίς αυτό το επίπεδο.

Η χρήση της προσωρινής μνήμης μείωσε τον χρόνο εκτέλεσης της λειτουργίας «emerge -uDvpU —with-bdeps=y @world» στον φορητό υπολογιστή ThinkPad X220 από 5 λεπτά 20 δευτερόλεπτα σε 3 λεπτά 16 δευτερόλεπτα (63%). Δοκιμές σε άλλα συστήματα έδειξαν αύξηση απόδοσης τουλάχιστον 48%.

Ο προγραμματιστής που ετοίμασε την αλλαγή προσπάθησε επίσης να εφαρμόσει ένα πρωτότυπο του κώδικα ανάλυσης εξάρτησης σε C++ ή Rust, αλλά το έργο ήταν πολύ δύσκολο επειδή απαιτούσε μεταφορά μεγάλου όγκου κώδικα και ήταν αμφίβολο ότι το αποτέλεσμα θα άξιζε την προσπάθεια .

Πηγή: opennet.ru

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