„Gentoo“ projektas pristatė „Portage 3.0“ paketų valdymo sistemą

Stabilizuotas paketų valdymo sistemos išleidimas Portage 3.0, naudojamas platinimui Gentoo Linux. Pateiktoje temoje buvo apibendrintas ilgalaikis darbas pereinant prie Python 3 ir baigiant Python 2.7 palaikymą.

Be Python 2.7 palaikymo pabaigos, kitas svarbus pakeitimas buvo įtraukimas optimizavimus, o tai leido 50–60% paspartinti skaičiavimus, susijusius su priklausomybių nustatymu. Įdomu tai, kad kai kurie kūrėjai pasiūlė perrašyti priklausomybės skyrimo kodą C/C++ arba Go, kad paspartintų jo veikimą, tačiau jiems pavyko išspręsti esamą problemą be didelių pastangų.

Profiliuojant esamą kodą paaiškėjo, kad didžioji skaičiavimo laiko dalis buvo skirta funkcijoms use_reduce ir catpkgsplit iškviesti su pasikartojančiu argumentų rinkiniu (pavyzdžiui, funkcija catpkgsplit buvo iškviesta nuo 1 iki 5 milijonų kartų). Siekiant pagreitinti darbą, buvo naudojamas šių funkcijų rezultatų kaupimas talpykloje naudojant žodynus. Geriausias talpyklos saugojimo variantas buvo įmontuota funkcija lru_cache, tačiau ji buvo prieinama tik Python leidimuose, pradedant nuo 3.2. Siekiant suderinamumo su ankstesnėmis versijomis, lru_cache pakeičiantis buvo pridėtas šaknis, tačiau sprendimas nutraukti Python 2.7 palaikymą „Portage 3.0“ versijoje labai supaprastino užduotį ir leido apsieiti be šio sluoksnio.

Naudojant talpyklą, ThinkPad X220 nešiojamajame kompiuteryje operacijos „emerge -uDvpU —with-bdeps=y @world“ vykdymo laikas sumažėjo nuo 5 minučių 20 sekundžių iki 3 minučių 16 sekundžių (63 %). Kitų sistemų bandymai parodė, kad našumas padidėjo mažiausiai 48%.

Pakeitimą parengęs kūrėjas taip pat bandė įdiegti priklausomybės skyros kodo prototipą C++ arba Rust kalbomis, tačiau užduotis buvo per sunki, nes reikėjo perkelti didelį kodo kiekį ir abejojo, ar rezultatas bus vertas pastangų. .

Šaltinis: opennet.ru

Добавить комментарий