Блок управления памятью ввода-вывода

Конфигурация в вычислительной технике
Сравнение блока управления памятью ввода-вывода (IOMMU) с блоком управления памятью (MMU).

В вычислительной технике блок управления памятью ввода-вывода ( IOMMU ) — это блок управления памятью (MMU), соединяющий шину ввода-вывода с возможностью прямого доступа к памяти (DMA-capable) с основной памятью . Как и традиционный MMU, который транслирует виртуальные адреса, видимые процессором, в физические адреса , IOMMU сопоставляет виртуальные адреса, видимые устройством (в данном контексте также называемые адресами устройств или адресами ввода-вывода, отображенными в памяти ) с физическими адресами. Некоторые блоки также обеспечивают защиту памяти от неисправных или вредоносных устройств.

Примером IOMMU является таблица переназначения графических адресов (GART), используемая графическими картами AGP и PCI Express на компьютерах с архитектурой Intel и AMD.

В архитектуре x86, до разделения функциональности северного и южного мостов между ЦП и контроллером платформы (PCH), виртуализация ввода-вывода выполнялась не ЦП, а чипсетом . [ 1] [2]

Преимущества

Преимущества использования IOMMU по сравнению с прямой физической адресацией памяти (DMA) включают в себя [ необходима ссылка ] :

  • Большие области памяти могут быть выделены без необходимости быть смежными в физической памяти – IOMMU отображает смежные виртуальные адреса в базовые фрагментированные физические адреса. Таким образом, использование векторного ввода-вывода ( списков scatter-gather ) иногда можно избежать.
  • Устройства, не поддерживающие адреса памяти, достаточно длинные для адресации всей физической памяти, все равно могут адресовать всю память через IOMMU, избегая накладных расходов, связанных с копированием буферов в адресуемое пространство памяти периферийного устройства и из него.
    • Например, компьютеры x86 могут адресовать более 4 гигабайт памяти с помощью функции Physical Address Extension (PAE) в процессоре x86. Тем не менее, обычное 32-битное устройство PCI просто не может адресовать память выше границы 4 GiB, и, таким образом, оно не может напрямую обращаться к ней. Без IOMMU операционной системе пришлось бы реализовать требующие много времени буферы отскока (также известные как двойные буферы [3] ).
  • Память защищена от вредоносных устройств, которые пытаются проводить атаки DMA , и неисправных устройств, которые пытаются выполнять ошибочные передачи памяти, поскольку устройство не может читать или записывать в память, которая не была явно выделена (отображена) для него. Защита памяти основана на том факте, что ОС, работающая на ЦП (см. рисунок), эксклюзивно управляет как MMU, так и IOMMU. Устройства физически не могут обойти или повредить настроенные таблицы управления памятью.
    • В виртуализации гостевые операционные системы могут использовать оборудование, которое не предназначено специально для виртуализации. Высокопроизводительное оборудование , такое как графические карты, использует DMA для прямого доступа к памяти; в виртуальной среде все адреса памяти переназначаются программным обеспечением виртуальной машины, что приводит к сбою устройств DMA. IOMMU обрабатывает это переназначение, позволяя использовать собственные драйверы устройств в гостевой операционной системе.
  • В некоторых архитектурах IOMMU также выполняет перераспределение аппаратных прерываний способом, аналогичным стандартному перераспределению адресов памяти.
  • Периферийная страничная разбивка памяти может поддерживаться IOMMU. Периферийное устройство, использующее расширение PCI-SIG PCIe Address Translation Services (ATS) Page Request Interface (PRI), может обнаруживать и сигнализировать о необходимости служб менеджера памяти.

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

Недостатки

Недостатки использования IOMMU по сравнению с прямой физической адресацией памяти включают в себя: [4]

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

Виртуализация

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

IOMMU решает эту проблему путем перераспределения адресов, к которым обращается оборудование, в соответствии с той же (или совместимой) таблицей трансляции, которая используется для сопоставления гостевого физического адреса с хостовыми физическими адресами. [5]

