потери целиком в обвязке теста, причём в двух разных местах

This commit is contained in:
Maxim
2026-07-17 10:04:23 +03:00
parent bbda48433c
commit d0a82bd92d

View File

@@ -82,7 +82,14 @@ GWP=\$!
/tmp/transmitter -f $FREQ -r $RATE -b $BW -g $TXGAIN -p $PAUSE \
-c $FEC $GFLAG -u local: < /tmp/gw.fifo 2>/tmp/tx.log &
TXP=\$!
sleep 1
# Ждём готовности транзмиттера, а не спим вслепую: инициализация iio (LO, буферы)
# занимает секунды, а из пайпа он до неё не читает. Пайп 64 КБ ≈ весь тестовый
# файл → шлюз штатно дропает хвост по бэкпрешеру, если начать лить раньше.
i=0
while [ \$i -lt 20 ]; do
grep -q "Ожидание данных" /tmp/tx.log 2>/dev/null && break
i=\$((i+1)); sleep 1
done
/tmp/udp_probe send 127.0.0.1:$PORT_A $CHUNK $PACE_MS \
< /tmp/probe_in.bin 2>/tmp/probe_tx.log
sleep 2
@@ -93,9 +100,14 @@ EOF
echo "=== [5/6] Гашение цепочки B ==="
sleep 3 # дохлебать хвост эфира
# udp_probe по SIGTERM печатает статистику и закрывает файл — гасим активно,
# не дожидаясь IDLE (тот же паттерн sleep+kill, что в test_file_link.sh).
"${SSH[@]}" -n "root@$B" "killall udp_probe receiver udp_gw 2>/dev/null || true" || true
# ПОРЯДОК ГАШЕНИЯ КРИТИЧЕН. receiver.c:798 — group_flush()+rb_flush_all() стоят
# ПОСЛЕ основного цикла: хвост незавершённой группы (до 16 кадров) уходит в
# stdout только в момент смерти приёмника. Поэтому гасим строго по течению:
# receiver (флашит хвост) → пауза на прохождение через udp_gw -d → udp_probe.
# Убить их разом = потерять последнюю группу (было: доставлено 64, принято 48).
"${SSH[@]}" -n "root@$B" "killall receiver 2>/dev/null || true" || true
sleep 3 # хвост: receiver → пайп → udp_gw -d (выйдет сам по EOF) → UDP → probe
"${SSH[@]}" -n "root@$B" "killall udp_probe udp_gw 2>/dev/null || true" || true
wait "$B_PID" 2>/dev/null || true
echo "=== [6/6] Сверка ==="
@@ -123,6 +135,10 @@ else
echo " Меры: TXGAIN ближе к 20, антенны разнести/переориентировать."
echo " - 'дропов' > 0 у 'udp_gw -l (вход)' → вход быстрее линка (~107 КБ/с"
echo " на -G -p 3000): подними PACE_MS. Это контрактный дроп, семантика UDP."
echo " Если дропов ровно 1-2 в конце — транзмиттер ещё не читал пайп на"
echo " старте (см. ожидание 'Ожидание данных' в шаге [4])."
echo " - 'доставлено' > принятых probe → гашение обогнало хвост приёмника"
echo " (receiver.c:798 флашит последнюю группу только при выходе)."
echo " - размер 0 и в rx.log 0 кадров → приёмник не работал во время передачи:"
echo " частота/усиление/антенны, либо цепочка B умерла по IDLE (=$IDLE с)."
echo " - размер совпал, md5 нет → искажение полезной нагрузки: техдолг #1/#3."