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

В вычислительной технике блок управления памятью ввода-вывода ( 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) службы трансляции адресов PCIe PCIe (ATS), может обнаруживать и сигнализировать о необходимости служб диспетчера памяти.
Для системных архитектур, в которых порт ввода-вывода представляет собой отдельное адресное пространство от адресного пространства памяти, IOMMU не используется, когда ЦП взаимодействует с устройствами через порты ввода-вывода . В системных архитектурах, в которых порт ввода-вывода и память отображаются в подходящее адресное пространство, IOMMU может транслировать доступ к порту ввода-вывода.
Недостатки [ править ]
К недостаткам использования IOMMU по сравнению с прямой физической адресацией памяти относятся: [4]
- Некоторое снижение производительности из-за накладных расходов на трансляцию и управление (например, обход таблицы страниц).
- Потребление физической памяти для добавленных таблиц страниц ввода-вывода (трансляций) . Это можно смягчить, если таблицы можно использовать совместно с процессором.
- Чтобы уменьшить размер таблицы страниц, степень детализации многих IOMMU равна подкачке памяти (часто 4096 байт), и, следовательно, каждый небольшой буфер, который нуждается в защите от атаки DMA, должен быть выровнен по страницам и обнулен, прежде чем он станет видимым для устройства. Из-за сложности распределения памяти ОС это означает, что драйверу устройства необходимо использовать буферы возврата для конфиденциальных структур данных, что снижает общую производительность.
Виртуализация [ править ]
Когда операционная система работает внутри виртуальной машины , включая системы, использующие паравиртуализацию , такие как Xen и KVM , она обычно не знает хост-физические адреса памяти, к которой она обращается. Это затрудняет предоставление прямого доступа к аппаратному обеспечению компьютера, поскольку, если гостевая ОС попытается дать указание оборудованию выполнить прямой доступ к памяти (DMA) с использованием гостевых физических адресов, это, скорее всего, приведет к повреждению памяти, поскольку оборудование не знает об этом. сопоставление между гостевым физическим адресом и физическим адресом хоста для данной виртуальной машины. Повреждения можно избежать, если гипервизор или ОС хоста вмешивается в операцию ввода-вывода для применения преобразований. Однако этот подход приводит к задержке операции ввода-вывода.
IOMMU решает эту проблему, переназначая адреса, к которым обращается оборудование, в соответствии с той же (или совместимой) таблицей преобразования, которая используется для сопоставления гостевого физического адреса с физическими адресами хоста. [5]
Опубликованные характеристики [ править ]
- AMD опубликовала спецификацию технологии IOMMU под названием AMD-Vi . [6] [7]
- IBM предложила поддержку расширенной программы управления: расширенный режим виртуального хранилища (ECPS:VSE). [8] на линии 43xx ; канальные программы использовали виртуальные адреса.
- Корпорация Intel опубликовала спецификацию технологии IOMMU как Технология виртуализации для направленного ввода-вывода, сокращенно VT-d . [9]
- Информация о Sun IOMMU опубликована в разделе Доступ к виртуальной памяти устройства (DVMA) на сайте Solaris Developer Connection. [10]
- Запись управления трансляцией IBM (TCE) описана в документе, озаглавленном «Безопасность логических разделов в IBM eServer pSeries 690». [11]
- PCI -SIG ведет соответствующую работу в рамках виртуализации ввода-вывода с единым корнем (SR-IOV) и служб трансляции адресов (ATS). Раньше они были описаны в отдельных спецификациях, но начиная с PCI Express 5.0 они были перенесены в базовую спецификацию PCI Express. [12]
- ARM определяет свою версию IOMMU как блок управления системной памятью (SMMU). [13] в дополнение к своей архитектуре виртуализации. [14]
См. также [ править ]
- Гетерогенная системная архитектура (HSA)
- Список оборудования с поддержкой IOMMU
- Ввод-вывод, отображаемый в памяти
- Защита памяти
Ссылки [ править ]
- ^ «Аппаратная поддержка платформы Intel для виртуализации ввода-вывода» . intel.com. 10 августа 2006 г. Архивировано из оригинала 20 января 2007 г. Проверено 7 июня 2014 г.
- ^ «Системные платы для настольных ПК: совместимость с технологией виртуализации Intel (Intel VT)» . intel.com. 14 февраля 2014 г. Проверено 7 июня 2014 г.
- ^ «Расширение физического адреса — память PAE и Windows» . Центр разработки оборудования Microsoft Windows. 2005 . Проверено 7 апреля 2008 г.
- ^ Мули Бен-Иегуда; Джими Ксенидис; Михал Островский (27 июня 2007 г.). «Цена безопасности: оценка эффективности IOMMU» (PDF) . Материалы симпозиума Linux 2007 . Оттава, Онтарио, Канада: IBM Research . Проверено 28 февраля 2013 г.
- ^ «Часто задаваемые вопросы по Xen: Как в DomU использовать 3D-графику» . Архивировано из оригинала 2 октября 2008 г. Проверено 12 декабря 2006 г.
- ^ «Спецификация технологии виртуализации ввода-вывода AMD (IOMMU), версия 2.0» (PDF) . amd.com. 24 марта 2011 г. Проверено 11 января 2014 г.
- ^ «Спецификация технологии виртуализации ввода-вывода AMD (IOMMU)» (PDF) . amd.com . Проверено 9 июля 2020 г.
- ^ Принципы работы процессоров IBM 4300 для режима ECPS:VSE (PDF) (первое издание). ИБМ. Январь 1979 г. SA22-7070-0. Архивировано из оригинала (PDF) 14 марта 2012 г. Проверено 30 июня 2021 г.
- ^ «Технология виртуализации Intel для архитектуры направленного ввода-вывода (VT-d)» (PDF) . Проверено 9 июля 2020 г.
- ^ «Ресурсы DVMA и переводы IOMMU» . Проверено 30 апреля 2007 г.
- ^ «Безопасность логических разделов в IBM eServer pSeries 690» . Проверено 30 апреля 2007 г.
- ^ «Базовая спецификация PCI Express» . Проверено 18 января 2023 г.
- ^ «АРМ СММУ» . Проверено 13 мая 2013 г.
- ^ «Расширения виртуализации ARM» . Архивировано из оригинала 3 мая 2013 г. Проверено 13 мая 2013 г.
Внешние ссылки [ править ]
- Боттомли, Джеймс (1 мая 2004 г.). «Использование DMA» . Linux-журнал (121). Специализированные системные консультанты . Архивировано из оригинала 15 июля 2006 г. Проверено 9 августа 2006 г.
- Освоение API-интерфейсов DMA и IOMMU , Конференция по встроенному Linux 2014, Сан-Хосе, Лоран Пинчарт