Projekt Gentoo představil systém správy balíčků Portage 3.0

stabilizovaný vydání systému správy balíčků Portage 3.0používané v distribuci Gentoo Linux. Toto vlákno shrnulo dlouhou práci přechodu na Python 3 a ukončení podpory pro Python 2.7.

Kromě ukončení podpory Pythonu 2.7 bylo další velkou změnou zahrnutí optimalizace, což umožnilo zrychlit výpočty související se stanovením závislostí o 50-60 %. Je zajímavé, že někteří vývojáři navrhli přepsat kód rozlišení závislostí v C / C ++ nebo Go, aby urychlili jeho práci, ale podařilo se jim vyřešit stávající problém s malým krveprolitím.

Profilování existujícího kódu ukázalo, že většinu výpočetního času stráví volání funkcí use_reduce a catpkgsplit s opakující se sadou argumentů (například funkce catpkgsplit byla volána 1 až 5 milionůkrát). Pro urychlení ukládání výsledku těchto funkcí do mezipaměti bylo použito použití slovníků. Vestavěná funkce lru_cache byla optimální pro ukládání do mezipaměti, ale byla dostupná pouze ve verzích Pythonu počínaje 3.2. Kvůli kompatibilitě s dřívějšími verzemi byl přidán útržek, který nahradil lru_cache, ale rozhodnutí ukončit podporu pro Python 2.7 v Portage 3.0 značně zjednodušilo úlohu a odstranilo tuto vrstvu.

Použití mezipaměti zkrátilo dobu provádění operace „emerge -uDvpU --with-bdeps=y @world“ na notebooku ThinkPad X220 z 5 minut 20 sekund na 3 minuty 16 sekund (63 %). Testy na jiných systémech ukázaly nárůst výkonu minimálně o 48 %.

Vývojář, který změnu připravil, se také pokusil prototypovat kód rozlišení závislostí v C++ nebo Rustu, ale tento úkol se ukázal jako příliš obtížný, protože vyžadoval portování velkého množství kódu a zároveň bylo pochybné, že výsledek by stál za námahu.

Zdroj: opennet.ru

Přidat komentář