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

В вычислительной технике блок управления памятью ввода-вывода ( 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 PCI-SIG (ATS), может обнаруживать и сигнализировать о необходимости служб диспетчера памяти.
Для системных архитектур, в которых порт ввода-вывода представляет собой отдельное адресное пространство от адресного пространства памяти, 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 опубликована в разделе Доступ к виртуальной памяти устройства (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-графику» . Архивировано из оригинала 23 апреля 2005 г. Проверено 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» . Архивировано из оригинала 10 марта 2007 года . Проверено 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, Сан-Хосе, автор Лоран Пинчарт