Le projet Gentoo a introduit le système de gestion de paquets Portage 3.0

Stabilisé version du système de gestion de paquets Portage 3.0, utilisé dans la distribution Gentoo Linux. Le fil de discussion présenté résumait le travail à long terme sur la transition vers Python 3 et la fin du support de Python 2.7.

Outre la fin du support de Python 2.7, un autre changement important a été l'inclusion de optimisations, ce qui a permis d'accélérer de 50 à 60 % les calculs liés à la détermination des dépendances. Fait intéressant, certains développeurs ont suggéré de réécrire le code de résolution des dépendances en C/C++ ou Go pour accélérer son fonctionnement, mais ils ont réussi à résoudre le problème existant avec peu d'effort.

Le profilage du code existant a montré que la majeure partie du temps de calcul était consacrée à l'appel des fonctions use_reduce et catpkgsplit avec un ensemble d'arguments répétitifs (par exemple, la fonction catpkgsplit était appelée 1 à 5 millions de fois). Pour accélérer les choses, une mise en cache des résultats de ces fonctions à l'aide de dictionnaires a été utilisée. La meilleure option pour le stockage du cache était la fonction lru_cache intégrée, mais elle n'était disponible que dans les versions Python commençant par 3.2. Pour des raisons de compatibilité avec les versions antérieures, un stub a été ajouté pour remplacer lru_cache, mais la décision d'arrêter le support de Python 2.7 dans Portage 3.0 a grandement simplifié la tâche et a permis de se passer de cette couche.

L'utilisation du cache a réduit le temps d'exécution de l'opération « emerge -uDvpU —with-bdeps=y @world » sur l'ordinateur portable ThinkPad X220 de 5 minutes 20 secondes à 3 minutes 16 secondes (63 %). Les tests sur d'autres systèmes ont montré une augmentation des performances d'au moins 48 %.

Le développeur qui a préparé le changement a également essayé d'implémenter un prototype du code de résolution des dépendances en C++ ou Rust, mais la tâche était trop difficile car elle nécessitait le portage d'une grande quantité de code, et il était douteux que le résultat en vaille la peine. .

Source: opennet.ru

Ajouter un commentaire