DMA — технология прямого доступа к памяти

Rеволюционный DMA: быстрее, чем TCP

Можно ли обеспечить рост мощностей сер­вер­ной ин­фра­ст­рук­ту­ры (вы­чи­с­ле­ний и хра­не­ния) без при­вле­че­ния се­те­вых архитектур SAN, спе­ци­а­ли­зи­ро­ван­ных уст­ройств хра­не­ния и про­то­ко­лов пе­ре­да­чи дан­ных, ви­ся­щих тя­же­лыми ги­ря­ми на поль­зо­ва­те­ле, его ко­шель­ке и сте­пе­нях его сво­бо­ды? Бе­рем при­выч­ную сре­ду свя­зи сер­ве­ров и сис­тем хра­не­ния на клас­си­че­ских се­те­вых про­то­ко­лах TCP. Она не иде­аль­на, но до­ступ­на, уни­вер­саль­на и пер­спективна. Ока­зы­ва­ет­ся, дав­но и хо­ро­шо зна­ко­мое по­ня­тие DMA (Direct Memory Access) мож­но рас­про­ст­ра­нить на со­во­куп­ность кон­т­рол­ле­ров NIC (Net­work In­ter­face Con­trol­ler) не­сколь­ких ком­пью­те­ров, со­е­ди­нен­ных в ло­каль­ную сеть.

Интеллектуальный транс-платформенный контроллер DMA при соответствующей программной поддержке об­об­щает и унифицирует понятие прямого доступа к памяти. Единый подход для доступа в адресное пространство как локального, так и удаленного компьютера обозначили термином RDMA (Remote Direct Memory Access).

В прикладном смысле RDMA — это механизм передачи данных между локальной сетью и оперативной памятью вычислительной платформы. Унифицируется вся адресация — и привилегированной памяти операционной сис­те­мы, и виртуальной памяти, принадлежащей приложениям. Таким образом, два приложения, запущенные на раз­лич­ных платформах, могут взаимодействовать посредством почти общей памяти. Вообще же, термину RDMA — как спутнику передачи данных без участия центрального процессора — несколько десятков лет. Теперь вос­хо­дя­щая спираль технологий достала его из шкафа и вдохнула в него новую жизнь. Оказывается, для оптимизации вы­со­ко­на­гру­жен­ных виртуализованных платформ в контексте Zero-Copy, только RDMA и не хватало.

Принцип работы

Большинство устройств ПК нуждаются в периодическом обмене данными не только с центральным процессором (ЦП), но и с оперативной памятью. В первых вариантах персональных компьютеров процесс обмена данными какого-либо устройства с ОЗУ протекал при помощи процессора. Такой метод получил название PIO (Programmable Input-Output, программируемый ввод-вывод). Однако этот метод имел ряд недостатков. Прежде всего, было очевидно, что поскольку процессор загружен множеством задач, то он не всегда может отвлекаться на то, чтобы управлять процессом чтения и записи данных ОЗУ, тем более, что объем этих данных в результате прогресса компьютерной техники все увеличивался и увеличивался.

Так появилась идея технологии DMA (сокращение от Direct Memory Access, т.е. Прямой Доступ к Памяти), состоящая в том, чтобы позволить различным устройствам обращаться к оперативной памяти напрямую, минуя ЦП. Также часто используется русская аббревиатура данной технологии – ПДП.

Первоначально практическая реализация этой технологии (в материнских платах на основе шины ISA) была осуществлена при помощи встроенного в материнскую плату контроллера ПДП, который был призван управлять процессом обмена данными между устройством и ОЗУ. При этом процессор также не был полностью исключен из этого процесса. Прежде всего, механизм ПДП инициализировался самим процессором, однако в ход процесса передачи данных он не вмешивался, занимаясь в это время другими задачами. После того, как обмен информацией между устройством и ОЗУ завершался, то процессор получал соответствующее прерывание, которое отсылал ему контроллера DMA.

