A Gentoo projekt bemutatta a Portage 3.0 csomagkezelő rendszert

Stabilizált csomagkezelő rendszer kiadása Portage 3.0, a terjesztésben használatos Gentoo Linux. A bemutatott szál összefoglalta a Python 3-ra való átállással és a Python 2.7 támogatásának megszűnésével kapcsolatos hosszú távú munkát.

A Python 2.7 támogatásának megszűnése mellett egy másik fontos változás a következő volt: optimalizálás, amely lehetővé tette a függőségek meghatározásához kapcsolódó számítások 50-60%-os felgyorsítását. Érdekes módon néhány fejlesztő azt javasolta, hogy írják át a függőségi feloldó kódot C/C++ vagy Go nyelven, hogy felgyorsítsák a működését, de a meglévő problémát kevés erőfeszítéssel sikerült megoldaniuk.

A meglévő kód profilozása azt mutatta, hogy a számítási idő nagy része a use_reduce és a catpkgsplit függvények ismétlődő argumentumkészlettel történő meghívásával telt (például a catpkgsplit függvényt 1-5 millió alkalommal hívták meg). A dolgok felgyorsítása érdekében ezeknek a függvényeknek az eredményeit szótárak segítségével gyorsítótáraztuk. A legjobb megoldás a gyorsítótár tárolására a beépített lru_cache függvény volt, de ez csak a 3.2-től kezdődő Python-kiadásokban volt elérhető. A korábbi verziókkal való kompatibilitás érdekében az lru_cache helyére egy csonkot adtunk, de a Portage 2.7-ban a Python 3.0 támogatásának megszüntetésére vonatkozó döntés nagymértékben leegyszerűsítette a feladatot, és lehetővé tette e réteg nélkül is.

A gyorsítótár használatával az „emerge -uDvpU —with-bdeps=y @world” művelet végrehajtási ideje a ThinkPad X220 laptopon 5 perc 20 másodpercről 3 perc 16 másodpercre csökkent (63%). Más rendszereken végzett tesztek legalább 48%-os teljesítménynövekedést mutattak.

A változtatást előkészítő fejlesztő megpróbálta C++-ban vagy Rustban is implementálni a függőségi feloldó kód prototípusát, de a feladat túl nehéz volt, mert nagy mennyiségű kódot kellett portolni, és kétséges volt, hogy az eredmény megéri-e a fáradságot. .

Forrás: opennet.ru

Hozzászólás