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.
Минимальная подготовка:
- Запускать на ALT Linux p11 с настроенными
gear-hsh/hasherи разрешённым монтированием/proc. - Скопировать сравниваемые реализации в
~/setc/, по одному файлу*.cна вариант. - Проверить настройки в начале скрипта:
PACKAGER,APT_SOURCE,CPUи каталогиSETC_DIR,WORK_ROOT,RESULT_DIR. - Для запуска без perf установить
COLLECT_PERF=0; для профилирования оставитьCOLLECT_PERF=1, установить пакетperfи разрешить доступ к счётчикам производительности.
Запуск:
bash scripts/run-setc-bench.sh
По умолчанию рабочие каталоги создаются в ~/setc-bench, а итоговые TSV и
perf-артефакты — в ~/res. Первый запуск скачивает исходники и собирает RPM,
поэтому занимает значительно больше времени, чем случайные проверки.