Files
gx af70829a1d 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.
2026-06-03 06:34:28 +01:00

61 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, как и оценивалось ранее.