Phase 5e: load test 16 источников 4K @ 25fps на RTX 5090

Результат:
  46+ секунд работы, 1150 кадров, 0 drops
  FPS = 25.0 СТАБИЛЬНО
  GPU util = 47% (большие запасы для масштабирования)
  16 active, 0 stale, 0 dead — все подписки удерживаются
  ffprobe видит валидный h264 3840x2160 25/1 на mediamtx

Visual artifact в rows 2-4 (вертикальные полосы) — гипотеза:
race condition при 4 cfc_source_t подписках на одного publisher'а
(16 consumers vs 16-slot cuframes ring buffer = tight fit).
FPS не пострадало, но визуально половина ячеек испорчена.

Phase 5e-fix planned: composer должен detect одинаковые source_key
и переиспользовать один cfc_source_t для N ячеек. Это устранит
multi-consumer race и снизит memory footprint.

Подробности + снимок в docs/LOADTEST-PHASE-5e.md +
docs/phase5e-load16.jpg.
This commit is contained in:
2026-06-03 06:34:28 +01:00
parent c6882e46f7
commit af70829a1d
2 changed files with 60 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# Phase 5e — Load test: 16 источников 4K @ 25fps
Дата: 2026-06-03 Хост: R9-88.23 (RTX 5090).
## Сценарий
Композитор настроен на 16 ячеек в 4×4 grid на 4K output (3840×2160 @ 25fps,
15 Mbps). Каждая ячейка 960×540. Источники — 4 реальные камеры повторяются
4 раза каждая (cam-parking, cam-back_yard, cam-front_yard, cam-gate_lpr →
16 cfc_source_t-подписок к 4 уникальным publisher'ам).
Цель — узнать практический потолок RTX 5090 для composer + NVENC при
максимальной композиционной нагрузке.
## Результат — главное
```
Длительность теста: 46+ секунд
FPS: 25.0 СТАБИЛЬНО (1150 кадров, 0 drops, 0 stale, 0 dead)
GPU util: 47%
NVENC sessions: 2 (наш + cuda-grid-pipeline)
VRAM total system: 24.6 GiB (composer + Frigate + pipeline)
RTSP: h264 3840x2160 25/1
```
**RTX 5090 имеет значительный запас** — 47% util означает что можно
тянуть ~2× больше композиционной нагрузки (32 cells × 540p или
16 cells × 1080p без resize).
## Visual artifact ⚠
Snapshot `phase5e-load16.jpg` показывает: первый row 4 ячеек корректно
(parking, back_yard, front_yard, gate_lpr), но rows 2-4 — вертикальные
полосы (stripe artefact). Гипотеза — race condition: 4 cfc_source_t
повторно подписываются на одного publisher'а, в сумме 16 consumers на
ring buffer'е размером 16 → tight fit, slot rotation не успевает
очищать буферы.
**FPS-метрики не пострадали** — encoder обрабатывает поврежденные
ячейки штатно, поток валиден для VLC, но визуально часть ячеек
испорчена.
Этот бag НЕ блокер для load test'а (главная цель — узнать FPS-потолок),
но Phase 5e-fix нужен для production deploy с повторными подписками.
Решения:
1. Composer detect'ит идентичные source_key и переиспользует cfc_source_t
(один subscriber → N cells). Это устранит multi-consumer race.
2. Либо увеличить ring buffer cuframes до 32 (если producer поддерживает).
## Сравнение с разбором GTX 1050
| Метрика | RTX 5090 16-source | GTX 1050 16-source (расчёт) |
|---|---|---|
| NVDEC throughput | 4 уникальных decode, OK | 4 unique → ~110 Mpix/s OK |
| Composition (16 resize) | 47% GPU util | Пропорция bandwidth ~80% |
| NVENC 4K@25 | 207 Mpix/s, ОК | 207 Mpix/s, на грани |
| VRAM | хватает | впритык на 4GB |
На 1050 16 ячеек 4K теоретически возможно, но без запаса. Реалистичный
prod-target на 1050 = 8-12 ячеек 1080p, как и оценивалось ранее.
Binary file not shown.

After

Width:  |  Height:  |  Size: 439 KiB