В вычислительной технике блок управления памятью ввода-вывода ( IOMMU ) — это блок управления памятью (MMU), соединяющий шину ввода-вывода с возможностью прямого доступа к памяти (DMA-capable) с основной памятью . Как и традиционный MMU, который транслирует виртуальные адреса, видимые процессором, в физические адреса , IOMMU сопоставляет виртуальные адреса, видимые устройством (в данном контексте также называемые адресами устройств или адресами ввода-вывода, отображенными в памяти ) с физическими адресами. Некоторые блоки также обеспечивают защиту памяти от неисправных или вредоносных устройств.
В архитектуре 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]
^ "Поддержка аппаратного обеспечения платформы Intel для виртуализации ввода-вывода". intel.com. 2006-08-10. Архивировано из оригинала 2007-01-20 . Получено 2014-06-07 .
^ "Системные платы для настольных ПК: совместимость с технологией виртуализации Intel (Intel VT)". intel.com. 2014-02-14 . Получено 2014-06-07 .
^ "Расширение физического адреса — память PAE и Windows". Microsoft Windows Hardware Development Central. 2005. Получено 2008-04-07 .
^ Мули Бен-Йехуда; Джими Ксенидис; Михал Островски (2007-06-27). "Цена безопасности: оценка производительности IOMMU" (PDF) . Труды симпозиума Linux 2007. Оттава, Онтарио, Канада: IBM Research . Получено 28.02.2013 .
^ "Xen FAQ: как использовать 3D-графику в DomU". Архивировано из оригинала 2005-04-23 . Получено 2006-12-12 .
^ "Спецификация технологии виртуализации ввода-вывода AMD (IOMMU), версия 2.0" (PDF) . amd.com. 2011-03-24 . Получено 2014-01-11 .