Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Прямой доступ к памяти ( DMA ) - это функция компьютерных систем, которая позволяет определенным аппаратным подсистемам получать доступ к основной системной памяти ( памяти с произвольным доступом ) независимо от центрального процессора (ЦП).

Без DMA, когда ЦП использует запрограммированный ввод / вывод , он обычно полностью занят на протяжении всей операции чтения или записи и, таким образом, недоступен для выполнения другой работы. При использовании DMA ЦП сначала инициирует передачу, затем выполняет другие операции, пока выполняется передача, и, наконец, получает прерывание от контроллера DMA (DMAC), когда операция завершена. Эта функция полезна в любое время, когда ЦП не может поддерживать скорость передачи данных или когда ЦП должен выполнять работу в ожидании относительно медленной передачи данных ввода-вывода. Многие аппаратные системы используют DMA, включая контроллеры дисководов , видеокарты , сетевые карты и звуковые карты.. DMA также используется для передачи данных внутри кристалла в многоядерных процессорах . Компьютеры, у которых есть каналы DMA, могут передавать данные на устройства и с них с гораздо меньшей нагрузкой на ЦП, чем компьютеры без каналов DMA. Точно так же элемент обработки внутри многоядерного процессора может передавать данные в свою локальную память и из нее, не занимая свое процессорное время, что позволяет выполнять вычисления и передачу данных параллельно.

DMA также может использоваться для копирования или перемещения данных в памяти «из памяти в память». DMA может выгружать дорогостоящие операции с памятью, такие как большие копии или операции сбора данных , с ЦП на выделенный механизм DMA. Примером реализации является технология ускорения ввода-вывода . DMA представляет интерес для вычислительных архитектур " сеть на кристалле" и " в памяти" .

Принципы [ править ]

Сторонние [ править ]

Стандартный DMA, также называемый сторонним DMA, использует контроллер DMA. Контроллер DMA может генерировать адреса памяти и инициировать циклы чтения или записи памяти. Он содержит несколько аппаратных регистров, которые может записывать и читать ЦП. К ним относятся регистр адреса памяти, регистр подсчета байтов и один или несколько регистров управления. В зависимости от того, какие функции предоставляет контроллер DMA, эти регистры управления могут определять некоторую комбинацию источника, пункта назначения, направления передачи (чтение с устройства ввода-вывода или запись на устройство ввода-вывода), размер единица передачи и / или количество байтов, передаваемых за один пакет. [1]

Для выполнения операции ввода, вывода или преобразования памяти в память главный процессор инициализирует контроллер прямого доступа к памяти, подсчитывая количество слов для передачи и адрес памяти для использования. Затем ЦП дает команду периферийному устройству инициировать передачу данных. Затем контроллер DMA предоставляет адреса и линии управления чтением / записью в системную память. Каждый раз, когда байт данных готов для передачи между периферийным устройством и памятью, контроллер DMA увеличивает свой внутренний адресный регистр до тех пор, пока не будет передан полный блок данных.

Мастеринг автобуса [ править ]

В системе управления шиной , также известной как первичная система прямого доступа к памяти, центральному процессору и периферийным устройствам может быть предоставлено управление шиной памяти. Если периферийное устройство может стать мастером шины, оно может напрямую записывать в системную память без участия ЦП, предоставляя адрес памяти и управляющие сигналы по мере необходимости. Должны быть предусмотрены некоторые меры для перевода процессора в состояние удержания, чтобы не возникало конкуренции на шине.

Режимы работы [ править ]

Режим серийной съемки [ править ]

В пакетном режиме весь блок данных передается в одной непрерывной последовательности. Как только контроллер DMA получает доступ к системной шине от ЦП, он передает все байты данных в блоке данных, прежде чем отдать управление системными шинами обратно ЦП, но делает ЦП неактивным на относительно длительные периоды времени. Этот режим также называют «режимом блочной передачи».

Циклический режим кражи [ править ]

