Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

dmabuf_dump
Дамп буфера DMA

Тип файла: команда
  Eng  

usage: dmabuf_dump [-abh] [per-process/per-buffer stats]

  • -a показать все буферы dma (ion) в большой таблице,
    сетка [буфер x процесс]

  • -b показать статистику DMA-BUF для каждого буфера,
    экспортера и устройства

  • -h показать эту справку

    Если указан PID, отображается информация dmabuf для этого процесса.
    Статистика DMA-BUF для каждого буфера не принимает аргументов.

       

    Комментарии
    DMA (Direct Memory Access) – прямой доступ к памяти

    Scatter/gather DMA
    С ростом скорости Ethernet адаптеров, contiguous DMA показал свою несостоятельность. В основном из-за того, что требовались области памяти достаточно большого размера, которые подчас невозможно было выделить, так как в современных системах фрагментация физической памяти достаточно высока. Во всем виноват механизм виртуальной памяти, без которого нынче никуда :)

    Решение напрашивается само собой: использовать вместо одного большого участка памяти несколько, но в разных регионах этой самой памяти. Возникает вопрос, но как же сообщить контроллеру устройства, как инициировать DMA трансфер и по какому адресу писать данные? И тут нашли решение, использовать дескрипторы, чтобы описывать каждый вот такой участок в оперативной памяти.

    Типичный дескриптор DMA буфера содержит следующие поля:
    Адрес участка ОЗУ (именно bus address), который предназначен для DMA трансфера.
    Размер описываемого участка ОЗУ.
    Опциональные флаги и другие специфические аргументы.
    Адрес следующего дескриптора в памяти.

    Структура дескрипторов определяется конкретным производителем контроллера устройства, и может содержать какие-либо другие поля. Дескриптор также как и DMA буфер, размещается в оперативной памяти.

    Алгоритм scatter/gather DMA следующий:
    Драйвер операционной системы выделяет и иницилизирует дескрипторы DMA буферов.
    Драйвер выделяет DMA буферы (участки ОЗУ для DMA трансфера) и записывает необходимую информацию о них в дескрипторы.
    Устройство по мере возникновения потребности, заполняет DMA буферы, и после того, как заполнен один или несколько буферов инициирует прерывание.
    Драйвер ОС просматривает все дескрипторы DMA буферов, определяет какие из них были заполнены контроллером устройства, пересылает данные из буфера далее по стеку устройств и помечает буфер как готовый к DMA трансферу.

    Порядок в каком контроллер устройства заполняет DMA буферы, определяется производителем. Контроллер может писать в первый свободный DMA буфер, либо просто писать подряд (дескрипторы DMA буферов в данном случае образуют односвязный кольцевой список) во все буфера и т.д.