List of iommu-supporting hardware

Boot-Time VT-d Device Pass-Through

As the name suggests, boot-time pass-through occurs at HVM domU (guest) boot-time. It is also referred to as static VT-d device pass-through, however, this name is confusing as devices attached using this method may subsequently be hot-unplugged. To configure static pass-through for a domain add a «pci» line to the configuration file for the domain. For example, the following may be added to /etc/xen/hvm.conf:

pci = 

After updating the configuration file, start HVM guest and use «lspci» to verify that the the pass-through device is present in the guest. «ifconfig» or «ip addr show» may be used to see if IP address has been assigned to NIC devices.

Virtual Slot Designation

As of Xen 3.4.0 it is possible to specify the virtual slot that is used for by boot-time VT-d device pass-through. This is optional and when done is specified on a per-device basis by appending @SLOT_NUMBER to the BDF. For example, the following assigns 00:02.0 to virtual slot 7 while leaving xen to choose the slot for 01:00.0:

pci = 

Binding Devices to pci-stub

If using pv-ops dom0, also can use pci-stub to hide devices for assignment (example PCI device 01:00.0) * lspci -n * locate the entry for device 01:00.0 and note down the vendor & device ID 8086:10b9 .

Note: Binding devices with pci-stub only works for pci passthrough to HVM guests! Hiding with xen-pciback as mentioned above works for both HVM and PV guests and is preferred.

...
01:00.0 0200: 8086:10b9 (rev 06)
...

then use following commands to hide it: .


echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind

21 мая 2013 г.

Исходные данные

  • Материнская плата H55M-E33(MS-7636)
  • Процессор Intel Core i5 CPU 650
  • ОС Linux 3.2.0-43-generic x86_64 Ubuntu 12.04.2 LTS
  • VirtualBox 4.2.12r84980

Процесс

Звуковая карта определилась гостевой ОС и что самое главное заработала, т.е. звук гостевой системы выводится на физическое устройство хоста. В ходе моих экспериментов многие устройства успешно пробрасывались (без FLReset+) и виделись ядром гостя, но работать отказывались. Были случаи, что система хоста зависала, так что будьте осторожны (на этапе 9), если будете повторять. К сожалению GPU и USB пока пробросить не удалось, что является моей конечной целью.

Обновления заметки:

Опция Virtualization Technology. Включение данной опции включает технологию аппаратной виртуализации, основанной на специальной процессорной архитектуре. В отличие от программной виртуализации, с помощью данной техники возможно использование изолированных гостевых систем (виртуальных машинах — VMware, Virtual PC и тд.), управляемых гипервизором напрямую. Гостевая система не зависит от архитектуры хостовой платформы и реализации платформы виртуализации.

На работу программ пользователя в стандартной операционной системе данная опция практически не влияет.

Значения опции:

  • Enabled,
  • Disabled

Опция также может иметь другие названия:

  • Virtualization Technology
  • Vanderpool Technology
  • VT Technology
  • Virtualization

Примечание 1.Аппаратная виртуализация виртуализация с поддержкой специальной процессорной архитектуры. Аппаратная виртуализация обеспечивает производительность, сравнимую с производительностью невиртуализованной машины, что дает виртуализации возможность практического использования и влечет её широкое распространение. Наиболее распространены технологии виртуализации Intel-VT и AMD-V.

  1. В Intel VT (Intel Virtualization Technology) реализована виртуализация режима реальной адресации (режим совместимости с 8086). Соответствующая аппаратная виртуализация ввода-вывода — VT-d. Часто обозначается аббревиатурой VMX (Virtual Machine eXtension). Кодовое название — Vanderpool.
  2. AMD-V часто обозначается аббревиатурой SVM (Secure Virtual Machines). Кодовое название — Pacifica. Соответствующая технология виртуализации ввода-вывода — IOMMU. AMD-V проще и эффективнее, чем Intel VT. Поддержка AMD-V появилась в Xen 3.3.

Intel VT (Intel Virtualization Technology) — intel virtualization technology что это?

VT-x 13 ноября 2005 года Intel выпустила две модели Pentium 4 (модели 662 и 672), которые стали первыми процессорами, поддерживающими VT-x («Vanderpool»). VT-x представляет собой технологию виртуализации Intel режима реальной адресации на платформе x86 — VMX (Virtual Machine eXtension).


Реализована виртуализация режима реальной адресации (режим совместимости с 8086).

