2026-07-28 06:29:13 +03:00
2026-07-28 06:29:13 +03:00
2026-07-02 15:19:31 +03:00
2026-07-28 06:24:42 +03:00
2026-07-13 20:36:30 +03:00
2026-07-26 17:54:52 +03:00
2026-07-01 19:17:18 +03:00
2026-07-28 06:24:42 +03:00

alt-rpm-set-version

Research on ALT Linux RPM set.c and dependency comparison using encoded symbol sets.

Compare results

command original set.c orig set (w/out optim) set9.c
-s check x1 x3.134 x1.041
-s autoremove x1 x2.564 x1.053
-s install rpm-build x1 x2.578 x1.036
-s install openuds-server x1 x1.946 x1.094
-s install password-store x1 x2.941 x1.073
--enable-upgrade -s upgrade x1 x1.351 x1.100
-s dist-upgrade x1 x1.204 x1.044

Более подробные данные сравнения приведены здесь

Testing

Для проверки используются четыре скрипта из каталога scripts.

Случайные наборы символов

scripts/rpmsetinit/compare_random_sets.py

Проверяет совместимость кодировщиков: компилирует set.c и reimplement/newset.c, генерирует случайные списки символов и сравнивает полученные set-строки при случайном bpp от 10 до 32.

Пути до наобходимых файлов приведены в коде скрипта. Минимальный запуск из корня репозитория:

python3 scripts/rpmsetinit/compare_random_sets.py

Нужны Python 3 и C-компилятор cc. Скрипт работает непрерывно до Ctrl-C; входы, на которых результаты различаются, сохраняются в scripts/rpmsetinit/error/.

scripts/rpmsetcmp/compare_random_sets.py

Проверяет совместимость rpmsetcmp() из set.c и reimplement/newset.c. Скрипт генерирует равные, вложенные, несравнимые и некорректные множества, проверяет оба направления сравнения и сопоставляет коды результатов двух реализаций.

Пути до наобходимых файлов приведены в коде скрипта. Минимальный запуск:

python3 scripts/rpmsetcmp/compare_random_sets.py

Нужны Python 3 и cc. Тест также работает до Ctrl-C, а найденные расхождения сохраняет в scripts/rpmsetcmp/error/.

Проверка зависимостей Sisyphus

scripts/rpmsetcmp/check_sisyphus_set_relations.sh

Скрипт загружает в изолированный временный APT-каталог метаданные Sisyphus, извлекает set:version Provides и Requires, компилирует компаратор из reimplement/newset.c и проверяет, что требования пакетов удовлетворяются хотя бы одним провайдером. По умолчанию проверяются первые 100 уникальных требований; лимит задаётся переменной REQUIRE_LIMIT в начале файла. REQUIRE_LIMIT=0 для снятия лимита

Минимальный запуск на ALT Linux с доступом к зеркалу Sisyphus:

bash scripts/rpmsetcmp/check_sisyphus_set_relations.sh

Нужны apt-get, apt-cache, cc. В конце выводятся числа совместимых требований, требований без провайдера, несовместимых пар и ошибок декодирования.

Сравнение производительности

scripts/run-setc-bench.sh

Скрипт берёт все *.c из ~/setc, для каждого варианта собирает отдельные rpm-build и librpm7 в hasher, подставляя файл как lib/set.c. Затем он запускает с этой librpm одинаковый набор симуляций APT (check, autoremove, install, upgrade, dist-upgrade), записывает коды возврата и время трёх прогонов в TSV. При включённых COLLECT_PERF и PERF_RECORD дополнительно создаются результаты perf stat, perf record, perf report и perf annotate.

Минимальная подготовка:

  1. Запускать на ALT Linux p11 с настроенными gear-hsh/hasher и разрешённым монтированием /proc.
  2. Скопировать сравниваемые реализации в ~/setc/, по одному файлу *.c на вариант.
  3. Проверить настройки в начале скрипта: PACKAGER, APT_SOURCE, CPU и каталоги SETC_DIR, WORK_ROOT, RESULT_DIR.
  4. Для запуска без perf установить COLLECT_PERF=0; для профилирования оставить COLLECT_PERF=1, установить пакет perf и разрешить доступ к счётчикам производительности.

Запуск:

bash scripts/run-setc-bench.sh

По умолчанию рабочие каталоги создаются в ~/setc-bench, а итоговые TSV и perf-артефакты — в ~/res. Первый запуск скачивает исходники и собирает RPM, поэтому занимает значительно больше времени, чем случайные проверки.

S
Description
Research on ALT Linux RPM set.c and dependency comparison using encoded symbol sets.
Readme CC0-1.0
4.9 MiB
Languages
C 37.7%
TeX 24.3%
Python 20.2%
Shell 11.2%
C++ 6.6%