Опубликованные спецификации

  • AMD опубликовала спецификацию для технологии IOMMU, называемую AMD-Vi . [6] [7]
  • IBM предложила расширенную поддержку программ управления: режим Virtual Storage Extended (ECPS:VSE) [8] на своей линейке 43xx ; программы каналов использовали виртуальные адреса.
  • Корпорация Intel опубликовала спецификацию технологии IOMMU как технологии виртуализации для направленного ввода-вывода, сокращенно VT-d . [9]
  • Информация о Sun IOMMU опубликована в разделе Device Virtual Memory Access (DVMA) на сайте Solaris Developer Connection. [10]
  • Запись управления трансляцией IBM (TCE) описана в документе под названием «Безопасность логических разделов в IBM eServer pSeries 690» . [11]
  • PCI -SIG имеет соответствующую работу в соответствии с условиями Single Root I/O Virtualization (SR-IOV) и Address Translation Services (ATS). Ранее они были включены в отдельные спецификации, но с PCI Express 5.0 были перемещены в PCI Express Base Specification. [12]
  • ARM определяет свою версию IOMMU как System Memory Management Unit (SMMU) [13] для дополнения своей архитектуры виртуализации. [14]

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

Ссылки

  1. ^ "Поддержка аппаратного обеспечения платформы Intel для виртуализации ввода-вывода". intel.com. 2006-08-10. Архивировано из оригинала 2007-01-20 . Получено 2014-06-07 .
  2. ^ "Системные платы для настольных ПК: совместимость с технологией виртуализации Intel (Intel VT)". intel.com. 2014-02-14 . Получено 2014-06-07 .
  3. ^ "Расширение физического адреса — память PAE и Windows". Microsoft Windows Hardware Development Central. 2005. Получено 2008-04-07 .
  4. ^ Мули Бен-Йехуда; Джими Ксенидис; Михал Островски (2007-06-27). "Цена безопасности: оценка производительности IOMMU" (PDF) . Труды симпозиума Linux 2007. Оттава, Онтарио, Канада: IBM Research . Получено 28.02.2013 .
  5. ^ "Xen FAQ: как использовать 3D-графику в DomU". Архивировано из оригинала 2005-04-23 . Получено 2006-12-12 .
  6. ^ "Спецификация технологии виртуализации ввода-вывода AMD (IOMMU), версия 2.0" (PDF) . amd.com. 2011-03-24 . Получено 2014-01-11 .
  7. ^ "Спецификация технологии виртуализации ввода-вывода AMD (IOMMU)" (PDF) . amd.com . Получено 2020-07-09 .
  8. ^ IBM 4300 Processors Principles of Operation for ECPS:VSE Mode (PDF) (Первое издание). IBM. Январь 1979. SA22-7070-0. Архивировано из оригинала (PDF) 2012-03-14 . Получено 2021-06-30 .
  9. ^ "Спецификация архитектуры технологии виртуализации Intel для направленного ввода-вывода (VT-d)" (PDF) . Получено 2020-07-09 .
  10. ^ "Ресурсы DVMA и переводы IOMMU" . Получено 2007-04-30 .
  11. ^ "Безопасность логических разделов в IBM eServer pSeries 690". Архивировано из оригинала 10 марта 2007 г. Получено 2007-04-30 .
  12. ^ "PCI Express Base Specification" . Получено 2023-01-18 .
  13. ^ "ARM SMMU" . Получено 2013-05-13 .
  14. ^ "ARM Virtualization Extensions". Архивировано из оригинала 2013-05-03 . Получено 2013-05-13 .
  • Bottomley, James (2004-05-01). "Использование DMA". Linux Journal (121). Specialized System Consultants . Архивировано из оригинала 2006-07-15 . Получено 2006-08-09 .
  • Освоение API DMA и IOMMU, Embedded Linux Conference 2014, Сан-Хосе, автор Лоран Пинчарт
Получено с "https://en.wikipedia.org/w/index.php?title=Устройство_управления_памятью_ввода–вывода&oldid=1242251280"