VT-d (Virtualization technology for directed I/O) — технология аппаратной виртуализации ввода-вывода , созданная корпорацией Intel в дополнение к её технологии виртуализации вычислений VT-x. Виртуализация ввода-вывода позволяет пробрасывать (pass-through) устройства на шине PCI (и более современных подобных шинах) в гостевую ОС, таким образом, что она может работать с ним с помощью своих штатных средств. Чтобы такое было возможно, в логических схемах системной платы используется специальное устройство управления памятью ввода-вывода (IOMMU), работающее аналогично MMU центрального процессора, используя таблицы страниц и специальную таблицу отображения DMA (DMA remapping table — DMAR), которую гипервизор получает от BIOS через ACPI. Отображение DMA необходимо, поскольку гипервизор ничего не знает о специфике работы устройства с памятью по физическим адресам, которые известны лишь драйверу. С помощью DMAR он создает таблицы отображения таким образом, что драйвер гостевой ОС видит виртуальные адреса IOMMU аналогично тому, как бы он видел физические без него и гипервизора.

Intel Virtualization Technology for Directed I/O (VT-d) — это следующий важный шаг на пути к всеобъемлющей аппаратной поддержке виртуализации платформ на базе Intel. VT-d расширяет возможности технологии Virtualization Technology (VT), существующей в IA-32 (VT-x) и Itanium (VT-i), и добавляет поддержку виртуализации новых устройств ввода-вывода. Ознакомиться подробнее с технической стороной вопроса можно здесь https://ru.wikipedia.org/wiki/

AMD desktop chipsets with IOMMU support

  • AMD 890FX chipset supports IOMMU. Other 890 chipsets don’t have IOMMU support!
  • AMD 990FX, 990X and 970 chipsets support IOMMU.
  • Motherboards with a BIOS supporting the IOMMU(as reported by users):
    • ASUS Crosshair IV (reported working by Jens Krehbiel-Gräther)
    • ASUS Crosshair V Formula (reported working by Pavel Matěja)
    • ASUS F2A85-V PRO
    • ASUS M4A89TD Pro/USB3 (reported working by Jens Krehbiel-Gräther)
    • Asrock 890FX Deluxe3 (reported working by Jens Krehbiel-Gräther)
    • Biostar TA890FXE (from bios version 89FAD629.BST reported working by Joop Boonen, Konrad Rzeszutek Wilk)
    • Gigabyte GA-970A-UD3 (Bios F7)
    • Asrock released bios updates supporting IOMMU for all motherboards with A55 or A75 chipset (see discussion)
  • Motherboards with a beta-bios available from tech-support that supports the IOMMU:
    • Gigabyte GA-890FXA-UD5
    • Gigabyte GA-890FXA-UD7
    • MSI 890FXA-GD70 (from beta-bios 1.75 reported working by Sander Eikelenboom)

Ventajas

Las ventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria (DMA), incluyen:

  • Se pueden asignar grandes regiones de memoria sin la necesidad de que sean contiguas en la memoria física: el IOMMU asigna direcciones virtuales contiguas a las direcciones físicas fragmentadas subyacentes. Por lo tanto, a veces se puede evitar el uso de E/S vectorizadas.
  • Los dispositivos que no admiten direcciones de memoria lo suficientemente largas como para direccionar toda la memoria física aún pueden direccionar toda la memoria a través de la IOMMU, evitando los gastos indirectos asociados con la copia de almacenamientos intermedios hacia y desde el espacio de memoria direccionable del periférico.
  • La memoria está protegida contra los dispositivos maliciosos que intentan ataques DMA y dispositivos defectuosos que intentan transferencias de memoria erróneas porque un dispositivo no puede leer o escribir en la memoria que no se ha asignado (mapeado) explícitamente. La protección de memoria se basa en el hecho de que el SO que se ejecuta en la CPU (ver figura) controla exclusivamente tanto la MMU como la IOMMU. Los dispositivos son físicamente incapaces de eludir o dañar las tablas configuradas de administración de memoria.
  • En algunas arquitecturas, IOMMU también realiza reasignaciones de interrupciones de hardware, de forma similar a la reasignación de direcciones de memoria estándar.
  • La paginación de la memoria periférica puede ser apoyada por un IOMMU. Un periférico que usa la extensión PCI-SIG PCIe Address Translation Services (ATS) Page Request Interface (PRI) puede detectar y señalar la necesidad de servicios de gestión de memoria.