Режим перехвата цикла используется в системах, в которых ЦП не должен отключаться на время, необходимое для режимов пакетной передачи. В режиме перехвата цикла контроллер DMA получает доступ к системной шине так же, как и в пакетном режиме, используя BR ( запрос шины ) и BG (предоставление шины ).сигналы, которые являются двумя сигналами, управляющими интерфейсом между ЦП и контроллером прямого доступа к памяти. Однако в режиме перехвата цикла после передачи одного байта данных управление системной шиной передается ЦП через BG. Затем он постоянно запрашивается снова через BR, передавая по одному байту данных за запрос, пока не будет передан весь блок данных. Постоянно получая и освобождая управление системной шиной, контроллер прямого доступа к памяти чередует передачи инструкций и данных. ЦП обрабатывает инструкцию, затем контроллер DMA передает одно значение данных и так далее. С одной стороны, в режиме перехвата цикла блок данных не передается так быстро, как в пакетном режиме, но, с другой стороны, ЦП не простаивает так долго, как в пакетном режиме.Режим Cycle Stealing полезен для контроллеров, которые отслеживают данные в реальном времени.

Прозрачный режим [ править ]

Прозрачный режим требует больше всего времени для передачи блока данных, но он также является наиболее эффективным с точки зрения общей производительности системы. В прозрачном режиме контроллер DMA передает данные только тогда, когда ЦП выполняет операции, не использующие системные шины. Основным преимуществом прозрачного режима является то, что ЦП никогда не прекращает выполнение своих программ, а передача DMA бесплатна с точки зрения времени, а недостатком является то, что аппаратное обеспечение должно определять, когда ЦП не использует системные шины, что может быть сложным. . Это также называется « скрытым режимом передачи данных DMA ».

Согласованность кеширования [ править ]

Несогласованность кэша из-за DMA

DMA может привести к проблемам с когерентностью кеша . Представьте себе ЦП, оснащенный кэш-памятью и внешней памятью, к которой могут напрямую обращаться устройства, использующие DMA. Когда ЦП обращается к ячейке X в памяти, текущее значение сохраняется в кэше. Последующие операции с X будут обновлять кэшированную копию X, но не версию X во внешней памяти, предполагая кеш с обратной записью . Если кэш не будет сброшен в память до следующей попытки устройства получить доступ к X, устройство получит устаревшее значение X.

Точно так же, если кэшированная копия X не становится недействительной, когда устройство записывает новое значение в память, то ЦП будет работать с устаревшим значением X.

Эта проблема может быть решена одним из двух способов при проектировании системы: системы с когерентной кэш-памятью реализуют аппаратный метод, называемый отслеживанием шины , посредством которого внешние записи передаются контроллеру кеша, который затем выполняет аннулирование кеша для записей DMA или сброс кеша для DMA читает. Некогерентные системы оставляют это на усмотрение программного обеспечения, где ОС должна затем гарантировать, что строки кэша очищаются до начала исходящей передачи DMA и становятся недействительными до того, как будет получен доступ к диапазону памяти, затронутому входящей передачей DMA. ОС должна убедиться, что в это время к диапазону памяти не обращаются никакие запущенные потоки. Последний подход вводит некоторые накладные расходы на операцию DMA, поскольку для большинства аппаратных средств требуется цикл для аннулирования каждой строки кэша по отдельности.

Также существуют гибриды, в которых вторичный кэш L2 согласован, а кэш L1 (обычно на ЦП) управляется программным обеспечением.

Примеры [ править ]

ISA [ править ]

В исходном IBM PC (и последующем PC / XT ) был только один контроллер DMA Intel 8237, способный обеспечивать четыре канала DMA (пронумерованные 0–3). Эти каналы DMA выполняли 8-битные передачи (поскольку 8237 было 8-битным устройством, идеально подходящим для архитектуры CPU / шины i8088 ПК ), могли адресовать только первый (стандарт i8086 / 8088) мегабайт ОЗУ и были ограничены. на адресную одиночную 64  кБсегменты в этом пространстве (хотя исходный и целевой каналы могут адресовать разные сегменты). Кроме того, контроллер можно было использовать только для передачи в устройства ввода-вывода шины расширения, от них или между ними, так как 8237 мог выполнять передачи из памяти в память только с использованием каналов 0 и 1, из которых канал 0 на ПК (& XT ) был посвящен динамическому обновлению памяти . Это предотвратило его использование в качестве « блиттера » общего назначения , и, следовательно, перемещение блочной памяти в ПК, ограниченное общей скоростью PIO процессора, было очень медленным.

