Files
cuframes-composer/docs/LOADTEST-PHASE-5e.md
T
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

3.2 KiB
Raw Blame History

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, как и оценивалось ранее.