Para las arquitecturas de sistema en las que los puertos E/S es un espacio de direcciones distinto del espacio de direcciones de memoria, no se utiliza una IOMMU cuando la CPU se comunica con dispositivos a través de puertos E/S. En las arquitecturas de sistema en las que los puertos E/S y la memoria se asignan en un espacio de direcciones adecuado, una IOMMU puede traducir las direcciones de puerto E/S.

Published specifications

  • AMD has published a specification for IOMMU technology.
  • Intel has published a specification for IOMMU technology as Virtualization Technology for Directed I/O, abbreviated VT-d.
  • Information about the Sun IOMMU has been published in the Device Virtual Memory Access (DVMA) section of the Solaris Developer Connection.
  • The IBM Translation Control Entry (TCE) has been described in a document entitled Logical Partition Security in the IBM eServer pSeries 690.
  • The PCI-SIG has relevant work under the terms I/O Virtualization (IOV) and Address Translation Services (ATS).
  • ARM defines its version of IOMMU as System Memory Management Unit (SMMU) to complement its Virtualization architecture.

Buying computer hardware

If your buying a new computer or planning to build one, take a careful look at the specifications. Here is a non-conclusive checklist:

  1. IOMMU support in the CPU: Intel VT-d or AMD SVM.
  2. IOMMU support in the motherboard / BIOS: check the specifications and manual on how to enable IOMMU! See also https://passthroughpo.st/vfio-increments/ for a hardware parts list used with VGA passthrough.
  3. Discrete graphics card with UEFI support.
  4. CPU ACS support – how well is it implemented? See link above and search the Internet.
  5. When you made a hardware shortlist, check the Internet / forums for success stories.

Драйвера и доводка

По окончанию процесса установки диспетчер устройств недосчитается некоторых драйверов. Предположительно, это могут быть:

Нужно скормить им драйвера из набора , что подключены через IDE CD-ROM в предыдущем разделе.

Делается это стандартно: правой кнопкой на желтый знак вопроса, обновить драйвера, путь к файлам.

Вот весь список, а это соседняя страница RedHat доков, где установка драйверов показана подробнее.

  • Balloon, the balloon driver, affects the PCI standard RAM Controller in the System devices group.
  • vioserial, the serial driver, affects the PCI Simple Communication Controller in the System devices group.
  • NetKVM, the network driver, affects the Network adapters group. This driver is only available if a virtio NIC is configured. Configurable parameters for this driver are documented in Appendix E, NetKVM Driver Parameters.
  • viostor, the block driver, affects the Disk drives group. This driver is only available if a virtio disk is configured.

Оборудование

Тут постепенно начинается область безграничных возможностей и 101 способов сделать по-своему, поэтому я покажу, как это работает у меня, а вы можете настроить более точно под свои нужды.

У меня выбран дисплей и звуковое устройство . Нет, конечно, если у вас уйма времени и желание во всем разобраться до самых тонкостей — дерзайте и пробуйте альтернативные подходы, но у меня звук взлетел, вернее завибрировал, только с такими настройками. Во второй части, посвященной прогулке по граблям и отлову багов, я расскажу об этом подробнее. В закладке видео я выставил , ибо с этой опцией, благодаря волшебному драйверу, мне удалось добиться нормального разрешения экрана.


Подключаться к ВМ можно разнообразно.

  1. Через графический интерфейс virt-manager
  2. Выбрать дисплей VNC-сервер и подключаться через vnc-клиента
  3. Установить Spice-клиента и подключаться через него
  4. К Windows можно подключиться через rdp, если включен терминальный сервер

У меня вариант 3, для Gentoo это программа

Сеть

Такой простой выбор сетевых опций дает результат превосходящий ожидания. Создаются 3 дополнительных сетевых интерфейса: virbr0, virbr0-nic, vnet0.

В создается свод правил, вот основные:

Windows ВМ:

Повторяю, все это libvirtd создает сам, ничего для этого делать не надо. В результате имеем нормальный роутинг между хостом и ВМ, можно обмениваться файлами по . Можно пойти дальше и создать шару на Windows, а на Linux хосте настроить samba, но мне это показалось избыточным.

IOMMU для работы с Intel VT-d