В IBM PC / AT улучшенная шина AT (более известная как ISA или «промышленная стандартная архитектура») добавила второй контроллер DMA 8237, чтобы обеспечить три дополнительных, и, как было подчеркнуто конфликтами ресурсов с дополнительной расширяемостью XT по сравнению с оригинальный ПК, столь необходимые каналы (5–7; канал 4 используется как каскад к первому 8237). Регистр страницы также был изменен для адресации полного адресного пространства памяти 16 Мбайт ЦП 80286. Этот второй контроллер также был интегрирован таким образом, чтобы обеспечивать возможность выполнения 16-битных передач, когда устройство ввода-вывода используется в качестве источника данных и / или назначения (поскольку он фактически обрабатывает данные только для передачи из памяти в память, в противном случае просто контролирующийпоток данных между другими частями 16-битной системы, что делает ширину собственной шины данных относительно несущественной), удваивая пропускную способность при использовании трех верхних каналов. Для совместимости нижние четыре канала DMA по-прежнему были ограничены только 8-битными передачами, и хотя передачи из памяти в память теперь были технически возможны из-за освобождения канала 0 от необходимости обрабатывать обновление DRAM, с практической точки зрения они имели ограниченную ценность из-за связанной с этим низкой пропускной способности контроллера по сравнению с тем, что теперь мог достичь ЦП (т.е. 16-битный, более оптимизированный 80286, работающий как минимум на 6 МГц, против 8-битного контроллера, заблокированного на 4,77 МГц). В обоих случаях граница сегмента 64 КБпроблема оставалась с отдельными передачами, которые не могли пересекать сегменты (вместо этого «зацикливаться» на начало того же сегмента) даже в 16-битном режиме, хотя на практике это было больше проблемой сложности программирования, чем производительности, поскольку сохраняющаяся потребность в DRAM обновление ( независимо от того, как оно выполняется) для монополизации шины примерно каждые 15  мкс предотвращает использование больших (и быстрых, но бесперебойных) передач блоков.

Из-за их отстающей производительности ( максимальная скорость передачи 8 бит 1,6  МБ / с при 5 МГц [2], но не более 0,9 МБ / с в PC / XT и 1,6 МБ / с для 16-битных передач в AT из-за из-за накладных расходов шины ISA и других помех, таких как прерывания обновления памяти [3] ) и недоступности каких-либо классов скорости, которые позволили бы установить прямые замены, работающие на скоростях, превышающих стандартные тактовые частоты исходного ПК 4,77 МГц, эти устройства фактически устарели с тех пор, как конец 1980-х. В частности, появление процессора 80386 в 1985 году и его способность к 32-битной передаче (хотя значительные улучшения в эффективности вычисления адресов и блочной памяти перемещаются в процессорах Intel после 80186означало, что передачи PIO даже по 16-битной шине 286 и 386SX все еще могут легко опередить 8237), а также дальнейшее развитие ( EISA ) или замена ( MCA , VLB и PCI ) шины ISA. с их собственными гораздо более производительными подсистемами DMA (до максимум 33 МБ / с для EISA, 40 МБ / с MCA, обычно 133 МБ / с VLB / PCI) сделали оригинальные контроллеры DMA больше похожими на жернов для производительности, чем на бустер. Они поддерживались в той степени, в которой они необходимы для поддержки встроенного устаревшего оборудования ПК на более поздних машинах. Компоненты устаревшего оборудования, которые продолжали использовать ISA DMA после того, как 32-разрядные шины расширения стали обычным явлением, были Sound Blaster.карты, которые должны были поддерживать полную аппаратную совместимость со стандартом Sound Blaster; и устройства Super I / O на материнских платах, которые часто включают встроенный контроллер гибких дисков , инфракрасный контроллер IrDA, когда выбран режим FIR (быстрый инфракрасный порт), и контроллер параллельного порта IEEE 1284, когда выбран режим ECP. В случаях, когда все еще использовались оригинальные 8237 или совместимые с ними, передача на эти устройства или с этих устройств может по-прежнему ограничиваться первыми 16 МБ основной оперативной памяти независимо от фактического адресного пространства системы или объема установленной памяти.

