pakettide haldamise süsteemi väljalase , mida kasutatakse jaotises . Esitatud haru lõpetas pikaajalise töö üleminekuks Python 3-le ja Python 2.7 toe lõpetamise.
Lisaks Python 2.7 toe lõpetamisele oli teine oluline muudatus , mis võimaldas arvutusi, mis on seotud sõltuvuste määratlemisega, kiirendada 50-60%. Huvitav, et mõned arendajad pakkusid sõltuvuste lahendamise koodi ümber kirjutamist C/C++-s või Go-s, et töö kiirus kasvada, kuid õnnestus probleem lahendada lihtsate meetoditega.
Koodi profileerimine näitas, et peamine aeg arvutustes kulub funktsioonide use_reduce ja catpkgsplit kutsumisele korduvate argumentide kogumiga (näiteks funktsiooni catpkgsplit kutsuti 1 kuni 5 miljonit korda). Kiirusel saavutasime tulemuste vahemälu rakendamise kaudu nende funktsioonide jaoks, kasutades sõnastikke. Parim lahendus vahemälu hoidmiseks oli sisseehitatud funktsioon lru_cache, kuid see oli saadaval ainult alates Python 3.2 versioonist. Ühilduvuseks varasema versiooniga lisati lru_cache'i asendamise stub, kuid otsus lõpetada Python 2.7 toetamine Portage 3.0-s lihtsustas ülesannet ja võimaldas sellest vahekihist loobuda.
Vahemälu kasutamine aitas vähendada käsu „emerge -uDvpU —with-bdeps=y @world“ täitmise aega ThinkPad X220 sülearvutil 5 minuti 20 sekundi pealt 3 minuti 16 sekundini (63%). Testid teistel süsteemidel näitasid jõudluse kasvu mitte vähem kui 48%.
Muutuse ette valmistanud arendaja proovinud samuti rakendada sõltuvuste lahendamise koodiprototüübi C++ või Rust keeles, kuid ülesanne osutus liiga keeruliseks, kuna see nõudis suures mahus koodi portimist ja samas oli kahtlane, kas saadud tulemus väärt oleks tehtud pingutusi.
Allikas: opennet.ru
