add info about testing

This commit is contained in:
2026-07-28 06:24:42 +03:00
parent cea9f6b72a
commit 7518ed0b2f
12 changed files with 143 additions and 1909 deletions
+108
View File
@@ -3,3 +3,111 @@
Research on ALT Linux RPM set.c and dependency comparison using encoded symbol sets.
- [Docs about current set:version implementation](Docs/set:version.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,
поэтому занимает значительно больше времени, чем случайные проверки.