Каждый канал DMA имеет 16-битный адресный регистр и связанный с ним 16-битный счетный регистр. Чтобы инициировать передачу данных, драйвер устройства устанавливает адрес канала DMA и регистры счета вместе с направлением передачи данных, чтения или записи. Затем он инструктирует оборудование DMA начать передачу. Когда передача завершена, устройство прерывает работу ЦП.

Дискретно-сборный или векторный ввод-вывод DMA позволяет передавать данные в и из нескольких областей памяти за одну транзакцию DMA. Это эквивалентно объединению в цепочку нескольких простых запросов DMA. Мотивация состоит в том, чтобы разгрузить несколько задач прерывания ввода / вывода и копирования данных из ЦП.

DRQ означает запрос данных ; DACK для подтверждения данных . Эти символы, которые можно увидеть на схемах оборудования компьютерных систем с функциями DMA, представляют собой линии электронной сигнализации между ЦП и контроллером DMA. Каждый канал DMA имеет одну строку запроса и одну строку подтверждения. Устройство, использующее DMA, должно быть настроено для использования обеих линий назначенного канала DMA.

16-битное управление шиной разрешено ISA. [4]

Стандартные назначения ISA DMA:

  1. DRAM Refresh (устарело),
  2. Пользовательское оборудование, обычно звуковая карта 8-битный DMA
  3. Контроллер гибких дисков ,
  4. Жесткий диск (устарел режимами PIO и заменен режимами UDMA ), параллельный порт (порт с поддержкой ECP), некоторые клоны SoundBlaster, такие как OPTi 928.
  5. Каскад к контроллеру PC / XT DMA,
  6. Жесткий диск (только PS / 2 ), пользовательское оборудование для всех остальных, обычно звуковая карта 16-битный DMA
  7. Пользовательское оборудование.
  8. Пользовательское оборудование.

PCI [ править ]

PCI архитектура не имеет центрального контроллера DMA, в отличие от ISA. Вместо этого любое устройство PCI может запросить управление шиной («стать мастером шины ») и запросить чтение и запись в системную память. Точнее, компонент PCI запрашивает владение шиной у контроллера шины PCI (обычно мост хоста PCI и мост PCI-PCI [5] ), который будет выполнять арбитраж, если несколько устройств одновременно запрашивают владение шиной, так как может быть только один мастер шины в один раз. Когда компоненту предоставляется право собственности, он будет выдавать обычные команды чтения и записи на шине PCI, которые будут востребованы контроллером шины PCI.

Например, на ПК на базе AMD Socket AM2 южный мост будет перенаправлять транзакции на контроллер памяти (который встроен в кристалл ЦП) с помощью HyperTransport , который, в свою очередь, преобразует их в операции DDR2 и отправит их на Шина памяти DDR2. В результате, передача PCI DMA состоит из множества этапов; однако это не создает особых проблем, поскольку устройство PCI или сама шина PCI на порядок медленнее, чем остальные компоненты (см. список полос пропускания устройства ).

Современный процессор x86 может использовать более 4 ГБ памяти, используя расширение физического адреса (PAE), 36-разрядный режим адресации или собственный 64-разрядный режим процессоров x86-64 . В таком случае устройство, использующее DMA с 32-битной адресной шиной, не может адресовать память выше линии 4 ГБ. Новый механизм двойного цикла адресации (DAC), если он реализован как на шине PCI, так и на самом устройстве [6], обеспечивает 64-битную адресацию DMA. В противном случае операционной системе необходимо было бы обойти проблему, используя либо дорогостоящие двойные буферы (номенклатура DOS / Windows), также известные как буферы отказов ( FreeBSD / Linux), либо она могла бы использовать IOMMU. предоставлять услуги по переводу адресов, если таковой имеется.

I / OAT [ править ]

В качестве примера механизма DMA, встроенного в ЦП общего назначения, некоторые наборы микросхем Intel Xeon включают в себя механизм DMA, называемый технологией ускорения ввода-вывода (I / OAT), который может разгружать копирование памяти с основного ЦП, освобождая его для выполнения другой работы. . [7] В 2006 году разработчик ядра Linux от Intel Эндрю Гровер провел тесты с использованием ввода-вывода для разгрузки копий сетевого трафика и обнаружил не более 10% улучшения использования ЦП при приеме рабочих нагрузок. [8]

