Проектът Gentoo представи системата за управление на пакети Portage 3.0

Стабилизиран издание на системата за управление на пакети Portage 3.0, използвани в разпространението Gentoo Linux. Представената тема обобщи дългосрочната работа по прехода към Python 3 и края на поддръжката за Python 2.7.

Освен края на поддръжката за Python 2.7, друга важна промяна беше включването на оптимизации, което позволи да се ускорят изчисленията, свързани с определянето на зависимости с 50-60%. Интересното е, че някои разработчици предложиха пренаписване на кода за разрешаване на зависимости в C/C++ или Go, за да се ускори работата му, но успяха да разрешат съществуващия проблем с малко усилия.

Профилирането на съществуващия код показа, че по-голямата част от времето за изчисление е изразходвано за извикване на функциите use_reduce и catpkgsplit с повтарящ се набор от аргументи (например функцията catpkgsplit е извикана от 1 до 5 милиона пъти). За да се ускорят нещата, беше използвано кеширане на резултатите от тези функции с помощта на речници. Най-добрият вариант за съхранение на кеша беше вградената функция lru_cache, но тя беше налична само в версии на Python, започващи с 3.2. За съвместимост с по-ранни версии беше добавен пън, който да замени lru_cache, но решението да се прекрати поддръжката на Python 2.7 в Portage 3.0 значително опрости задачата и направи възможно да се направи без този слой.

Използването на кеша намали времето за изпълнение на операцията „emerge -uDvpU —with-bdeps=y @world“ на лаптопа ThinkPad X220 от 5 минути 20 секунди на 3 минути 16 секунди (63%). Тестовете на други системи показаха увеличение на производителността от поне 48%.

Разработчикът, подготвил промяната, също се опита да внедри прототип на кода за разрешаване на зависимости в C++ или Rust, но задачата беше твърде трудна, защото изискваше пренасяне на голямо количество код и беше съмнително, че резултатът ще си струва усилието .

Източник: opennet.ru

Добавяне на нов коментар