Авторские статьи

APT станет быстрее.


Julian Andres Klode является разработчиком advanced packaging tool (apt) и в своём блоге он опубликовал результаты работы и планы на будущее.

Исправление

Начиная с apt 1.1.6, использовался преднастроенный уровень сжатия xz и, к сожалению, выставлен уровень 9. Это требует 674 Мб ОЗУ против 94 Мб на 6 уровне. Всё это привело к тому, что на серверах autopkgtest тесты начали завершаться с ошибкой. Вначале разработчики посчитали это временной дикостью, но когда и в версии 1.1.9 ничего не изменилось, то стало понятно, что что-то не так .

Был создан скрипт, который запустил тесты с ограничениями ulimit, и тогда нащупали проблему.

Итог? APT теперь использует уровень 6.

Новые возможности

  • С версии APT 1.1.8 введён файл /usr/lib/apt/apt-helper для подготовки нас к будущему, где в системе могут быть различные архиваторы. Разные файлы-индексы (к примеру Contents) могут быть сжаты различными алгоритмами (к примеру LZ4).
  • Добавлена возможность, позволяющая серверам объявлять, что они не желают чтобы скачивался и использовался некоторый контент "Architecture: all". Это позволит уменьшить избыточность данных и улучшит производительность утилиты apt-file при работе с архитектурно зависимыми файлами-индексами Contents.
  • С APT 1.1.9 буферизируется запись при оперции-методе rred, что сокращает время работы на 50%. Что такое rred? Никто не знает! Оформлен даже баг apt-get uses undocumented non-word "rred" in the user interface. Объяснения один лучше другого. Читайте и выбирайте понравившееся. Мне нравится объяснение через редактор ED и его стиль нахождения отличий. Его строгая версия Restricted ED реализует ограниченный набор команд для безопасности. RRED - усиление усиления. Как Вам?
  • Для apt улучшены алгоритмы построения кэша различными путями: просмотр таблицы теперь использует std::unordered_map вместо std::map, получив inline функции isspace_ascii() и tolower_ascii(), которые сами по себе не велики и вызываются часто. Хэш функция переключена на использование DJB, что позволило увеличить размер таблицы и снизить средний размер bucket с 6,5 до 4,5.
  • До apt 1.1.10 запись кэш происходила так
    • Кэш пишется во временный файл и выставляется грязный бит (dirty bit) в true.
    • Вызывается fsync() для принудительной синхронизации.
    • Пишется новый заголовок-header с выставлением грязного бита в false.
    • Вызывается fsync() для принудительной синхронизации.
    • Временный файл переименовывается в истинное имя.

    Последний шаг не нужен, так как повреждённый кэш не помеха при выставленном грязном бите, так что можно было перестроить кэш. Но наиболее важен факт, что второй шаг не нужен. Синхронизация 50 мб занимает ощутимое время и по тестам: на HDD это занимает 56%, а на SSD 25% общей генерации теста!

    APT 1.1.10 не использует sync вообще. Теперь используется алгоритм контрольных сумм adler32, что даёт скорость и поможет понять, если что-то испортит кэш. Для большинства людей будет серьёзное улучшение в работе с утилитами типа apt-get, коих большинство, НО, к сожалению, прогнозируем, что у людей, использующих apt-cache, чуть возрастёт время работы.

Секреты пакетного менеджемента.

Дата последней правки: 2023-12-27 17:31:32

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта