Project

General

Profile

Actions

Task #6608

open

Память: рост за время работы и тесты на него

Added by Redmine Admin about 1 month ago. Updated about 1 month ago.

Status:
New
Priority:
Normal
Assignee:
-
Start date:
09/21/2026
Due date:
% Done:

0%

Estimated time:

Description

После долгой работы система встаёт. Нужны тесты, которые ловят рост памяти на длинной дистанции, и устранение самого роста.

Подход: счётчик живых байт как глобальный аллокатор в тестовой цели, прогон тысяч кадров через сессию и толпу, проверка, что после прогрева живой объём не растёт и число выделений на кадр не зависит от номера кадра.

Кандидаты: история метрик, треки толпы при частой смене лиц, буферы кадров в потоке, выходные тензоры модели.

Actions #1

Updated by Redmine Admin about 1 month ago

Причина найдена и устранена.

Рост 35 МБ/с, с 176 МБ до 1.77 ГБ за 45 секунд работы приложения. queue.write_texture держит копию кадра до следующего submit; окно, которое скрыто, перекрыто или меняет размер, не рисует и не делает submit, поэтому каждый кадр камеры оставался: 1202 КБ на кадр. Правка: submit сразу после загрузки, poll для освобождения, переиспользуемый буфер подготовки. Замер приложения после правки: 140 -> 150 МБ за минуту и ровно.

Нагрузка процессора, вторая часть «зависания»: пустая комната просматривалась 16 проходами детектора каждый кадр (теперь раз в 3 кадра), ONNX Runtime держал поток на ядро с активным ожиданием (теперь 2 потока без ожидания), приложение создавало два источника моделей вместо одного. Без лица в кадре: 124% против 256–296%.

Тесты: app_memory (сессия 3000 кадров, толпа 895 кадров — живые байты Rust не растут, резидентный объём в пределах 32 МБ), adapters_display_gpu (минута кадров с мешем четырёх лиц; 900 загруженных и не нарисованных кадров — воспроизводил утечку, 1056 МБ до правки).

Остаток: окно на ControlFlow::Poll перерисовывает без паузы, это часть оставшихся 124%.

Actions #2

Updated by Redmine Admin about 1 month ago

Остаток закрыт в следующем коммите: окно на ControlFlow::Poll перерисовывало без паузы. Теперь цикл ждёт по 4 мс и рисует только при новом кадре камеры или новых показаниях. Процессор без лица в кадре: 34–41% (было 124% после первой правки, 256–296% в начале), память 137–140 МБ ровно. Тесты: adapters_display_window (политика перерисовки, частота проверки против интервала кадра), adapters_stream (is_waiting).

Actions

Also available in: Atom PDF