Gentoo-prosjektet introduserte Portage 3.0-pakkehåndteringssystemet

Stabilisert utgivelse av pakkestyringssystem Portage 3.0, brukt i distribusjonen Gentoo Linux. Den presenterte tråden oppsummerte det langsiktige arbeidet med overgangen til Python 3 og slutten av støtten for Python 2.7.

Foruten slutten på støtten for Python 2.7, var en annen viktig endring inkluderingen av optimaliseringer, som gjorde det mulig å fremskynde beregninger knyttet til å bestemme avhengigheter med 50-60%. Interessant nok foreslo noen utviklere å omskrive avhengighetsoppløsningskoden i C/C++ eller Go for å fremskynde driften, men de klarte å løse det eksisterende problemet med liten innsats.

Profilering av den eksisterende koden viste at mesteparten av beregningstiden ble brukt på å kalle funksjonene use_reduce og catpkgsplit med et gjentatt sett med argumenter (for eksempel ble catpkgsplit-funksjonen kalt 1 til 5 millioner ganger). For å få fart på sakene ble det brukt caching av resultatene av disse funksjonene ved hjelp av ordbøker. Det beste alternativet for hurtigbufferlagring var den innebygde lru_cache-funksjonen, men den var bare tilgjengelig i Python-utgivelser fra og med 3.2. For kompatibilitet med tidligere versjoner ble det lagt til en stubbe for å erstatte lru_cache, men beslutningen om å avbryte støtten for Python 2.7 i Portage 3.0 forenklet oppgaven betydelig og gjorde det mulig å klare seg uten dette laget.

Bruk av hurtigbufferen reduserte utførelsestiden for «emerge -uDvpU —with-bdeps=y @world»-operasjonen på ThinkPad X220 bærbar PC fra 5 minutter 20 sekunder til 3 minutter og 16 sekunder (63 %). Tester på andre systemer viste en ytelsesøkning på minst 48 %.

Utvikleren som forberedte endringen prøvde også å implementere en prototype av avhengighetsoppløsningskoden i C++ eller Rust, men oppgaven var for vanskelig fordi den krevde portering av en stor mengde kode, og det var tvilsomt om resultatet ville være verdt innsatsen .

Kilde: opennet.ru

Legg til en kommentar