В шине ISA также использовались специальные каналы ПДП, которые часто закреплялись за отдельным устройством:

  1. Обновление DRAM
  2. Аппаратный пользовательский канал, обычно использовался для 8-битных звуковых карт
  3. Контроллер дисковода гибких дисков
  4. Жесткий диск. Канал не использовался для жестких дисков с поддержкой PIO, а затем с UDMA. Также канал использовался для некоторых звуковых карт и параллельного порта
  5. Каскадное прерывание от XT-контроллера ПДП
  6. Пользовательский канал, иногда использовался для жестких дисков или 16-битных звуковых карт
  7. Пользовательский канал
  8. Пользовательский канал

Обычно данные каналы можно было устанавливать программным путем, но на некоторых старых устройствах, например, картах расширения для подключения накопителей CD-ROM, необходимо было вручную устанавливать значения нужных каналов при помощи перемычек.

L-502

АЦП: 16 бит; 16/32 каналов;
±0,2 В…10 В; 2 МГц
ЦАП: 16 бит; 2 канала; ±5 В; 1 МГц
Цифровые входы/выходы:
17/16, ТТЛ 5 В
Интерфейс: USB 2.0 (high-speed), Ethernet (100 Мбит)
Гальваническая развязка.

E-502

Модуль АЦП/ЦАП
16/32 каналов, 16 бит, 2 МГц, USB, Ethernet

Совместимость системы

Защита DMA ядра требует новой поддержки прошивки UEFI. Ожидается, что эта поддержка будет поддерживаться только в недавно внедренных системах на основе Intel с Windows 10 версии 1803 (не во всех системах). Безопасность на основе виртуализации (VBS) не требуется.

Чтобы узнать, поддерживает ли система защиту от DMA ядра, Сведения о системе настольное приложение (MSINFO32). Системы, выпущенные до Windows 10 версии 1803, не поддерживают защиту DMA ядра, но могут использовать другие меры по смягчению последствий атак DMA, как описано в контрмерах BitLocker.

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

Все ответы

  • 17 марта 2010 г. 5:51 Ответить | Цитировать
  • что-то я не понял… а это тогда что такое?http://img34.imageshack.us/img34/7185/sata.pngЕсли AHCI не используется, то SATA-диски эмулируются как IDE-устройства.17 марта 2010 г. 6:37 Ответить | Цитировать
  • 17 марта 2010 г. 6:39 Ответить | Цитировать
  • У меня материнская плата ASUS M2R32-MVP переключение дисков в AHCI приводит просто к темному экрану при попытке загрузить ОС. Переключение в RAID приводит к синиму экрану. Качал драйвера на чипсет, менял значения в реестре винда отказывается видить жесткие диски на SATA. Запускал востановление системы, давал ей драйвера, но ОС все равно не хочет увидеть еще 3 винта и СД.21 марта 2010 г. 21:32 Ответить | Цитировать
  • Вот этими рекомендациями пробовали воспользоваться?MCSA21 марта 2010 г. 23:36 Ответить | Цитировать
  • Да, так и стоит в реестре 023 марта 2010 г. 4:28 Ответить | Цитировать

Странно. У меня прокатило.Тогда остаётся одно — запуск установки Windows 7 в режиме восстановления Windows. Все проги и документы в этом случае останутся рабочими и процесс установки пройдёт гораздо быстрее. Хотя, документы по старой привычке я бы всё-таки куда-нибудь забэкапил.

MCSA23 марта 2010 г. 6:47 Ответить | Цитировать

Парни, все гораздо проще.

Вы не хотите использовать поиск.

23 марта 2010 г. 10:06 Ответить | Цитировать

В поиске пробыл я часа четыре, и перепробовал все, что смог найти, кроме переустановки Win 7. Перевести работу дисков на AHCI у меня так и не вышло, но заменив один из контроллеров IDE на стандартный контроллер ACHI все SATA винты и DVD раскидались по устройству на канал и DVD стал в DMA работать, так что проблема была решена. Если попытаться обновить стандартный контроллер ACHI на тот что на диске от материнской платы то все тот же синий экран в режиме RAID или темный экран в режиме ACHI , или длительная загрузка в режиме native , конца которой я спустя 10 мин так и не дождался…

