W projekcie Gentoo wprowadzono system zarządzania pakietami Portage 3.0

Stabilizowany wydanie systemu zarządzania pakietami Portage 3.0, używane w dystrybucji Gentoo Linux. Zaprezentowany wątek podsumował wieloletnie prace nad przejściem na Python 3 i zakończeniem wsparcia dla Pythona 2.7.

Oprócz zakończenia wsparcia dla Pythona 2.7, kolejną ważną zmianą było włączenie optymalizacje, co pozwoliło przyspieszyć obliczenia związane z wyznaczaniem zależności o 50-60%. Co ciekawe, niektórzy programiści sugerowali przepisanie kodu rozwiązywania zależności w C/C++ lub Go, aby przyspieszyć jego działanie, ale udało im się rozwiązać istniejący problem przy niewielkim wysiłku.

Profilowanie istniejącego kodu wykazało, że większość czasu obliczeń poświęcono na wywołanie funkcji use_reduce i catpkgsplit z powtarzającym się zestawem argumentów (na przykład funkcja catpkgsplit została wywołana od 1 do 5 milionów razy). Aby przyspieszyć działanie, zastosowano buforowanie wyników tych funkcji za pomocą słowników. Najlepszą opcją przechowywania w pamięci podręcznej była wbudowana funkcja lru_cache, ale była ona dostępna tylko w wersjach Pythona począwszy od 3.2. Dla kompatybilności z wcześniejszymi wersjami dodano kod pośredniczący zastępujący lru_cache, ale decyzja o zaprzestaniu obsługi Pythona 2.7 w Portage 3.0 znacznie uprościła zadanie i umożliwiła obejście się bez tej warstwy.

Korzystanie z pamięci podręcznej skróciło czas wykonania operacji „emerge -uDvpU —with-bdeps=y @world” na laptopie ThinkPad X220 z 5 minut 20 sekund do 3 minut 16 sekund (63%). Testy na innych systemach wykazały wzrost wydajności o co najmniej 48%.

Deweloper przygotowujący zmianę próbował także zaimplementować prototyp kodu rozwiązującego zależności w C++ lub Rust, ale zadanie było zbyt trudne, gdyż wymagało przeniesienia dużej ilości kodu i wątpliwe, czy wynik będzie wart wysiłku .

Źródło: opennet.ru

Dodaj komentarz