Проект 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

Додати коментар або відгук