Files
ARSV/README.md
2026-07-29 04:39:31 +03:00

115 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# alt-rpm-set-version
Research on ALT Linux RPM set.c and dependency comparison using encoded symbol sets.
- [Docs about current set:version implementation](Docs/set:version.md)
- [Docs about rewrite implementation (ru)](Docs/set9_ru.md)
# 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 |
Более подробные данные сравнения приведены [здесь](Docs/test_result.md)
# Testing
Для проверки используются четыре скрипта из каталога `scripts`.
## Случайные наборы символов
### `scripts/rpmsetinit/compare_random_sets.py`
Проверяет совместимость кодировщиков: компилирует `set.c` и
`reimplement/newset.c`, генерирует случайные списки символов и сравнивает
полученные set-строки при случайном `bpp` от 10 до 32.
Пути до наобходимых файлов приведены в коде скрипта.
Минимальный запуск из корня репозитория:
```sh
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`. Скрипт генерирует равные, вложенные, несравнимые и
некорректные множества, проверяет оба направления сравнения и сопоставляет
коды результатов двух реализаций.
Пути до наобходимых файлов приведены в коде скрипта.
Минимальный запуск:
```sh
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:
```sh
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` и разрешить доступ к
счётчикам производительности.
Запуск:
```sh
bash scripts/run-setc-bench.sh
```
По умолчанию рабочие каталоги создаются в `~/setc-bench`, а итоговые TSV и
perf-артефакты — в `~/res`. Первый запуск скачивает исходники и собирает RPM,
поэтому занимает значительно больше времени, чем случайные проверки.