CONFIG_IOMMU_SUPPORTCONFIG_IOMMU_APICONFIG_INTEL_IOMMUigb_uioDMADMA remappingIOMMUвыключаетсяIOMMUIOMMUINTEL_IOMMU_DEFAULT_ONIOMMUUIOuio_pci_genericigb_uioVFIOigb_uiouio_pci_genericVFIOупоротоIOMMUVFIOPCI-to-PCIIOMMUVFIO

Установка

Берём исходникиDPDKconfig/common_linuxappconfig/common_bsdappconfig/defconfig_*build

DPDK

ivshmemQEMUsharedDPDKivshmemпросто

make

UIO

VFIO

KNI

Сборка и запуск примеров

  • RTE_SDK — путь к папке где установлен DPDK
  • RTE_TARGET — название шаблона конфигурации используемого для сборки

Makefile

  • -c <маска> — шестнадцатеричная маска логических ядер на которых будет выполнятся приложение
  • -n <количество> каналов памяти на процессор
  • -b <домен: шина: идентификатор.функция>,… — чёрный список PCI устройств
  • —use-device <домен: шина: идентификатор.функция>,… — белый список PCI устройств, не может использоваться одновременно с чёрным
  • —socket-mem MB — количество выделяемой памяти больших страниц на один процессорный сокет
  • -m MB — количество выделяемой памяти больших страниц, игнорируется физическое расположение процессора
  • -r <количество> слотов памяти
  • -v — версия
  • —huge-dir — папка к которой примонтированы большие страницы
  • —file-prefix — префикс файлов которые хранятся в файловой системе больших страниц
  • —proc-type — экземпляр процесса, используется вместе с —file-prefix для запуска приложения в нескольких процессах
  • —xen-dom0 — выполнение в Xen domain0 без поддержки больших страниц
  • —vmware-tsc-map — использование TSC счетчика предоставляемого VMWare, вместо RDTSC
  • —base-virtaddr — базовый виртуальный адресс
  • —vfio-intr — тип прерываний исспользуемых VFIO

lstopohwlocEAL

  • на нулевом сокете () нужно указать —socket-mem=1024
  • на первом —socket-mem=0,1024
  • на нулевом и втором —socket-mem=1024,0,1024

Запуск и инсталляция

Запускаем и создаем новую виртуальную машину из локального хранилища.

Указываем путь к установочному iso образу Windows.

Далее, на 3-м и 4-м шаге будет выбор количества CPU, объем RAM и размер дискового пространства, после чего на 5-м шаге следует выбрать дополнительные конфигурации перед настройкой.

Окно дополнительных настроек нужно для того, чтобы выполнить финт ушами. Его смысл в том, чтобы добавить виртуальный флопарь с драйверами из набора . Это даст возможность изменить тип жесткого диска: удалить диск с шиной IDE и добавить его же, но с шиной VirtIO. Подробно, в доках RedHat.

Прописываем драйвер и добавляем виртуальный флоппи-диск. Затем переходим на вкладку и проделываем финт с заменой шины диска: удаляем с IDE и добавляем с VirtIO.

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


В принципе, уже можно начинать инсталляцию, но мы забыли добавить CD-ROM с драйверами , а они нам пригодятся, когда диспетчер устройств засверкает желтыми иконками вопросительного знака.

Ну вот теперь можно начать установку.

Ну хорошо, начали мы установку. А что, если установщик Windows попросит сменить диск? Мне из-за этого пришлось пару раз прервать и начать всю карусель заново, но с вами такого уже не случится.

Qemu

In case you want to use Qemu directly, here are some configurations to get you started. In general, as a typical qemu call will usually require many command-line flags, it is typically advised to place the qemu call in a bash script and to run it that way. Don’t forget to make the file executable.

Minimal

This minimal configuration will simply boot into the bios — there aren’t any drives connected so there is nothing else for qemu to do. However, this allows us to verify that the gpu passthrough is actually working.

FILE

#!/bin/bash

exec qemu-system-x86_64 \
    -nodefaults \
    -enable-kvm \
    -cpu host,kvm=off \
    -m 8G \
    -name "BlankVM" \
    -smp cores=4 \
    -device vfio-pci,host=09:00.0,x-vga=on,multifunction=on,romfile=GP107_patched.rom \
    -device vfio-pci,host=09:00.1 \
    -monitor stdio \
    -nographic \
    -vga none \
    $@

