La version stable de Portage 3.0 est déjà annoncée

Développeurs récemment qui sont en charge du système de gestion des colis Portage (sur la distribution Gentoo Linux) a annoncé la sortie de la version stable de la version 3.0.

Dans laquelle, la principale nouveauté de cette nouvelle branche présentée, c'est le travail qui a été mené dans la durée sur le transition vers Python 3 et fin du support de Python 2.7 (quelque chose qui se voyait déjà venir depuis longtemps, puisque cette branche était officiellement sans support depuis plusieurs mois)

Nous avons de bonnes nouvelles! Le projet Gentoo Portage a récemment stabilisé la version 3.0 du gestionnaire de paquets.

Quoi de neuf? Eh bien, cette troisième version de Portage supprime la prise en charge de Python 2.7, qui a été un effort continu dans le référentiel principal Gentoo par le projet Gentoo Python tout au long de 2020.

En plus de l'arrêt de la prise en charge de Python 2.7, un autre changement majeur qui se démarque de cette nouvelle branche stable de Portage 3.0 était l'inclusion de diverses optimisations qu'ils ont permis faire des calculs beaucoup plus rapides (entre 50% et 60%) associé à 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 leur travail, mais ils ont réussi à résoudre le problème existant avec beaucoup d'efforts.

Et est-ce le profil de code existant a montré que la plupart du temps calcul est dédié à l'appel des fonctions use_reduce et catpkgsplit avec un ensemble répétitif d'arguments (la personne qui a dirigé ce travail mentionne que par exemple, la fonction catpkgsplit a été appelée 1 à 5 millions de fois).

Une fois le problème détecté, mentionnez que pour accélérer les calculs, la mise en cache a été appliquée du résultat de ces fonctions au moyen de dictionnaires.

De plus, grâce à un correctif fourni par l'utilisateur, la mise à niveau vers la dernière version de Portage peut considérablement accélérer les calculs de dépendance de 50 à 60%. Nous adorons voir notre communauté participer à notre logiciel! Pour plus de détails, consultez ce post Reddit du membre de la communauté qui a fourni le correctif. Restez en bonne santé et continuez à cuisiner avec Gentoo!

En plus que il note également que la fonction intégrée lru_cache était optimale pour cette tâche de mise en cache, mais il n'était disponible que dans les versions Python depuis 3.2.

Pour la compatibilité descendante, un stub a également été ajouté pour remplacer lru_cache, mais la décision de mettre fin au support de Python 2.7 dans Portage 3.0 a grandement simplifié la tâche et a permis de contourner cette couche.

J'ai passé du temps à profiler Portage avec cProfile et vmprof pour comprendre quelles fonctionnalités prenaient le plus de temps. J'ai également généré des graphiques de flamme à partir des résultats du profileur, qui ressemblaient à ceci. Ce que j'ai remarqué, c'est que certaines fonctions, comme use_reducecatpkgsplit, sont appelés très fréquemment avec les mêmes arguments (comme, 1 à 5 millions de fois, pour catpkgsplit). J'ai fait quelques expériences pour mettre en cache les résultats de ces fonctions dans une dictée, et après avoir vu de bonnes accélérations, j'ai soumis un correctif à la liste des développeurs de Portage. Quelqu'un a suggéré d'utiliser Python intégrélru_cache décorateur de fonction à la place, mais ce n'est disponible que dans Python 3.2 et supérieur.

En revanche, l'utilisation du cache a réduit l'opération «emerge -uDvpU –with-bdeps = y @world» sur le ThinkPad X220 de 5 minutes 20 secondes à 3 minutes 16 secondes (63%). Des tests sur d'autres systèmes ont montré un gain de performance d'au moins 48%.

Le développeur qui a préparé le changement a également essayé de mettre en œuvre un prototype à partir du code de résolution de dépendance en C ++ ou Rust, mais la tâche s'est avérée trop difficile, car il exigeait une grande quantité de code à transporter et en même temps il était douteux que le résultat en vaille la peine.

Enfin si vous voulez en savoir plus À propos de la note de publication de cette branche stable, vous pouvez vérifier les détails dans le lien suivant.


Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.