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


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

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

Тип файла: команда
  Рус  
usage:  dmabuf_dump [-abh] [per-process/per-buffer stats]

  • -a show all dma buffers (ion) in big table, [buffer x process] grid

  • -b show DMA-BUF per-buffer, per-exporter and per-device statistics

  • -h show this help If PID is supplied, the dmabuf information for that process is shown. Per-buffer DMA-BUF stats do not take an argument.
  •    

    Комментарии
    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 буферов в данном случае образуют односвязный кольцевой список) во все буфера и т.д.