DDIO [ править ]

Дальнейшие ориентированные на производительность усовершенствования механизма DMA были внесены в процессоры Intel Xeon E5 с их функцией прямого ввода-вывода данных ( DDIO ), позволяющей «окнам» DMA располагаться в кэш- памяти ЦП, а не в системной ОЗУ. В результате кэши ЦП используются в качестве основного источника и места назначения для ввода-вывода, что позволяет контроллерам сетевого интерфейса(NIC) в DMA непосредственно в кэш последнего уровня (кэш L3) локальных процессоров и избежать дорогостоящего извлечения данных ввода-вывода из системной RAM. В результате DDIO снижает общую задержку обработки ввода-вывода, позволяет полностью выполнять обработку ввода-вывода в кеше, предотвращает превращение доступной полосы пропускания / задержки ОЗУ в узкое место производительности и может снизить энергопотребление, разрешив ОЗУ дольше оставаться в маломощном состоянии. [9] [10] [11] [12]

AHB [ править ]

В системах на кристалле и встраиваемых системах типичная инфраструктура системной шины представляет собой сложную на кристалле шину, такую ​​как высокопроизводительная шина AMBA . AMBA определяет два типа компонентов AHB: главный и подчиненный. Подчиненный интерфейс похож на программный ввод-вывод, через который программное обеспечение (работающее на встроенном ЦП, например, ARM ) может записывать / читать регистры ввода-вывода или (реже) блоки локальной памяти внутри устройства. Устройство может использовать главный интерфейс для выполнения транзакций DMA в / из системной памяти без большой нагрузки на ЦП.

Следовательно, устройства с высокой пропускной способностью, такие как сетевые контроллеры, которым необходимо передавать огромные объемы данных в / из системной памяти, будут иметь два интерфейсных адаптера к AHB: главный и подчиненный интерфейс. Это связано с тем, что встроенные в микросхемы шины, такие как AHB, не поддерживают преобразование шины в три положения или изменение направления любой линии на шине. Как и PCI, центральный контроллер DMA не требуется, поскольку DMA управляет шиной, но в случае наличия в системе нескольких мастеров требуется арбитр .

Внутри устройства обычно присутствует многоканальный механизм прямого доступа к памяти (DMA), который выполняет несколько одновременных операций сбора и разброса, как это запрограммировано программным обеспечением.

Ячейка [ править ]

В качестве примера использования DMA в многопроцессорной системе на кристалле , процессор Cell от IBM / Sony / Toshiba включает в себя механизм DMA для каждого из своих 9 процессорных элементов, включая один элемент процессора Power (PPE) и восемь элементов синергетического процессора (SPE). . Поскольку инструкции загрузки / сохранения SPE могут читать / записывать только свою собственную локальную память, SPE полностью зависит от DMA для передачи данных в основную память и локальную память других SPE и из них. Таким образом, DMA действует как основное средство передачи данных между ядрами внутри этого ЦП (в отличие от согласованных с кешем архитектур CMP, таких как отмененный универсальный графический процессор Intel , Larrabee ).

DMA в ячейке полностью согласован с кешем (обратите внимание, однако, локальные хранилища SPE, управляемые DMA, не действуют как глобально согласованный кеш в стандартном смысле ). Как при чтении («получить»), так и при записи («положить») команда DMA может передавать либо одну область блока размером до 16 КБ, либо список от 2 до 2048 таких блоков. Команда DMA выдается путем указания пары локального адреса и удаленного адреса: например, когда программа SPE выдает команду put DMA, она указывает адрес своей собственной локальной памяти в качестве источника и адрес виртуальной памяти (указывающий на либо основная память, либо локальная память другого SPE) в качестве цели вместе с размером блока. Согласно эксперименту, эффективная пиковая производительность DMA в ячейке (3 ГГц при равномерном трафике) достигает 200 ГБ в секунду.[13]

Конвейерная обработка [ править ]

