Rockchip · AI & Linux Hub

Linux и загрузка

Rockchip Linux DMA-BUF: утечки памяти, IOVA и пиковое потребление

Все макросы отладки DMA-BUF RK3588 Linux 5.10, procfs и исходные примеры памяти видеопроигрывания.

· ArmSoM Editorial · Rockchip source documentation · 4 мин чтения

Применимость к ArmSoM и источник

Справочный материал для адаптации ArmSoM, переведённый с китайского V1.0.0. Область исходника: RK3588, Linux 5.10. Английский PDF отсутствует; английская, русская и немецкая версии полностью переведены с китайского. Немецкая использует те же изображения, что английская статья. Конкретные платы ArmSoM, SDK/BSP и сочетания драйверов не подтверждены и аппаратно не проверены. Сверьте SoC, карту памяти платы, SDK/BSP, конфигурацию ядра и реализацию драйвера. Код, адреса, журналы и числа — примеры исходника, а не результаты тестов ArmSoM.

Редакционные примечания · ArmSoM Docs · Rockchip Linux

Исходник описывает диагностику утечек DMA-BUF, ошибок потока данных и отображения памяти. Технических рисунков нет; вымышленные не добавлены.

SoC исходника Ядро исходника
RK3588 Linux 5.10

1. Введение

DMABUF — структура буфера для общей памяти мультимедийных устройств. Дескриптор fd DMABUF позволяет разделять память между процессами: zero-copy повышает производительность, асинхронный доступ уменьшает связанность модулей.

2. Изменения Linux для отладки DMABUF

2.1 DMABUF_DEBUG

Исходный BSP поддерживает DMABUF debug начиная с Linux-5.10. Измените arch/arm64/configs/rockchip_defconfig:

CONFIG_DMABUF_DEBUG=y

После включения макроса каждому DMABUF назначается имя по умолчанию pid+taskname длиной 16 символов. Пример:

416-allocator@4.

2.2 DMABUF_PROCFS

Исходный BSP поддерживает DMABUF procfs начиная с Linux-5.10. Измените arch/arm64/configs/rockchip_defconfig:

CONFIG_RK_DMABUF_PROCFS=y

Включение создаёт узел rk_dmabuf в /proc/ со следующими узлами отладки. Комментарии блока сохранены из китайского исходника:

dev # 显示所有DMABUF已经attach的device
sgt # 显示所有DMABUF的ScatterListTable,显示其IOVA
size # 显示所有DMABUF的total size
peak # 显示所有DMABUF的total size的峰值

Узлы: dev — присоединённые устройства; sgt — ScatterListTable и IOVA; size — общий размер; peak — его максимум.

2.3 DMABUF_DEBUG_ADVANCED

Подфункция DMABUF procfs получает физические адреса памяти DMABUF. Измените arch/arm64/configs/rockchip_defconfig:

CONFIG_DMABUF_DEBUG_ADVANCED=y

После включения все DMABUF проходят attach/map через fake device для получения sgt. Это помогает /proc/rk_dmabuf_sgt показывать все IOVA. Путь сохранён дословно; сверьте его с работающим BSP.

3. Вопросы и ответы

3.1 Утечка DMABUF при воспроизведении видео на RK3588?

Включите отладочные макросы и проверьте память при входе на главный экран:

console:/ # cat /proc/rk_dmabuf/size
Total: 65552 KiB

Воспроизведите видео, завершите просмотр, удалите историю и вернитесь на главный экран:

console:/ # cat /proc/rk_dmabuf/size
Total: 83948 KiB

3.2 Пиковое потребление DMABUF при воспроизведении видео на RK3588?

Через узел отладки mpp проверьте суммарную память DMABUF воспроизведения:

console:/ # cat /proc/mpp_service/sessions-summary
fdc38100.rkvdec-core Total: 699760 KiB

Проверьте пиковую память через узел отладки DMABUF:

console:/ # cat /proc/rk_dmabuf/peak
Peak: 1544 MiB

Сбросьте пик в ноль и повторите наблюдение:

console:/ # echo 0 > /proc/rk_dmabuf/peak

Другие статьи по теме → · Учебные маршруты →