Перейти к содержимому

Control iommu pre boot behavior что это

  • автор:

Что такое IOMMU в BIOS и как это влияет на виртуализацию

IOMMU (Input-Output Memory Management Unit) — это аппаратная платформа, которая позволяет операционной системе управлять доступом к памяти и вводу-выводу устройств. IOMMU добавляет уровень абстракции между устройством ввода-вывода и системной памятью, что позволяет ОС отслеживать доступ к памяти и гарантировать ее безопасность.

Примеры кода, которые могут использоваться для настройки IOMMU в BIOS, могут варьироваться в зависимости от производителя системы и версии BIOS. Рассмотрим пример настроек IOMMU в BIOS для системы на основе UEFI от производителя ASUS:

1. Загрузите UEFI BIOS и войдите в раздел Advanced Mode.

2. Выберите вкладку Advanced и найдите раздел IOMMU Configuration или его эквивалент.

3. Включите IOMMU Support и выберите соответствующую опцию для настройки режима работы IOMMU (чаще всего режим может быть настроен как Auto, Enabled, Disabled).

4. Сохраните изменения и перезагрузите систему.

Пример кода для настройки IOMMU через командную строку на Linux (в этом случае IOMMU настраивается на уровне ядра операционной системы):

1. Откройте терминал и введите команду sudo nano /etc/default/grub для открытия файла конфигурации загрузчика GRUB.

2. Найдите строку с параметрами загрузки и добавьте iommu=pt или iommu=on в конец строки (в зависимости от типа настройки IOMMU).

3. Сохраните изменения и выйдите из редактора.

4. Обновите конфигурацию GRUB, введя команду sudo update-grub.

5. Перезапустите систему для применения изменений.

Результатом настройки IOMMU является увеличение безопасности системы и возможность использования виртуализации на устройствах с большим количеством памяти и ввода-вывода.

Что такое AMD IOMMU в BIOS

Виртуальные машины используются для тестирования ПО, запуска несовместимых с основной операционной системой программ, тестирования операционных систем и для безопасного запуска не вызывающих доверия программ. Однако производительность виртуальной машины зачастую оставляет желать лучшего. Она даже и близко не приближается к производительности основной рабочей среды ОС.

Для того, чтобы устранить эту разницу в производительности и сделать использование виртуальных машин более приятным, комфортным, была разработана технология IOMMU. Сначала её поддержка в материнских платах появилась для процессоров Intel, затем уже и для процессоров AMD. В этой статье пойдёт речь о том, как работает IOMMU, где применяется и как настроить работу этой технологии на своём компьютере.

Что такое AMD IOMMU в BIOS?

Технология IOMMU (расшифровывается как «input/output memory management unit») для процессоров AMD в материнских платах появилась относительно недавно — в 2009-м году. Она разрабатывалась для увеличения быстродействия виртуальных машин посредством возможности взаимодействия с физическим оборудованием напрямую. Если говорить обычным языком, IOMMU даёт виртуальной машине возможность пользоваться возможностями аппаратуры безо всяких посредников, таким образом и повышая её производительность. Это может быть полезно для развёртывания локального сервера либо в случае необходимости запуска программ, не поддерживающихся основной операционной системой или непротестированных и потенциально опасных.

С включённой технологией IOMMU виртуальная машина не сможет использовать все доступные ресурсы компьютера, но в целом всё будет работать намного лучше. Устройства в этой технологии разделяются на группы. Компьютер сам решает, какие устройства можно использовать для виртуальной машины, а какие нельзя. Так, для оптимальной работы потребуется два GPU: один для основной системы, второй для гостевой (так называется ОС виртуальной машины).

Настройка AMD IOMMU

Рассмотрим настройку AMD IOMMU для Ryzen. Поддержка этой технологии реализована не во всех материнских платах. Если плата поддерживает AMD IOMMU, настроить этот параметр можно следующим образом:

Загрузите программу настройки BIOS. Выполните переход по пути: Advanced \ AMD CBS \ NBIO Common Options \ NB Configuration \ IOMMU.