Самопроизвольное переключение Виндовс на режим PIO и признаки этого

Windows по умолчанию работает с HDD в скоростном режиме DMA, но иногда из-за специфических ошибок самостоятельно переключается в режим PIO. Причем обратно включить DMA весьма проблематично и сделать это стандартными способами практически невозможно. Характерные признаки того, что Windows переключилась на работу с жестким диском в режим PIO это:

• Падение быстроты работы с HDD в несколько раз;
• Медленная скорость работы системы во время дисковых операций;
• Чрезмерная загрузка процессора (80-90%) при работе с жестким диском;
• Система начала «тормозить» резко. То есть еще час назад все было нормально, а потом резко появились проблемы.

На данный момент жесткий диск — это самое слабое место всей системы и падение его скорости работы даже в два раза приводит к катастрофическим последствиям. Для того чтобы убедиться, что Windows действительно переключилась на работу с жестким диском в медленный режим PIO нужно сделать следующее:

1. Нажмите на значок «Мой компьютер» правой клавишей мыши и выберите пункт «Управление»;

Управление компьютером

2. Раскройте ветку контроллера и найдите канал, к которому подключен ваш жесткий диск;
3. Нажмите на нем правую клавишу мыши, зайдите в «Свойства» и переключитесь на «Дополнительные параметры»;
4. Посмотрите на строку «Текущий режим передачи». Если там написано «Режим DMA», то значит все нормально, а вот если «Режим PIO», то вам придется проделать несколько несложных операций и вернуть диск в предпочтительный режим работы.

Включения Режима PIO

Регистры DMA

Доступ к регистрам можно выполнять как к байтам (8 бит), полусловам (16 бит) или словам (32 бита).

В используемых обозначениях под DMA подразумевается либо DMA1, либо DMA2, в зависимости от того, к регистру какого контроллера DMA мы хотим обратиться. В микроконтроллерах STM32F100xx семейств Low и Medium density Value Line имеется только DMA1 и всюду под DMA подразумевается DMA1.

Каждый канал DMA имеет либо свой регистр, либо своё битовое поле в общем регистре. Для обозначения номера канала будет использоваться символ «x», x=1..7 в случае DMA1 и x=1..5 для контроллера DMA2.