Процессоры с блокнотом памятью и DMA (например, цифровые сигнальными процессорами и сотовым процессором) могут извлечь выгоду из программного обеспечения , перекрывающего операцию памяти DMA с обработкой, с помощью двойной буферизации или мультибуферизации. Например, внутренняя память разделена на два буфера; процессор может работать с данными в одном, в то время как механизм DMA загружает и сохраняет данные в другом. Это позволяет системе избежать задержки памяти и использовать пакетные передачи за счет необходимости предсказуемой схемы доступа к памяти . [ необходима цитата ]

См. Также [ править ]

  • Вложение
  • Автономная периферийная работа
  • Блиттер
  • Канал ввода / вывода
  • DMA атака
  • Ввод-вывод с отображением памяти
  • Аппаратное ускорение
  • Обработка в памяти
  • Управление памятью
  • Сеть на микросхеме
  • Опрос (информатика)
  • Удаленный прямой доступ к памяти
  • UDMA
  • Виртуальные службы DMA (VDS)

Заметки [ править ]

  1. ^ Осборн, Адам (1980). Введение в микрокомпьютеры: Том 1: Основные понятия (2-е изд.). Осборн Макгроу Хилл. С.  5–64–5–93 . ISBN 0931988349.
  2. ^ "Intel 8237 & 8237-2 Datasheet" (PDF) . Подсайт JKbox RC702 . Проверено 20 апреля 2019 .
  3. ^ «Основы DMA на различных платформах ПК, National Instruments, страницы 6 и 7» . Национальный университет де ла Плата, Аргентина . Проверено 20 апреля 2019 .
  4. ^ Intel Corp. (2003-04-25), «Глава 12: ISA Bus» (PDF) , Архитектура ПК для технических специалистов: уровень 1 , получено 27 января 2015 г.
  5. ^ «Особенности шины - Написание драйверов устройств для Oracle® Solaris 11.3» . docs.oracle.com . Проверено 18 декабря 2020 .
  6. ^ «Расширение физического адреса - Память PAE и Windows» . Центр разработки оборудования Microsoft Windows. 2005 . Проверено 7 апреля 2008 .
  7. Корбет, Джонатан (8 декабря 2005 г.). «Копии памяти в аппаратном обеспечении» . LWN.net .
  8. ^ Гровер, Эндрю (2006-06-01). «I / OAT в вики LinuxNet» . Обзор ввода-вывода в Linux со ссылками на несколько тестов . Проверено 12 декабря 2006 .
  9. ^ «Intel Data Direct I / O (Intel DDIO): часто задаваемые вопросы» (PDF) . Intel . Март 2012 . Проверено 11 октября 2015 .
  10. ^ Рашид Хан (2015-09-29). «Расширяя границы ядра сети» . redhat.com . Проверено 11 октября 2015 .
  11. ^ «Достижение минимальной задержки при максимальной скорости передачи сообщений с процессором Intel Xeon E5-2600 и серверным адаптером Solarflare SFN6122F 10 GbE» (PDF) . solarflare.com . 2012-06-07 . Проверено 11 октября 2015 .
  12. ^ Александр Дуйк (2015-08-19). «Расширяя границы ядра сети» (PDF) . linuxfoundation.org . п. 5 . Проверено 11 октября 2015 .
  13. ^ Кистлер, Майкл (май 2006 г.). «Сотовая многопроцессорная коммуникационная сеть» . Обширные тесты производительности DMA в Cell Broadband Engine .

Ссылки [ править ]

  • Основы DMA на различных платформах ПК , от А.Ф. Харви и сотрудников отдела сбора данных NATIONAL INSTRUMENTS
  • mmap () и DMA , из драйверов устройств Linux, 2-е издание , Алессандро Рубини и Джонатан Корбет
  • Отображение памяти и DMA , от драйверов устройств Linux, 3-е издание , Джонатан Корбет , Алессандро Рубини, Грег Кроа-Хартман
  • DMA и обработка прерываний
  • Режимы DMA и мастеринг шины

Внешние ссылки [ править ]

  • Освоение API-интерфейсов DMA и IOMMU , конференция по встроенным Linux, 2014 г., Сан-Хосе, автор: Лоран Пинчарт