Here’s an explanation of each line:

  1. `-nodefaults` stops qemu from creating some default devices. Specifically, it creates a vga device by default, which interferes with our attempt to pass through the video card (if you have a multi-video card host this may not be an issue for you)
  2. `-enable-kvm` enables acceleration
  3. `-cpu host, kvm=off \` this makes the virtual machine match the cpu architecture of the host. Not really sure what `kvm=off` does…
  4. `-m 8G` give the guest 8 gigabytes of RAM
  5. `-name «BlankVM»` I guess it just gives the virtual machine a name
  6. `-smp cores=4` how many cores the guest should have. I’m matching the host.
  7. `-device vfio-pci,host=09:00.0…` add a device using vfio-pci kernel module, from the host’s address «09:00.0»
  8. `…x-vga=on` this is an option for the vfio-pci module (I think)
  9. `…multifunction=on` since our card is doing both audio and video, it needs multifunction (I think…)
  10. `…romfile=GP107_patched.rom` due to known issues on NVIDIA cards, it may be necessary to use a modified vbios. This is how you make qemu use that modified vbios.
  11. `-device vfio-pci,host=09:00.1` just like above — this is the audio device that is in the same IOMMU group as the video device.
  12. `-monitor stdio` this will drop you into a qemu «command line» (they call it a monitor) once you launch the vm, allowing you to do things.
  13. `-vga none` this is probably redundant since we did «nodefaults»

Linux Guest

Here is a slightly more complicated qemu call, that actually loads a gentoo vm.

FILE

#!/bin/bash

exec qemu-system-x86_64 \
    -nodefaults \
    -enable-kvm \
    -cpu host,kvm=off,hv_vendor_id=1234567890ab \
    -m 8G \
    -name "Gentoo VM" \
    -smp cores=4 \
    -boot order=d \
    -drive file=Gentoo_VM.img,if=virtio \
    -monitor stdio \
    -serial none \
    -net nic \
    -net user,hostfwd=tcp::50000-:22,hostfwd=tcp::50001-:5900,hostname=gentoo_qemu \
    -nographic \
    -vga none \
    -device vfio-pci,host=09:00.0,x-vga=on,multifunction=on,romfile=GP107_patched.rom \
    -device vfio-pci,host=09:00.1 \
    -usb \
    -device usb-host,vendorid=0x1532,productid=0x0101,id=mouse \
    -device usb-host,vendorid=0x04f2,productid=0x0833,id=keyboard \
    $@

Here’s an explanation of the new configurion options:

  1. `…hv_vendor_id=…` despite the patched vbios, the nvidia driver still recognized that it is being run in a virtual machine and refuses to load. This «spoofs» the vendor id (somewhere) and tricks the driver
  2. `-boot order=d` boot the hard drive first
  3. `-drive file=Gentoo_VM.img,if=virtio` this is a drive that is emulated in th vm. The «Gentoo_VM.img» file is a qcow qemu-style virtual drive file.
  4. `-serial none` actually, I can’t remember why I put this in there….
  5. `-net nic` create a ethernet in the guest vm
  6. `-net user,hostfwd…` forwards the ports from host 50000 and 50001 to the guest ports 22 and 5900. Now, from the host, you can ssh into the guest using `ssh -p 50000 myuser@127.0.0.1`, and if you have a vnc server running in the guest on port 5900, you can access it using port 50001 in the host
  7. `-nographic` this may not be needed if you have a dedicated graphics card for the guest
  8. `-usb` emulate a usb device on the guest
  9. `-device usb-host,…` these two lines forward the keyboard and mouse from the host to the guest. The vendorid and productid can be found using lsusb in the host.

Please note that without the `hv_vendor_id` portion, you can boot in and use the console in the guest with the forwarded graphics card. But whenever you launch X, which initialized the proprietary nvidia driver, it will fail.

IOMMU

This is Input Output Memory Management Unit. In every system this hardware is integrated into a north bridge controller which setup the memory and is programmed by the firmware on your main-board. In recent years manufacturers have stopped integrating this as a North-Bridge chip and integrated it into the CPU itself. This is why if you want to upgrade your memory speed, type and so on you are now required to not only change the motherboard but the CPU as well.

Regardless the kernel needs to setup and read the mappings to be able to use your system memory efficiently.

Installation

Kernel

Move to the kernel directory and open the menuconfig utility:

Set the following options:

KERNEL Example of IOMMU settings kernel

Device Drivers  ---> 
    IOMMU Hardware Support  --->
      Generic IOMMU Pagetable Support  ----  
         AMD IOMMU support                     
           Export AMD IOMMU statistics to debugfs   
      <M>     AMD IOMMU Version 2 driver               
         Support for Intel IOMMU using DMA Remapping Devices  
           Support for Shared Virtual Memory with Intel IOMMU  
           Enable Intel DMA Remapping Devices by default       
         Support for Interrupt Remapping

The above will allow the kernel to control the mappings in the Memory Mapping controller.

Build and install the kernel:

Configuration

The following options for controlling aspects of the memory mapping will need to be added to the kernel command-line in order to take effect. Doing so varies depending on the system’s bootloader. Common bootloaders include GRUB2 and Lilo. More information on bootloaders can be found here.

Generic options

Attribute Description and options
This disables the IOMMU driver completely.
Don’t force hardware IOMMU usage when it is not neede.
The use of the hardware IOMMU even when it is not actually needed (e.g. because < 3 GB memory).
Use software bounce buffering (SWIOTLB) (default for Intel machines). This can be used to prevent the usage of an available hardware IOMMU. (read bellow for Intel SWIOTLB).

AMD64 systems

Attribute Description and options
,,, Enable flushing of IO/TLB entries they are unmapped. Otherwise they are flushed before they will be reused, which is a lot of faster. = do not initialize any AMD IOMMU found in the system. = Force device isolation for all devices. The IOMMU driver is not allowed anymore to lift isolation requirements as needed. This option does not override .
, This is a boolean option: = disabled, = enabled This is to dump the ACPI table for AMD IOMMU. With this option enabled, AMD IOMMU driver will print ACPI tables for AMD IOMMU during IOMMU initialization.
, Specifies one of the following AMD IOMMU interrupt remapping modes: = Use legacy interrupt remapping. = Use virtual APIC mode, which allows IOMMU to inject interrupts directly into guest. This mode requires . (Default when IOMMU HW support is present.)

Intel systems

Intel generally adopts «an-always-enable-it-if-it-is-supported» rule so most options are to turn off or disable the IOMMU functions.

Attribute Description and options
, This is a boolean option: = enabled, = disabled.
This option turns off mapping for a graphics card and is the default state for this option. The gfx is mapped as normal device. If a gfx device has a dedicated DMAR unit, the DMAR unit is bypassed by not enabling DMAR with this option. In this case the gfx device will use physical address for DMA.
With this option iommu will not optimize to look for io virtual address below 32-bit forcing dual address cycle on pci bus for cards supporting greater than 32-bit addressing. The default is to look for translation below 32-bit and if not available then look in the higher range.
The default setting for this is disabled. This option on every unmap_single operation will result in a hardware IOTLB flush operation as opposed to batching them for performance.
Super Page which is by default enabled if supported, you can turn this off using this option.
By default, extended context tables will be supported if the hardware advertises that it has support both for the extended tables themselves, and also PASID support. With this option set, extended tables will not be used even on hardware which claims to support them.

SWIOTLB for high input output (such as graphics)

For decades the problem has existed in that how would you get data in and out of the CPU and RAM quickly and efficiently especially for high throughput devices like file IO and graphic cards, etc.

Unfortunately the system is not only having to deal with that IO but many tasks all at the same time, the CPU and RAM may be very fast but if it cannot get the data out by either network, USB, storage device, or onto a screen via a graphics card it is a waste of time having a fast multiprocessing system.

Normally the system holds 4MB for normal operation and allows the rest to be used by other devices. The problem is that if a device overlaps or overflows into another then the system panics and can’t deal with it. Many new devices like Nvidia graphics cards and SCSI controllers have drivers now that allow the IOMMU values they use to be set.

There is no safe way this value can be set (adjusted) automatically because of the diversity of hardware configurations possible on the market. This means the end user has to design and build the system and decide for each use case the best setting for the system.

If one set a large SWIOTLB then one would need to instruct the driver of a device to utilize the larger amount of memory mapping buffer. Some hardware physically control this in the BIOS while others do not provide any control. For the most part, newer high end hardware permit system administrators to control this by modifying the above kernel options.

Some drivers try to automatically control this but as mentioned above can cause stability issues even kernel panic.

Simply setting a large SWIOTLB will not mean a faster IO will be achieved; the hardware must be instructed to use it. Rule of thumb is if 64MB is available then set a maximum remap IO for the driver of 4MB less. This would be 60MB in this case. If 128MB then max remap for the driver would be 124MB and so on.


С этим читают