stringtranslate.com

Прямой доступ к памяти

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

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

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

Принципы

Третья сторона

Материнская плата компьютера NeXTcube (1990 г.). Две большие интегральные схемы ниже середины изображения — это контроллер DMA (слева) и, что необычно, дополнительный специальный контроллер DMA (справа) для магнитооптического диска, который использовался вместо жесткого диска в первой серии. эта компьютерная модель.

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

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

Освоение автобусов

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

Режимы работы

В режиме серийной съемки

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

Режим кражи цикла

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

Прозрачный режим

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

Согласованность кэша

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

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

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

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

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

Примеры

ЭТО

В исходном IBM PC (и последующих PC/XT ) был только один контроллер DMA Intel 8237, способный обеспечить четыре канала DMA (с номерами 0–3). Эти каналы DMA выполняли 8-битную передачу (поскольку 8237 был 8-битным устройством, идеально соответствующим архитектуре процессора/шины ПК 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 МГц, [4] но не более 0,9 МБ/с в PC/XT и 1,6 МБ/с для 16-битной передачи в AT из-за из-за издержек шины ISA и других помех, таких как прерывания обновления памяти [1] ) и отсутствия каких-либо скоростей, которые позволили бы установить прямые замены, работающие на частотах выше, чем стандартная тактовая частота оригинального ПК 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 позволяла управлять шиной. [5]

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

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

PCI

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

Например, на ПК на базе процессора Intel Core южный мост пересылает транзакции на контроллер памяти (который встроен в кристалл ЦП) с помощью DMI , который, в свою очередь, преобразует их в операции DDR и отправляет их в память. автобус. В результате передача PCI DMA включает в себя довольно много шагов; однако это не представляет особых проблем, поскольку само устройство PCI или шина PCI на порядок медленнее остальных компонентов (см. список пропускной способности устройства ).

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

Я/ОАТ

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

ДДИО

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

АХБ

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

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

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

Клетка

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

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

Контроллеры DMA

Конвейерная обработка

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

Смотрите также

Примечания

  1. ^ ab «Основы DMA на различных платформах ПК, National Instruments, страницы 6 и 7». Национальный университет де ла Плата, Аргентина . Проверено 20 апреля 2019 г.
  2. ^ Осборн, Адам (1980). Введение в микрокомпьютеры: Том 1: Основные понятия (2-е изд.). Осборн МакГроу Хилл. стр. 5–64–5–93. ISBN 0931988349.
  3. ^ Хейс, Джон П. (1978). Компьютерная архитектура и организация . Международная книжная компания McGraw-Hill. п. 426-427. ISBN 0-07-027363-4.
  4. ^ «Техническое описание Intel 8237 и 8237-2» (PDF) . Дочерний сайт JKbox RC702 . Проверено 20 апреля 2019 г.
  5. ^ Intel Corp. (25 апреля 2003 г.), «Глава 12: Шина ISA» (PDF) , Архитектура ПК для технических специалистов: уровень 1 , получено 27 января 2015 г.
  6. ^ «Особенности шины — написание драйверов устройств для Oracle® Solaris 11.3» . docs.oracle.com . Проверено 18 декабря 2020 г.
  7. ^ «Расширение физического адреса — память PAE и Windows» . Центр разработки оборудования Microsoft Windows. 2005 . Проверено 7 апреля 2008 г.
  8. Корбет, Джонатан (8 декабря 2005 г.). «Копии памяти в аппаратном обеспечении». LWN.net .
  9. ^ Гровер, Эндрю (1 июня 2006 г.). «I/OAT в вики LinuxNet». Обзор I/OAT в Linux со ссылками на несколько тестов . Архивировано из оригинала 5 мая 2016 г. Проверено 12 декабря 2006 г.
  10. ^ «Intel Data Direct I/O (Intel DDIO): Часто задаваемые вопросы» (PDF) . Интел . Март 2012 года . Проверено 11 октября 2015 г.
  11. ^ Рашид Хан (29 сентября 2015 г.). «Расширяя границы ядра сети». redhat.com . Проверено 11 октября 2015 г.
  12. ^ «Достижение минимальных задержек при максимальной скорости передачи сообщений с помощью процессора Intel Xeon E5-2600 и серверного адаптера Solarflare SFN6122F 10 GbE» (PDF) . Solarflare.com . 07.06.2012 . Проверено 11 октября 2015 г.
  13. ^ Александр Дуйк (19 августа 2015 г.). «Расширяя границы ядра сети» (PDF) . linuxfoundation.org . п. 5 . Проверено 11 октября 2015 г.
  14. ^ Кистлер, Майкл (май 2006 г.). «Ячеистая многопроцессорная сеть связи: создана для скорости». IEEE микро . 26 (3): 10–23. дои : 10.1109/MM.2006.49. S2CID  7735690.
  15. ^ «Многомодовый контроллер DMA Am9517A» (PDF) . Проверено 6 января 2024 г.
  16. ^ «Контроллер прямого доступа к памяти Z80® DMA» (PDF) . Проверено 7 января 2024 г.
  17. ^ "Справочник по полупроводникам Sharp 1986 года" (PDF) . п. 255-269 . Проверено 13 января 2024 г.
  18. ^ «Контроллер pPD71037 прямого доступа к памяти (DMA)» (PDF) . п. 832(5б1) . Проверено 6 января 2024 г.
  19. ^ «Контроллер DMA µPD71071» (PDF) . п. 940(5г1) . Проверено 5 января 2024 г.

Рекомендации

Внешние ссылки