Для того, чтобы включить AMD IOMMU, активируйте контекстное меню с помощью кнопки и выберите значение Enabled (по умолчанию установлено Disabled). Значение Auto даёт возможность компьютеру самому решать нужно ли использовать IOMMU в какой-то конкретный момент.

Настройка AMD IOMMU произведена. Теперь виртуальная машина может использовать подключённое к материнской плате оборудование в полной мере (видеокарту, USB-накопители, жёсткие диски и т. д.). Производительность виртуальной машины повышается в разы.

Выводы

В этой статье мы рассмотрели параметр AMD IOMMU и дали ответ на вопрос: «AMD IOMMU — что это в биосе материнских плат для процессоров Ryzen?». Обобщая всё вышенаписанное, можно сделать следующий вывод: AMD IOMMU полезна для увеличения быстродействия виртуальных машины.

briann / proxmox7-win11-gpu-passthrough.md

This is my documentation for what worked in my homelab for setting up computer with two GPUs for gaming and plex transcoding. Not all steps may be required!

  • MSI Z590 Wifi Pro, BIOS version 7D09v18
  • Intel i5-11400 (6-core w/ Intel 730 iGPU)
  • Nvidia 3090 (Asus «ROG STRIX RTX3090 24G GAMING»), VBIOS version 94.02.42.00.A9
  • Others: 1TB NVMe drive, 32GB RAM, USB peripherals & monitor
  • Proxmox 7.2-11 (host)
  • Windows 11 (guest)
  • LXC containers with iGPU mapped (guest)

