Projekt Gentoo je predstavil sistem za upravljanje paketov Portage 3.0

Stabilizirano izdaja sistema za upravljanje paketov Portage 3.0, ki se uporablja pri distribuciji Gentoo Linux. Predstavljena nit je povzela dolgoletno delo pri prehodu na Python 3 in konec podpore za Python 2.7.

Poleg konca podpore za Python 2.7 je bila druga pomembna sprememba vključitev optimizacije, kar je omogočilo pospešitev izračunov v zvezi z določanjem odvisnosti za 50-60%. Zanimivo je, da so nekateri razvijalci predlagali prepisovanje kode za razrešitev odvisnosti v C/C++ ali Go, da bi pospešili njeno delovanje, vendar jim je z malo truda uspelo rešiti obstoječo težavo.

Profiliranje obstoječe kode je pokazalo, da je bila večina časa izračuna porabljena za klicanje funkcij use_reduce in catpkgsplit s ponavljajočim se nizom argumentov (funkcija catpkgsplit je bila na primer poklicana 1- do 5-milijonkrat). Za pospešitev je bilo uporabljeno predpomnjenje rezultatov teh funkcij z uporabo slovarjev. Najboljša možnost za shranjevanje predpomnilnika je bila vgrajena funkcija lru_cache, vendar je bila na voljo le v izdajah Pythona, ki so se začele s 3.2. Zaradi združljivosti s starejšimi različicami je bila dodana škrbina, ki je nadomestila lru_cache, vendar je odločitev o prekinitvi podpore za Python 2.7 v Portage 3.0 močno poenostavila nalogo in omogočila, da je bilo brez te plasti.

Uporaba predpomnilnika je zmanjšala čas izvajanja operacije »emerge -uDvpU —with-bdeps=y @world« na prenosnem računalniku ThinkPad X220 s 5 minut 20 sekund na 3 minute 16 sekund (63 %). Testi na drugih sistemih so pokazali povečanje zmogljivosti za vsaj 48 %.

Razvijalec, ki je pripravil spremembo, je prav tako poskušal implementirati prototip kode za reševanje odvisnosti v C++ ali Rust, vendar je bila naloga pretežka, ker je zahtevala prenos velike količine kode, in dvomljivo je bilo, da bo rezultat vreden truda. .

Vir: opennet.ru

Dodaj komentar