#!/usr/bin/env bash # Узел на урезанном процессоре — имитация стенда жюри (i7-9700E). # # bash docker/jury_cpu_test.sh /root/bags/doubleT_obstacle # доля 0.61 # bash docker/jury_cpu_test.sh /root/bags/cloud_with_fake_obj 0.5 # # Запускается на хосте (в WSL), не в контейнере. Узел идёт в отдельном # контейнере с квотой процессора, а проигрыватель и подсчёт — во втором, без # квоты: на стенде у проигрывателя свои ядра, и делить с ним квоту узла было бы # строже, чем на самом деле. # # Доля по умолчанию — отношение однопоточной производительности (PassMark # single thread): 2511 у i7-9700E против 4129 у Ryzen 5 7600X, на котором # писались замеры. Узел однопоточный (BLAS в один поток), поэтому доля одного # ядра и есть «ядро в 1.64 раза медленнее». Для другой машины передайте свою # долю. Квота нарезается периодами по 10 мс, а не по 100 мс по умолчанию, — # иначе узел работал бы рывками по 61 мс и стоял бы по 39 мс, что искажает # задержку кадра сильнее, чем настоящий медленный процессор. set -u BAG="${1:?укажите путь к бэгу на хосте}" SHARE="${2:-0.61}" here="$(cd "$(dirname "$0")" && pwd)" bag_dir="$(cd "$(dirname "$BAG")" && pwd)" bag_name="$(basename "$BAG")" quota=$(awk -v s="$SHARE" 'BEGIN{printf "%d", s * 10000}') docker rm -f fg_slow >/dev/null 2>&1 || true docker run -d --name fg_slow --network host --ipc host \ --cpu-period 10000 --cpu-quota "$quota" flyguard > /dev/null echo "узел: квота $SHARE ядра ($quota мкс из 10000)" docker run --rm --network host --ipc host -e NODE=external \ -v "$bag_dir:/data:ro" -v "$here:/smoke:ro" flyguard \ bash /smoke/demo_test.sh "/data/$bag_name" 2>&1 | grep -v "^\s*$" docker kill --signal=INT fg_slow > /dev/null 2>&1 sleep 3 echo echo "=== итог узла ===" docker logs fg_slow 2>&1 | grep -E "итог|ошибк|Traceback" | sed 's/.*\] //' docker rm -f fg_slow > /dev/null 2>&1