Desired end state

  • VM running Windows 11 where I can:
    • Use the physical monitor (HDMI<->3090) and USB peripherals, passed through, for in-person gaming.
    • Able to connect via Nvidia Gamestream for remote gaming.
    • Able to connect via RDP for usage as a workstation.
    • Installed on the NVMe.

    These are the relevant settings in my BIOS:

    • Settings
      • Advanced
        • PCIe/PCI Sub-system settings
          • Max TOLUD: Dynamic
          • Re-size BAR support: Enabled
          • SR-IOV Support: Enabled
          • Native PCIE Enable: Enabled
          • Native ASPM: Auto
          • Initiate Graphic Adapter: IGD
          • Integrated Graphics Share Memory: 32MB
          • Fast boot: Disabled
          • CPU features
            • Intel virtualization tech: Enabled
            • Intel VT-D Tech: enabled
            • Control IOMMU Pre-boot behavior: Enable
            • DMA Control gaurantee: enabled
            1. Install Proxmox (version used listed above).
            2. Run the post-install script at tteck.github.io/Proxmox.
            3. Unknown: update to latest kernel via apt install pve-kernel-5.19 and reboot.

            Optional: Get information on passthrough card

            The later steps in this doc should be checked and modified according to your setup (even if you have the same hardware) based on information you discover here.

            lspci -v to list PCI devices. Note the following:

            • The IDs of the video and audio Nvidia card (e.g., 10de:2204 and 10de:1aef) — these are used anywhere IDs are passed below.
            • Which kernel modules they load (you’ll want to blacklist them).
            • Which IOMMU group they belong to. You’ll want them to be the same group, with no other devices in that group, after running some commands below. If they are already the same group and no other devices are in that group, do not add the pcie_acs_override flag to the GRUB options below. A faster / better way to check may be to ls -l /sys/kernel/iommu_groups/**/devices .

            Update grub boot options

            On the proxmox host:

            1. nano /etc/default/grub
            2. GRUB_CMDLINE_LINUX_DEFAULT=»quiet intel_iommu=on iommu=pt pcie_acs_override=downstream initcall_blacklist=sysfb_init nofb video=vesafb:off,simplefb:off,efifb:off rd.driver.blacklist=snd_hda_intel,nvidia,nvidiafb,nouveau module.blacklist=snd_hda_intel,nvidia,nvidiafb,nouveau vfio-pci.ids=10de:2204,10de:1aef»
            3. Save and then run update-grub .

            Load vfio modules

            On the proxmox host, add the following to /etc/modules :

            Add modprobe confs

            On the proxmox host, add the following to /etc/modprobe.d/blacklist.conf :

            Add the following to /etc/modprobe.d/vfio.conf :

            We can probably get away with not doing the last one?

            Finally, run: update-initramfs -u -k all

            Check if Proxmox is ready to passthrough the card

            reboot and log into proxmox via ssh. Let’s check a few things.

            Video & audio components of the nvidia card are being bound to vfio_pci

            lspci -v that we ran earlier should show you what kernel driver is being used for both video and audio. Important that both are being bound to vfio-pci . If not, then figure out how to get this bound (are you missing a blacklist?)

            Control iommu pre boot behavior что это

            Что такое IOMMU и улучшит ли это производительность моей виртуальной машины?

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

            Действительно ли это приносит улучшение производительности виртуальной машины? и если это произойдет, как я могу извлечь выгоду из Virtualbox?

            Короче говоря, единственный способ, которым IOMMU поможет вам, — это если вы начнете назначать ресурсы HW непосредственно виртуальной машине. Просто это не делает вещи быстрее.

            Было бы полезно точно знать, какая материнская плата / процессор рекламирует эту функцию. IOMMU является системным механизмом отображения ввода-вывода и может использоваться с большинством устройств.

            IOMMU звучит как общее название для Intel VT-d и AMD IOV. В этом случае я не думаю, что вы можете мультиплексировать устройства, это очень похоже на пропуск PCI, прежде чем существовали все эти причудливые инструкции по виртуализации :). SR-IOV отличается, само периферийное устройство должно нести поддержку. HW знает, что он виртуализирован, и может делегировать часть HW себе виртуальной машине. Многие виртуальные машины могут взаимодействовать с устройством SR-IOV одновременно с очень низкими издержками.

            Единственное, что быстрее, чем SR-IOV, — это пропуск PCI, хотя в этом случае только одна виртуальная машина может использовать это устройство, даже операционная система хоста не может его использовать. Прохождение PCI было бы полезно, скажем, для виртуальной машины, которая работает с интенсивной базой данных, которая выиграет от подключения к FiberChannel SAN.

            Приближение к HW имеет свои ограничения, однако делает виртуальные машины менее переносимыми для развертываний, которые требуют, например, динамической миграции. Это относится как к проходу SR-IOV, так и к PCI.

            Виртуализированные развертывания Linux по умолчанию обычно используют VirtIO, что довольно быстро для начала.

            Модель IoMmu

            На этой странице описывается модель IoMmu , представленная в WDDM 2.0. Сведения о последних обновлениях IOMMU см. в разделе изоляции GPU на основе IOMMU и повторного сопоставления IOMMU DMA .

            Обзор

            Единица управления памятью (IOMMU) Input-Output — это компонент MMU, который подключает шину ввода-вывода с поддержкой DMA к системной памяти. Он сопоставляет видимые устройствами виртуальные адреса с физическими адресами, что делает его полезным в виртуализации.

            В модели WDDM 2.0 IoMmu каждый процесс имеет единое виртуальное адресное пространство, которое совместно используется ЦП и GPU и управляется диспетчером памяти ОС.

            Для доступа к памяти GPU отправляет запрос данных в соответствующий IOMMU. Запрос включает общий виртуальный адрес и идентификатор адресного пространства процесса (PASID). IOMMU выполняет преобразование адресов с помощью общей таблицы страницы. Следующая диаграмма иллюстрирует эту схему.

            iommu process address space translation.

            Драйвер в режиме ядра выражает поддержку модели IoMmu , задав ограничения DXGK_VIDMMCAPS::IoMmuSupported . Если эти флаги заданы, диспетчер видеопамяти автоматически регистрирует любой процесс с помощью GPU с IOMMU и получает PASID для этого адресного пространства процесса. PASID передается драйверу во время создания устройства.

            Основные выделения сопоставляются диспетчером видеопамяти с сегментом диафрагмы перед отображением, гарантируя, что контроллер дисплея имеет физический доступ к этим выделениям.

            В модели IoMmu драйвер пользовательского режима продолжает выделять видеопамяти для GPU с помощью службы «Выделить » диспетчера видеопамяти. Это позволяет драйверу пользовательского режима выполнять следующие действия:

            • Следуйте модели расположения.
            • Поддержка модели общего доступа к ресурсам Microsoft DirectX.
            • Убедитесь, что первичные поверхности видны ядру и сопоставляются с диафрагмой перед отображением.

            Первый уровень перевода (адрес ресурса плитки на общий адрес ЦП или GPU) полностью управляется в пользовательском режиме драйвером пользовательского режима.

            Русские Блоги

            Базовая технология виртуализации — обзор технологии iommu

            1. Основные функции iommu

            IOMMU (блок управления памятью ввода-вывода). iommu имеет две основные функции: отображение dma-адреса устройства управления на физический адрес машины (dmar), переназначение прерывания (intremap) (необязательно)

            1.1 Отображение адресного пространства DMA

            Основная функция Iommu заключается в том, что DMA устройства всегда может получить доступ к области физической памяти машины, обеспечивая при этом безопасность.

            Когда нет Iommu, устройство может получить доступ ко всему адресному пространству машины через DMA.

            1. В соответствии с этим механизмом, если драйвер устройства находится в пользовательском режиме, то, как защитить область физической памяти машины, создает проблемы для разработки инфраструктуры драйвера пользовательского режима. После появления iommu iommu управляет отображением и преобразованием каждого адреса DMA устройства в фактический физический адрес, что позволяет драйверу пользовательского режима полностью управлять DMA определенного устройства и прерывания в рамках определенной структуры драйвера ядра.

            2. Если это физическое устройство входит в виртуализированную виртуальную машину посредством прозрачной передачи, после того, как драйвер устройства виртуальной машины настроит dma устройства, гипервизор должен перехватить доступ к dma во время доступа к устройству прозрачной передачи DMA, а dma Физический адрес виртуальной машины, к которой осуществляется доступ, преобразуется в физический адрес, выделенный гипервизором для виртуальной машины, то есть доступ dma к устройству прозрачной передачи виртуальной машины должен быть vpaddr (физический адрес виртуальной машины) —-> ppaddr (физический адрес физической машины). Эта часть перехвата вызывает накладные расходы на переключение на гипервизор для dma виртуальной машины и накладные расходы на адрес трансляции гипервизора.

            После внедрения iommu эта часть накладных расходов ложится на оборудование iommu, и вся работа с гипервизором стала проще. Вам нужно только использовать таблицу преобразования адресов vpaddr —> ppaddr для прозрачной таблицы преобразования адресов Iommu dma устройства передачи (эта часть таблицы находится в гипервизоре Настраивается в епт)

            3. Облегчите использование старого 32-разрядного оборудования pci на 64-разрядных машинах. Необходимо только настроить dma-адрес устройства 32bitpci -> физический адрес компьютера 64bit в таблице сопоставления адресов iommu.

            4. ОС хоста удобно настраивать работу DMA устройства, потому что DMA требует постоянного адресного пространства для чтения и записи. При наличии iommu операционная система может настраивать непрерывные адреса DMA для устройства и действительно соответствовать несмежным физическим адресам.

            Объясните IOMMU для чайников

            Оказывается оно у меня в конфиге даже не до конца было включено:

            + его включение добавило в ядро такие опции:

            IOMMU — это чтобы:

            1) Злой девайс не мог лазить по памяти компа куда хочет, а только куда пустит IOMMU.

            2) Девайс с несколькими кусочками памяти мог представить ее драйверу как единое целое.

            Прокидывать девайсы в виртуалку. Например, видяшки.

            Без IOMMU нет разграничения доступа устройств к оперативке.

            Интересно, что еще в VAX-11 эта хрень уже была. DMA умело писать/читать виртуальное адресное пространство.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *