В корне репозитория необходимо выполнить:
make docker-compose-upКоманда:
- Проверяет, что доступен Python 3.11 или новее, и читает список Python-зависимостей из
pyproject.toml. - Инициализирует Git-подмодули командой
git submodule update --init --recursive. - Собирает Docker-образ
imgtests-yocto-builder. - Создаёт отсутствующие Docker volumes для сборки Yocto, загрузок,
sstate-cache, OpenSUSE, PostgreSQL, Bencher и VictoriaMetrics. Для томов Yocto также настраивается владелец файлов. - Выполняет
docker compose up --detach --build: собирает остальные Docker-образы и запускает сервисы в фоновом режиме. - В сервисе
imgtests-yoctoзапускаетсяbitbake, после чего собранный образ загружается в QEMU. В сервисеimgtests-suse-156с официального сайта загружается образ OpenSUSE с помощью скриптаscripts/opensuse/download_images.py, после чего система подготавливается и запускается в QEMU. - В сервисе
imgtests-analyzerвыполняются миграции базы данных, запускаются веб-интерфейс и фоновые обработчики задач.
Для остановки стенда необходимо выполнить:
make docker-compose-downВ docker/image_builder.dockerfile клонируется Poky из официального репозитория Yocto Project, ветка walnascar. Название собираемого образа задаётся переменной OS_IMAGE в .env.dist:
OS_IMAGE=core-image-minimalПо умолчанию BitBake собирает core-image-minimal для qemux86-64. Итоговый QEMU-образ находится в каталоге:
${BUILD_DIR}/tmp/deploy/images/qemux86-64/
Ожидаемое имя файла:
${OS_IMAGE}-qemux86-64.rootfs.ext4.qcow2
Список созданных файлов можно проверить во время работы контейнера:
docker compose --file docker/compose.yml --project-directory . \
exec imgtests-yocto sh -lc 'ls -lh "$BUILD_DIR/tmp/deploy/images/qemux86-64/"'Команда make docker-compose-up запускает Compose в режиме --detach. Поэтому после сборки Docker-контейнеров процесс BitBake продолжается в фоне. Следить за ходом сборки можно по логам сервиса imgtests-yocto:
docker compose --file docker/compose.yml --project-directory . \
logs --follow imgtests-yoctoВ логах BitBake отображаются разбор рецептов, количество запущенных задач и текущие задачи. После успешной сборки запускается runqemu, и в логах появляется процесс загрузки Poky.
Состояние всех сервисов можно проверить командой:
docker compose --file docker/compose.yml --project-directory . ps --allПоследние 200 строк логов без режима ожидания:
docker compose --file docker/compose.yml --project-directory . \
logs --tail 200 imgtests-yoctoОшибка на этапе сборки Docker-образа отображается непосредственно в выводе make: команда завершается с ненулевым кодом, а Docker указывает неуспешный шаг Dockerfile.
Если BitBake завершается с ошибкой, сервис imgtests-yocto останавливается. Проверить состояние и код завершения можно так:
docker compose --file docker/compose.yml --project-directory . ps --all
docker inspect \
"$(docker compose --file docker/compose.yml --project-directory . ps --all --quiet imgtests-yocto)" \
--format 'status={{.State.Status}} exit_code={{.State.ExitCode}}'В логах BitBake следует искать сообщения ERROR:, Task (...) failed и итоговый блок Summary. Для завершившейся с ошибкой задачи BitBake также выводит путь к файлу log.do_<task> в каталоге tmp/work/.../temp/.
После устранения причины сборку можно повторно запустить той же командой:
make docker-compose-upТома загрузок и sstate-cache сохраняются, поэтому загруженные файлы и результаты успешно выполненных задач могут быть использованы повторно.
Для загрузки системных пакетов, клонирования Poky, получения исходников BitBake и Docker-образов требуется доступ к внешним ресурсам. Если прямой доступ к ним ограничен, необходимо настроить прокси.
Прокси для команд Git, выполняемых на хосте, можно задать через переменные окружения:
export HTTP_PROXY=http://proxy.example.com:3128
export HTTPS_PROXY=http://proxy.example.com:3128
export NO_PROXY=localhost,127.0.0.1,::1,10.5.0.0/24Для Docker-сборок и создаваемых контейнеров рекомендуется настроить прокси Docker-клиента в ~/.docker/config.json:
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:3128",
"httpsProxy": "http://proxy.example.com:3128",
"noProxy": "localhost,127.0.0.1,::1,10.5.0.0/24,imgtests-postgres"
}
}
}После изменения настроек повторить make docker-compose-up.
По умолчанию Django UI доступен по адресу:
http://localhost:8000
Порт задаётся переменной DJANGO_PORT в .env.dist. Перед запуском тестов убедиться, что imgtests-analyzer, PostgreSQL и выбранная тестовая система находятся в состоянии running.
На главной странице отображаются Yocto Project и OpenSUSE. Кнопка Reset to Default восстанавливает стандартный список платформ — Yocto Project и OpenSUSE, удаляя добавленные пользователем дистрибутивы.
Рисунок 1 — Стартовая страница веб-интерфейса
Затем:- Выбрать тестируемый дистрибутив.
- Указать число повторов в поле Number of test runs.
- Выбрать раннер Basic или Profiled.
- Настроить параметры и нажать Run tests.
- Статус фоновой задачи отображается под кнопкой. Дополнительный вывод доступен в логах
imgtests-analyzer.
Раннер Basic последовательно запускает выбранные наборы готовых тестов и сохраняет результаты каждой утилиты в PostgreSQL.
Рисунок 2 — Basic runner со значениями по умолчанию
Доступны два варианта:
- Use Default Configuration — используются стандартные наборы для файловой системы, памяти, системных вызовов, IPC и сети;
- Custom Configuration — можно выбрать наборы тестов, изменить их длительность и при необходимости оставить только отдельные тесты внутри набора. Конфигурацию можно сохранить отдельно для каждого дистрибутива.
Рисунок 3 — Basic runner с выбором наборов и длительности тестов
Рисунок 4 — Basic runner с выбранными тестами после сохранения конфигурации и запуска
Раннер Profiled строит план нагрузки из стадий и запускает задачи для выбранных подсистем. Доступны профили load, stress, stability, scalability, volume, isolated, spike и diagnostic.
Рисунок 5 — Profiled runner со значениями по умолчанию
- Use Default Profiled Configuration — профиль
load, длительность 120 секунд, все подсистемы и автоматически выбранные шаблоны стадий; - Single run — один выбранный профиль с заданной длительностью, паттерном нагрузки и набором подсистем;
- Matrix run — последовательный запуск нескольких профилей, для каждого из которых можно задать отдельную длительность.
Доступные паттерны нагрузки: soft, balanced, intense, extreme, spike. Доступные подсистемы: file, IPC, memory, network, syscalls, system.
Рисунок 6 — Profiled runner с настройкой профиля, паттерна и подсистем
Все эксперименты и результаты утилит сохраняются в PostgreSQL. На главной странице UI также доступны HTML- и Excel-отчёты.
На главной странице необходимо выбрать карточку View All .html Reports. Далее откроется страница Test Reports, также доступная по адресу:
http://localhost:8000/reports/
Рисунок 7 — Страница HTML-отчётов
Для запусков с раннером Profiled индивидуальный HTML-отчёт создаётся автоматически. В нём доступны:
- сведения об эксперименте и количестве успешных, завершившихся с ошибкой, сломанных и пропущенных задач;
- временная шкала стадий плана, плановая и фактическая длительность;
- агрегированные статистики по числовым метрикам: количество значений, среднее, дисперсия, квартили, 95-й перцентиль, минимум и максимум;
- статистики отдельно по стадиям;
- графики поддерживаемых метрик, включая системную нагрузку, результаты
fio,iperf3,stress-ngи других утилит при наличии данных.
На этой странице можно также выбрать два эксперимента и создать сравнительный HTML-отчёт. В нём отображаются общие и уникальные метрики, статистики и визуализации двух запусков.
На главной странице необходимо выбрать карточку View All .xls Reports, откроется страница Excel Reports, также доступная по адресу:
http://localhost:8000/excel-reports/
Рисунок 8 — Страница Excel-отчётов
Кнопка Generate New Excel Report формирует файл .xlsx из данных PostgreSQL. В книге находятся:
- конфигурации тестируемых систем;
- список экспериментов, время запуска и итоговые счётчики статусов;
- команды утилит и развёрнутые поля результатов;
- отдельные листы для разных типов тестов и метрик, если они присутствуют в базе.
Готовый файл можно скачать из списка отчётов.
Файлы отчётов создаются внутри контейнера imgtests-analyzer:
/home/user/imgtests/results
/home/user/imgtests/excel_reports
База PostgreSQL хранится в отдельном Docker volume. Каталоги HTML- и Excel-отчётов в текущем compose.yml не подключены к отдельному тому, поэтому перед удалением или пересозданием контейнера важные файлы следует скачать через UI или скопировать на хост.







