В вычислении , блок управления памятью ввода-вывод ( IOMMU ) представляет собой блок управления памятью (MMU) , который соединяет прямую-доступ к памяти сигнала управления на (DMA-совместимая) ввод / вывод шины к основной памяти . Подобно традиционному MMU, который преобразует видимые ЦП виртуальные адреса в физические адреса , IOMMU сопоставляет видимые устройству виртуальные адреса (также называемые адресами устройств или адресами ввода-вывода в этом контексте) в физические адреса. Некоторые устройства также обеспечивают защиту памяти от неисправных или вредоносных устройств.
Примером IOMMU является таблица переназначения графических адресов (GART), используемая графическими картами AGP и PCI Express на компьютерах с архитектурой Intel и AMD.
В архитектуре x86 до разделения функций северного и южного мостов между ЦП и концентратором контроллера платформы (PCH) виртуализация ввода-вывода выполнялась не ЦП, а набором микросхем . [1] [2]
Преимущества
Преимущества наличия IOMMU по сравнению с прямой физической адресацией памяти (DMA) включают [ цитата необходима ] :
- Большие области памяти могут быть выделены без необходимости быть непрерывными в физической памяти - IOMMU сопоставляет непрерывные виртуальные адреса с лежащими в основе фрагментированными физическими адресами. Таким образом, иногда можно избежать использования векторного ввода-вывода ( списков разброса-сбора ).
- Устройства, которые не поддерживают адреса памяти, достаточно длинные для адресации всей физической памяти, могут адресовать всю память через IOMMU, избегая накладных расходов, связанных с копированием буферов в и из адресуемого пространства памяти периферийного устройства.
- Например, компьютеры x86 могут адресовать более 4 гигабайт памяти с помощью функции расширения физического адреса (PAE) в процессоре x86. Тем не менее, обычное 32-битное устройство PCI просто не может адресовать память выше границы 4 ГиБ и, следовательно, не может получить к ней прямой доступ. Без IOMMU операционная система должна была бы реализовать требующие много времени буферы отказов (также известные как двойные буферы [3] ).
- Память защищена от злонамеренных устройств, которые пытаются атаковать DMA, и неисправных устройств, которые пытаются выполнить ошибочную передачу памяти, потому что устройство не может читать или записывать в память, которая не была явно выделена (сопоставлена) для него. Защита памяти основана на том факте, что ОС, работающая на ЦП (см. Рисунок), исключительно управляет как MMU, так и IOMMU. Устройства физически не могут обойти или повредить настроенные таблицы управления памятью.
- В виртуализации , гостевые операционные системы могут использовать оборудование , которое не специально для виртуализации. Более производительное оборудование, такое как видеокарты, использует DMA для прямого доступа к памяти; в виртуальной среде все адреса памяти повторно отображаются программным обеспечением виртуальной машины, что приводит к сбою устройств DMA. IOMMU обрабатывает это повторное отображение, позволяя использовать собственные драйверы устройств в гостевой операционной системе.
- В некоторых архитектурах IOMMU также выполняет повторное отображение аппаратных прерываний аналогично стандартному повторному отображению адресов памяти.
- Подкачка периферийной памяти может поддерживаться IOMMU. Периферийное устройство, использующее расширение интерфейса запроса страницы (PRI) служб преобразования адресов PCI-SIG PCIe, может обнаруживать и сигнализировать о необходимости служб диспетчера памяти.
Для системных архитектур, в которых порт ввода-вывода является отдельным адресным пространством от адресного пространства памяти, IOMMU не используется, когда ЦП обменивается данными с устройствами через порты ввода-вывода . В системных архитектурах, в которых ввод-вывод порта и память отображены в подходящее адресное пространство, IOMMU может транслировать доступы к портам ввода-вывода.
Недостатки
Недостатки наличия IOMMU по сравнению с прямой физической адресацией памяти включают: [4]
- Некоторое снижение производительности из-за накладных расходов на перевод и управление (например, обход таблицы страниц).
- Потребление физической памяти для добавленных таблиц страниц ввода-вывода (трансляции) . Это можно смягчить, если таблицы могут использоваться совместно с процессором.
Виртуализация
Когда операционная система работает внутри виртуальной машины , включая системы, использующие паравиртуализацию , такие как Xen и KVM , она обычно не знает физических адресов памяти, к которым она обращается. Это затрудняет предоставление прямого доступа к аппаратному обеспечению компьютера, потому что, если гостевая ОС попытается проинструктировать оборудование о выполнении прямого доступа к памяти (DMA) с использованием гостевых физических адресов, это, скорее всего, приведет к повреждению памяти, поскольку оборудование не знает об этом. отображение между физическим гостевым адресом и физическим адресом хоста для данной виртуальной машины. Повреждения можно избежать, если гипервизор или ОС хоста вмешаются в операцию ввода-вывода, чтобы применить переводы. Однако этот подход вызывает задержку операции ввода-вывода.
Модуль IOMMU решает эту проблему путем повторного сопоставления адресов, к которым обращается оборудование, в соответствии с той же (или совместимой) таблицей преобразования, которая используется для сопоставления физического адреса гостя с физическими адресами хоста. [5]
Опубликованные спецификации
- AMD опубликовала спецификацию технологии IOMMU под названием AMD-Vi . [6] [7]
- Intel опубликовала спецификацию технологии IOMMU как Virtualization Technology for Directed I / O, сокращенно VT-d . [8]
- Информация о Sun IOMMU была опубликована в разделе Доступ к виртуальной памяти устройства (DVMA) в Solaris Developer Connection. [9]
- Запись IBM Translation Control Entry (TCE) описана в документе под названием Logical Partition Security в IBM eServer pSeries 690. [10]
- PCI-SIG имеет соответствующую работу в соответствии с условиями I / O Virtualization (IOV) [11] и Address Translation Services (ATS).
- ARM определяет свою версию IOMMU как System Memory Management Unit (SMMU) [12], чтобы дополнить свою архитектуру виртуализации. [13]
Смотрите также
- Гетерогенная системная архитектура (HSA)
- Список оборудования, поддерживающего IOMMU
- Ввод-вывод с отображением памяти
- Защита памяти
Рекомендации
- ^ «Аппаратная поддержка платформы Intel для виртуализации ввода-вывода» . intel.com. 10 августа 2006 г. Архивировано из оригинала на 2007-01-20 . Проверено 7 июня 2014 .
- ^ «Системные платы для настольных ПК: совместимость с технологией виртуализации Intel (Intel VT)» . intel.com. 2014-02-14 . Проверено 7 июня 2014 .
- ^ «Расширение физического адреса - память PAE и Windows» . Центр разработки оборудования Microsoft Windows. 2005 . Проверено 7 апреля 2008 .
- ^ Мули Бен-Иегуда; Джими Ксенидис; Михал Островски (2007-06-27). «Цена безопасности: оценка эффективности IOMMU» (PDF) . Труды Linux Symposium 2007 . Оттава, Онтарио, Канада: IBM Research . Проверено 28 февраля 2013 .
- ^ «Xen FAQ: В DomU, как я могу использовать трехмерную графику» . Архивировано из оригинала на 2008-10-02 . Проверено 12 декабря 2006 .
- ^ «Версия 2.0 спецификации технологии виртуализации ввода-вывода AMD (IOMMU)» (PDF) . amd.com. 2011-03-24 . Проверено 11 января 2014 .
- ^ «Спецификация технологии виртуализации ввода-вывода AMD (IOMMU)» (PDF) . amd.com . Проверено 9 июля 2020 .
- ^ «Спецификация архитектуры Intel Virtualization Technology для направленного ввода-вывода (VT-d)» (PDF) . Проверено 9 июля 2020 .
- ^ "Ресурсы DVMA и переводы IOMMU" . Проверено 30 апреля 2007 .
- ^ «Безопасность логических разделов в IBM eServer pSeries 690» . Проверено 30 апреля 2007 .
- ^ «Спецификации виртуализации ввода-вывода» . Проверено 1 мая 2007 .
- ^ «АРМ СММУ» . Проверено 13 мая 2013 .
- ^ «Расширения виртуализации ARM» . Архивировано из оригинала на 2013-05-03 . Проверено 13 мая 2013 .
Внешние ссылки
- Боттомли, Джеймс (2004-05-01). «Использование DMA» . Linux Journal . Специализированные системные консультанты (121). Архивировано из оригинала на 2006-07-15 . Проверено 9 августа 2006 .
- Освоение API-интерфейсов DMA и IOMMU , конференция по встроенным Linux, 2014 г., Сан-Хосе, автор: Лоран Пинчарт