Record ACK scheduling regression and successful desktop load

This commit is contained in:
evgeny committed 2026-10-29 22:36:14 +01:00
1 parent b1a272fa23
commit 552f7b31b0
2 files changed
+53 -2

No files matched your search

+37
View File
@@ -423,3 +423,40 @@ local completion→HCI до1.497s; у1111 RX кадров HCI→callback0.3..2.6
test_etcp_windows63 сценария и исправленный server_lifecycle PASS. Desktop GUI/probe
и Android APK/instrumentation arm64/x86_64 пересобраны; APK установлен на A52.
Обычный desktop VibeChat и Android-политика после проб восстановлены.
BLE version3: ACK и ограничение очереди (29.10.2026)
---------------------------------------------------
Общий C-драйвер добавляет flow_id BE16 к каждому DATA GATT-value и отдельную
ACK-характеристику f61a9024-4abc-45ac-98e1-761df4c13811 (Write Request/Indication).
ACK содержит только последний полученный flow_id BE16. Public DATA/INVITE API
сохраняет владение ll_entry; backend имеет отдельный внутренний wire-канал ACK.
До opened обязательны все три подписки; ранний HELLO отвергается с WARN.
Все DATA, включая INIT/keepalive/bootstrap, расходуют одно окно12500байт на направление.
Кредит возвращает только удалённый ACK; ring хранит размеры, не payload.
При полном окне TX останавливается, ACK продолжает работать; подтверждение будит writable.
Без прогресса ACK15s действует самостоятельный watchdog, не зависящий от native pending.
ACK объединяется до последнего ID, следующий разрешён через15ms после completion
предыдущего. Это также гарантирует >=15ms между отправками и даёт DATA/INVITE время
между ACK даже при медленном ATT. Первоначальный безусловный приоритет ACK давал
голодание DATA: /tmp/ble-ready-ack16-desktop-v3-* получил0/512 за233.032s,
хотя окно строго соблюдалось, HCI TX queue была <=0.753s. Raw-проба до исправления
планировщика /tmp/ble-ready-raw-ack16-v3-* дала64/96, complete=0.
Новая точная регрессия20ms ACK completion + непрерывный RX падала до исправления;
после него встречный DATA приходит примерно за21ms. Изменения ETCP для этого не нужны.
Проверки: общий transport (MTU23/247/517, дуплексное окно, ACK>=15ms,70000 IDs,
повторы/неверный ACK, ранний HELLO, настоящий15s watchdog), identity, private-bus BlueZ,
ETCP/packet-link/UI проходят. ASAN/UBSan с detect_leaks=1:3/3 PASS.
./check.sh230/230 + proxy/burst/load PASS (180s). Android APK/instrumentation
arm64-v8a/x86_64, app/router unit tasks и desktop GUI/probes собираются;
WinRT backend с ACK проходит MinGW/C++WinRT cross-build, физического Win radio нет.
Аппаратная проверка после исправления планировщика:
- /tmp/ble-ready-ack16-fair-desktop-v3-*: Linux central, Android A52 peripheral.
512/512 echo, по768000байт в каждую сторону за72.344s, суммарно21232B/s.
Максимум DATA flight:8713байт desktop,4442 Android, оба меньше12500.
Минимальный интервал отправок ACK:27.958ms desktop,31.561ms Android.
С HCI сопоставлены1220 TX/1057 RX кадров по seq/размеру/отпечатку:
local completion→HCI TX <=0.174s, HCI RX→callback0.6..2.9ms.
Это успешный полный проход, не прежняя незавершённая проба на183/512.
+16 -2
View File
@@ -279,8 +279,10 @@ Instrumentation временно включает echo, возвращает с
Запрос не гарантирует смену PHY: onPhyUpdate/onPhyRead логируют фактические TX/RX.
При отсутствии поддержки остаётся согласованный PHY. S2/S8 — параметры только
LE Coded PHY (дальность/скорость), с выбранным 2M применяется NO_PREFERRED.
У Android BluetoothGattServer нет public requestConnectionPriority; интервал
для входящего подключения согласует central. Сам UUID/advertising остаётся legacy
У Android BluetoothGattServer нет public requestConnectionPriority; входящий link
использует дополнительный BluetoothGatt handle того же ACL только для HIGH.
Запрос/результат логируются, handle закрывается при teardown; нового ACL для настройки нет.
Сам UUID/advertising остаётся legacy
1M для обнаружения; PHY 2M относится к установленному соединению.
Проверка 2026-10-29
@@ -295,3 +297,15 @@ Q8 сообщает isLe2MPhySupported=false; readPhy возвращает statu
Общий C codec/transport и BlueZ mock: ASAN+UBSAN, leak detection — 3/3 PASS.
Сборки Android arm64-v8a/x86_64, desktop GUI Linux и WinRT cross-build проходят.
Физический Windows radio и несколько одновременных Android-клиентов не проверены.
Проверки ACK version3
---------------------
test_ble_transport: MTU23/247/517, duplex12500-byte bound при задержанных удалённых ACK,
completion сам не освобождает окно, дубликаты/неверный ACK, переход65535→0
на70000 GATT-values, интервал ACK>=15ms и настоящий15s ACK watchdog без native pending.
Отдельная регрессия имитирует20ms completion ACK при непрерывном входящем DATA:
до исправления планировщика встречный DATA не приходил за250ms; после — примерно21ms.
Таймер отсчитывается после completion ACK, чтобы новый ACK не вытеснял DATA/INVITE.
Private-bus BlueZ проверяет обязательность третьей подписки, адресные ACK indications
двух клиентов и ACK Write Request в исходящей роли. test_ble_etcp проверяет настоящий
ETCP/crypto, потери DATA и INVITE, NCD/BGP и lifecycle через новый flow prefix.