30.09.2020

Проект 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, но задача оказалась слишком сложной, так как требовала портирования большого объёма кода, и, при этом, было сомнительно, что полученный результат стоил бы потраченных усилий.

Источник: https://www.opennet.ru/opennews/art.shtml?num=53668

Добавить комментарий