DMA_ISR (DMA interrupt status register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved TEIF7 HTIF7 TCIF7 GIF7 TEIF6 HTIF6 TCIF6 GIF6 TEIF5 HTIF5 TCIF5 GIF5
r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TEIF4 HTIF4 TCIF4 GIF4 TEIF3 HTIF3 TCIF3 GIF3 TEIF2 HTIF2 TCIF2 GIF2 TEIF1 HTIF1 TCIF1 GIF1
r r r r r r r r r r r r r r r r

Address offset: 0x00
Reset value: 0x0000 0000

Регистр состояния прерывания, содержит набор флагов (по 4 флага на канал DMA), которые устанавливаются аппаратно при наступлении соответствующего события. Установка любого из флагов может привести к генерации прерывания, если это разрешено. Сброс флагов осуществляется с помощью регистра DMA_IFCR (сброс необходим при обработке прерываний от DMA).

TEIFx: Channel x transfer error flag
Флаг ошибки передачи в канале x, этот бит устанавливается аппаратно. Сбрасывается записью 1 в соответствующий бит регистра DMA_IFCR.
0: Не было ошибок передачи в DMA канале x.
1: На канале x произошла ошибка при пересылке данных.

HTIFx: Channel x half transfer flag
Флаг завершения передачи половины данных в канале x, бит устанавливается аппаратно. Сбрасывается программно записью 1 в соответствующий бит регистра DMA_IFCR.
0: Не было события — завершения передачи половины от общего количества данных.
1: Было зафиксировано событие — завершение передачи половины данных.

TCIFx: Channel x transfer complete flag
Флаг завершения передачи в канале x, бит устанавливается аппаратно. Сбрасывается программно записью 1 в соответствующий бит регистра DMA_IFCR.
0: Не было зафиксировано события — завершения передачи данных.
1: Было зафиксировано событие — завершение передачи данных.

GIFx: Channel x global interrupt flag
Глобальный флаг прерывания в канале x, бит устанавливается аппаратно одновременно с установкой любого из флагов для данного канала: TEIFx, HTIFx или TCIFx. Сбрасывается программно записью 1 в соответствующий бит регистра DMA_IFCR.
0: Не происходило установки ни одного из флагов TEIFx, HTIFx или TCIFx на данном канале DMA.
1: Произошла установка одного из флагов TEIFx, HTIFx или TCIFx.

DMA_IFCR (DMA interrupt flag clear register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved CTEIF7 CHTIF7 CTCIF7 CGIF7 CTEIF6 CHTIF6 CTCIF6 CGIF6 CTEIF5 CHTIF5 CTCIF5 CGIF5
w w w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CTEIF4 CHTIF4 CTCIF4 CGIF4 CTEIF3 CHTIF3 CTCIF3 CGIF3 CTEIF2 CHTIF2 CTCIF2 CGIF2 CTEIF1 CHTIF1 CTCIF1 CGIF1
w w w w w w w w w w w w w w w w

Address offset: 0x04
Reset value: 0x0000 0000

Регистр сброса флагов прерывания. Биты данного регистра используются для программного сброса соответствующих битов в регистре флагов DMA_ISR путём записи в бит значения 1, запись в бит 0 не имеет никакого эффекта.

CTEIFx: Channel x transfer error clear
Сброс флага ошибки передачи в канале x.
0: Не имеет эффекта.
1: Сброс флага TEIFx в регистре DMA_ISR.

CHTIFx: Channel x half transfer clear
Сброс флага половинной передачи в канале x.
0: Не имеет эффекта.
1: Сброс флага HTIFx в регистре DMA_ISR.

CTCIFx: Channel x transfer complete clear
Сброс флага завершения передачи в канале x.
0: Не имеет эффекта.
1: Сброс флага TCIFx в регистре DMA_ISR.

CGIFx: Channel x global interrupt clear
Сброс флагов в канале x.
0: Не имеет эффекта.
1: Сброс всех флагов для канала x в регистре DMA_ISR (GIFx, TEIFx, HTIFx и TCIFx).

DMA_CCRx (DMA channel x configuration register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. MEM2
MEM
PL[1:0] MSIZE[1:0] PSIZE[1:0] MINC PINC CIRC DIR TEIE HTIE TCIE EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Address offset: 0x08+0d20*(x–1)
Reset value: 0x0000 0000

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

MEM2MEM: Memory to memory mode
Включение режима «memory to memory» (копирование данных из памяти в память). Бит устанавливается и сбрасывается программно.
0: Режим «memory to memory» отключён.
1: Режим включён.

PL[1:0]: Channel priority level
Уровень приоритета канала. Битовое поле задаётся программно и определяет уровень приоритета канала в соответствии со значениями:
00: низкий;
01: средний;
10: высокий;
11: очень высокий.

MSIZE[1:0]: Memory size
Размер элемента данных в памяти. Битовое поле задаётся программно и определяет размер одного элемента данных, записываемого в память или считываемого из памяти (зависит от выбранного направления передачи) за одну транзакцию:
00: 8 бит (передача по байтам);
01: 16 бит (передача по полусловам);
10: 32 бита (передача по словам);
11: зарезервировано (не используется).

PSIZE[1:0]: Peripheral size
Размер элемента данных для обмена с периферийным устройством. Битовое поле задаётся программно и определяет размер одного элемента данных, считываемого из регистра периферийного устройства или записываемого в него (в зависимости от выбранного направления передачи) за одну транзакцию:
00: 8 бит (передача по байтам);
01: 16 бит (передача по полусловам);
10: 32 бита (передача по словам);
11: зарезервировано (не используется).

MINC: Memory increment mode
Режим инкрементирования адреса в памяти. Этот бит устанавливается и сбрасывается программно.
0: Инкрементирование адреса отключено.
1: Инкрементирование адреса включено.

PINC: Peripheral increment mode
Режим инкрементирования адреса периферии. Бит устанавливается и сбрасывается программно.
0: Инкрементирование адреса отключено.
1: Инкрементирование адреса включено.

CIRC: Circular mode
Циклический режим. Бит устанавливается и сбрасывается программно.
0: Циклический режим отключён.
1: Циклический режим включён.

DIR: Data transfer direction
Направление передачи данных. Бит устанавливается и сбрасывается программно.
0: Чтение данных из периферийного устройства.
1: Чтение данных из памяти.

TEIE: Transfer error interrupt enable
Разрешение прерываний при возникновении ошибок передачи. Этот бит устанавливается и сбрасывается программно.
0: Генерация прерываний при возникновении ошибок передачи отключена.
1: Генерация прерываний при возникновении ошибок передачи включена.

HTIE: Half transfer interrupt enable
Разрешение прерываний при завершении передачи половины данных. Бит устанавливается и сбрасывается программно.
0: Генерация прерываний при завершении передачи половины данных отключена.
1: Генерация прерываний при завершении передачи половины данных включена.

TCIE: Transfer complete interrupt enable
Разрешение прерываний при завершении передачи данных. Бит устанавливается и сбрасывается программно.
0: Генерация прерываний при завершении передачи данных отключена.
1: Генерация прерываний при завершении передачи данных включена.

EN: Channel enable
Включение канала. Бит устанавливается и сбрасывается программно.
0: Канал отключён.
1: Канал включён.

DMA_CNDTRx (DMA channel x number of data register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NDT
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Address offset: 0x0C+0d20*(x–1)
Reset value: 0x0000 0000

NDT[15:0]: Number of data to transfer
Количество элементов для передачи (общее количество транзакций), от 0 до 65535. В этот регистр можно записывать только при отключённом канале. После включения канала, регистр становится доступным только для чтения и содержит оставшееся количество элементов для передачи (или количество транзакций). Это количество в общем случае не равно объёму данных в байтах, т.к. размер одного элемента может быть более одного байта (может быть равным 2 или 4 байтам).

Содержимое регистра уменьшается на 1 после каждой DMA передачи (после каждой транзакции). Когда значение регистра достигает 0, передача останавливается (в нециклическом режиме) или регистр автоматически перезагружается первоначально записанным в него значением и передача продолжается (в циклическом режиме).

Если в регистр записано значение 0, транзакции не выполняются, независимо от того, включен DMA канал или нет.

DMA_CPARx (DMA channel x peripheral address register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PA
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Address offset: 0x10+0d20*(x–1)
Reset value: 0x0000 0000

Не допускается запись в регистр при включённом данном канале DMA.

PA[31:0]: Peripheral address
Базовый адрес регистра периферийного устройства из которого выполняется чтение или в который производится запись. Если размер данных периферийного устройства установлен равным 16 бит (PSIZE: 01), доступ осуществляется с автоматическим выравниванием на полуслово (младший бит PA[0] игнорируется). Если размер данных периферийного устройства установлен равным 32 бита (PSIZE: 10), доступ осуществляется с автоматическим выравниванием на слово (два младших бита PA[1:0] игнорируются).

DMA_CMARx (DMA channel x memory address register)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MA
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Address offset: 0x14+0d20*(x–1)
Reset value: 0x0000 0000

Не допускается запись в регистр при включённом данном канале DMA.

MA[31:0]: Memory address
Базовый адрес памяти, по которому выполняется запись или чтение. Если размер данных в памяти установлен равным 16 бит (MSIZE: 01), доступ осуществляется с автоматическим выравниванием на полуслово (младший бит MA[0] игнорируется). Если размер данных в памяти установлен равным 32 бита (MSIZE: 10), доступ осуществляется с автоматическим выравниванием на слово (два младших бита MA[1:0] игнорируются).

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector