Gentoo-projektet introducerade pakethanteringssystemet Portage 3.0

Stabiliserad pakethanteringssystem release Portage 3.0, som används i distributionen Gentoo Linux. Den presenterade tråden sammanfattade det långsiktiga arbetet med övergången till Python 3 och slutet på stödet för Python 2.7.

Förutom slutet på stödet för Python 2.7 var en annan viktig förändring inkluderingen av optimeringar, vilket gjorde det möjligt att påskynda beräkningar relaterade till bestämning av beroenden med 50-60%. Intressant nog föreslog vissa utvecklare att skriva om beroendeupplösningskoden i C/C++ eller Go för att påskynda driften, men de lyckades lösa det befintliga problemet med liten ansträngning.

Profilering av den befintliga koden visade att det mesta av beräkningstiden gick åt till att anropa funktionerna use_reduce och catpkgsplit med en upprepande uppsättning argument (till exempel anropades catpkgsplit-funktionen 1 till 5 miljoner gånger). För att snabba på saker och ting användes cachning av resultaten av dessa funktioner med hjälp av ordböcker. Det bästa alternativet för cachelagring var den inbyggda lru_cache-funktionen, men den var endast tillgänglig i Python-utgåvor från och med 3.2. För kompatibilitet med tidigare versioner lades en stubb till för att ersätta lru_cache, men beslutet att avbryta stödet för Python 2.7 i Portage 3.0 förenklade uppgiften avsevärt och gjorde det möjligt att klara sig utan detta lager.

Genom att använda cachen minskade exekveringstiden för operationen "emerge -uDvpU —with-bdeps=y @world" på den bärbara ThinkPad X220 från 5 minuter 20 sekunder till 3 minuter och 16 sekunder (63%). Tester på andra system visade en prestandaökning på minst 48 %.

Utvecklaren som förberedde förändringen försökte också implementera en prototyp av beroendeupplösningskoden i C++ eller Rust, men uppgiften var för svår eftersom den krävde portering av en stor mängd kod, och det var tveksamt om resultatet skulle vara värt mödan .

Källa: opennet.ru

Lägg en kommentar