Iommu controller что это

Содержание

Первый тестовый проброс устройств на ASUS M5A97PRO

Iommu controller что это

В данной статье рассказывается о проведенном эксперименте цель которого была проброс устройства в виртуальную машину из хоста под управлением Ubuntu 11.04. В качечтве системной платы использовалась ASUS M5A97PRO.

Материнская плата ASUS M5A97PRO собрана на чипсете AMD 970 и обладает поддержкой технологии AMD IOMMU, обеспечивающей проброс реальных устройств в виртуальные машины.

Настройка

1. Обновите BIOS материнской карты. Версия биос которая поставляется изначально некорректно работает с пробросом устройств. Для обновления биос скопирируйте ROM c официального сайта ASUS на флешку и запустите утилиту EZ Flash.

Для чистоты эксперимента можете воспользоваться использованной версией BIOS ROM.
2. Скомпилируйте и установите ядро Linux 3.2.0 включив поддержку IOMMU либо используйте пакеты подготовленные в рамках экспиримента.
3.

В файле настроек GRUB (/etc/default/grub) установите значение строке:
GRUB_CMDLINE_LINUX_DEFAULT=»iommu=pt iommu=1 amd_iommu=fullflush»  Эти опции активируют AMD IOMMU

4. В каталоге /etc/modprobe.

d создайте файл kvm_iommu_map_guest.conf со следущим содержанием:

options kvm allow_unsafe_assigned_interrupts=15. Обновите GRUB с помощью команды update-grub. Если используете iSCSI цели остановите сервис open-iscsi комадой:

service open-iscsi stop

для того чтобы предотвратить поиск загрузочных записей на всех дисках виртуальных машин хранящихся в хранилище.6. Перезагрузитесь6.

a Если загрузка не осуществляется, либо не включаются некоторые устройства  — значит BIOS не обновлен.6.

b Если загрузка завершилась успешно проверте включение IOMMU коммандой:

dmesg | grep AMD-Vi

на выходе должны получить сообщения подобные следующим:

[    1.655121] AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
[    1.708344] AMD-Vi: Initialized for Passthrough Mode

Это говорит о том что запуск IOMMU завершен успешно.

7. Подготовьте KVM 1.0. В ходе теста использовалась перекомпилированная версия KVM версии из LaunchPad.

Проброс PCI-устройств с помощью специальной версии QEMU, оптимизированной для работы со SPICE, используемого в UmVirt VP, в настоящее время не возможен по причине отсутствия поддержки устройства «pci-assign», вызванного задержкой синхронизации веток разработки KVM.

Проброс встроенного USB 3.0 контролера

1. Включите модуль PCI STUB если он не часть ядра командой
modprobe pci_stubрезультат проверте командой

lsmod | grep pci

2. Выберите устройство для проброса выполнив команду

ls pci

Вы должны получить список устройств вида

00:00.0 Host bridge: ATI Technologies Inc RD890 PCI to PCI bridge (external gfx0 port B) (rev 02)00:00.2 Generic system peripheral [0806]: ATI Technologies Inc Device 5a2300:02.

0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI express gpp port B)00:04.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI express gpp port D)00:06.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI express gpp port F)00:07.

0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI express gpp port G)00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (rev 40)00:12.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller00:12.

2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller00:13.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller00:13.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller00:14.

0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 42)00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)00:14.

4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)00:14.5 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller00:16.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller00:16.

2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor HyperTransport Configuration00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Address Map00:18.

2 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor DRAM Controller00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Miscellaneous Control00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Link Control01:00.

0 VGA compatible controller: nVidia Corporation GT218 [GeForce 210] (rev a2)01:00.1 Audio device: nVidia Corporation High Definition Audio Controller (rev a1)02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)03:00.

0 SATA controller: JMicron Technology Corp. JMB362 AHCI Controller (rev 10)04:00.0 USB Controller: Device 1b21:104205:05.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)05:05.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)

05:06.0 Ethernet controller: D-Link System Inc DGE-528T Gigabit Ethernet Adapter (rev 10)

где первый столбец адрес устройства. Выберем устройство 04:00.0 3. Запустите KVM c просом устройства указав его адрес например

kvm -m 512 -boot c -net none -hda /dev/zero -device pci-assign,host=04:00.0,id=hostpci0 -vga cirrus

На что получи вывод где приведены инструкции по пробросу устройства:

Failed to assign device «hostpci0» : Device or resource busy*** The driver 'xhci_hcd' is occupying your device 0000:04:00.0.

****** You can try the following commands to free it:****** $ echo «1b21 1042» > /sys/bus/pci/drivers/pci-stub/new_id*** $ echo «0000:04:00.0» > /sys/bus/pci/drivers/xhci_hcd/unbind*** $ echo «0000:04:00.

0″ > /sys/bus/pci/drivers/pci-stub/bind*** $ echo «1b21 1042» > /sys/bus/pci/drivers/pci-stub/remove_id***

kvm: -device pci-assign,host=04:00.0,id=hostpci0: Device 'pci-assign' could not be initialized

4. Выполним указанные инструкции

echo «1b21 1042» > /sys/bus/pci/drivers/pci-stub/new_idecho «0000:04:00.0» > /sys/bus/pci/drivers/xhci_hcd/unbindecho «0000:04:00.0» > /sys/bus/pci/drivers/pci-stub/bind

echo «1b21 1042» > /sys/bus/pci/drivers/pci-stub/remove_id

5. Осуществим повторный запуск

kvm -m 512 -boot c -net none -hda /dev/zero -device pci-assign,host=04:00.0,id=hostpci0 -vga cirrus

в результате должна запустится виртуальная машина с проброшенным устройством В случае если в гостевой системе установлена лицензионная версия Windows вас попросят пройти процедуру авторизации по причине изменеия конфигурации оборудования.

В диспетчере устройств вы можете увидеть проброшенное устройство
В Linux устройство сразу обнаруживается однако подключение новых USB устройств не осуществляется

Не смотря на то что USB устройства не пробрасываются, сам USB котролер успешно пробрасывается. Конечно такой проброс не может быть использован на практике, однако даёт возможность понять что проброс устройств возможен при достаточном уровне знаний и возможностей системы.

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

Если вы желаете занятся пробросом устройств уже сегодня рекомендуем воспользоваться XEN так как в рамках проекта XEN уже реализованы средства проброса различных устройств.

Имеются примеры проброса даже видео карт.

Источник: http://umvirt.ru/node/69

Проброс видеокарты в KVM из под ubuntu

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

Около месяца назад попробовал поставить VirtualBox и на нее установить Windows, в общем то работать с 2мя операционными системами мне понравилось, но была одна проблема, я программирую исключительно компьютерную графику и мне нужна была поддержка OpenGL 3.

3 и выше, к сожалению VirtualBox не предоставлял мне такой возможности.

Погуглив наткнулся на такую штуку как Xen, долго пытался что-то сделать на ней, в итоге ничего не вышло, скорее всего из-за основной видеокарты — nVidia GeForce 580 GTX, гипервизор попросту не хотел запускать даже убунту, не говоря уже об виндовсе. Начал искать другие гипервизоры, и наткнулся на KVM, с ним пришлось повозиться, но в конце концов все заработало.

Конфигурация

Итак, нам понадобится:

  • Процессор с поддержкой виртуализации (в Intel — это VT-d, в AMD — AMD-Vi). Важно: чипсет тоже дожен поддерживать эту технологию
  • Материнская плата с блоком управления памятью ввода/вывода(IOMMU)
  • Две видеокарты, для гостевой ОС желательно использовать AMD видеокарту, т.к. с ней проблем не должно быть. карты NVidia не работают.
Читайте также  Что делать если наушники стали тихо играть

Моя конфигурация:

  • Процессор AMD Phenom II x4
  • Материнская плата ASUS M5A99X EVO R2.0
  • карта для Ubuntu: NVidia GeForce 580 GTX
  • карта для гостевой ОС: AMD Radeon HD 5800

Подготовка

Для начала следует перезагрузиться в биос и включить IOMMU. Чтобы проверить работает ли IOMMU для AMD:

dmesg | grep -iE «(IOMMU|AMD-Vi)»

или для Intel:

dmesg | grep -iE «(IOMMU|VT-d)»

Теперь нужно включить iommu в grub. Открываем /etc/default/grub, ищем GRUB_CMDLINE_LINUX, приводим к виду:

GRUB_CMDLINE_LINUX=»max_loop=64 iommu=pt iommu=1 amd_iommu=fullflush»

Таким образом мы увеличиваем количество LOOP устройств, включаем поддержку IOMMU для AMD. Если у вас при загрузке операционной системы все стало сплющенным (обычно это из-за 2х видеокарт), то к предыдущей строке добавьте nomodeset, получим:

GRUB_CMDLINE_LINUX=»nomodeset max_loop=64 iommu=pt iommu=1 amd_iommu=fullflush»

Так же, для уменьшения глюков, можно запретить скачивание драйверов от AMD (если у вас обе видеокарты от AMD, то не стоит этого делать) добавив их в blacklist. Открываем /etc/modprobe.d/blacklist.conf и добавляем следующее:

blacklist fglrx

blacklist radeon Теперь нужно подготовить видеокарту для проброса, отключив ее от драйвера на хосте и подключив к pci-stub. Для выбора нашей карты вводим lspci и ищем нашу карту:

02:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Cypress PRO [Radeon HD 5850]

02:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cypress HDMI Audio [Radeon HD 5800 Series] в моем случае это 02:00.0 и 02:00.1. 02:00.1 — это звуковой чип. карта видна как видео и аудио, поэтому их стоит переносить вместе. Затем, нам нужны vendor id и device id. посмотреть можно запустив lspci с ключем -n

02:00.0 0300: 1002:6899

02:00.1 0403: 1002:aa50 теперь подключим наши устройства к pci-stub. карта:

echo «1002 6899» > /sys/bus/pci/drivers/pci-stub/new_id

echo «0000:02:00.0» > /sys/bus/pci/devices/0000\:02\:00.0/driver/unbind
echo «0000:02:00.0» > /sys/bus/pci/drivers/pci-stub/bind обратите внимание, в между VendorID и DeviceID не ставится двоеточие. Звуковая карта:

echo «1002 aa50» > /sys/bus/pci/drivers/pci-stub/new_id

echo «0000:02:00.1» > /sys/bus/pci/devices/0000\:02\:00.1/driver/unbind
echo «0000:02:00.1» > /sys/bus/pci/drivers/pci-stub/bind для удобства, можно написать скрипт и добавить его в автозапуск. Показать скрипт#!/bin/bash hostgr=»0000:02:00.0″hostau=»0000:02:00.1″grid=»1002 6899″auid=»1002 aa50″ #echo $grid > «/sys/bus/pci/drivers/pci-stub/new_id»echo $hostgr > «/sys/bus/pci/devices/$hostgr/driver/unbind»echo $hostgr > «/sys/bus/pci/drivers/pci-stub/bind» echo $auid > «/sys/bus/pci/drivers/pci-stub/new_id»echo $hostau > «/sys/bus/pci/devices/$hostau/driver/unbind»echo $hostau > «/sys/bus/pci/drivers/pci-stub/bind»

Установка

Для начала вам нужно установить несколько пакетов:

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

это установка на сервер без гуи, для удобной работы с kvm установим также virt-manager:

sudo apt-get install virt-manager

После этого в меню должен появится пункт «Менеджер виртуальных машин» (Virtual Machine Manager) Далее передадим модулю kvm опцию allow_unsafe_assigned_interrupts=1. Создаем файл в /etc/modprobe.d/kvm.conf с содержанием и перезагружаем моудль.

options kvm allow_unsafe_assigned_interrupts=1

Далее запускаем virt-manager, появится окно: Нажимаем правой кнопкой по localhost и выбираем New либо жмем на мониторчик слева в панели. Далее по инструкции создаем виртуальную машину. После установки системы можно пробрасывать нужные нам устройства. Войдите в меню View->Details. Должно появиться такое окно: Жмем на кнопку Add hardware, выбираем PCI Host Device, и ищем нашу видеокарту. Тоже самое стоит проделать и со звуковым чипом от видеокарты. Таким же образом можно пробросить USB хосты, чтобы они заработали, стоит указать в Controller USB в поле Model: USB2. При запуске в устройствах компьютера должен появиться наш адаптер: Следущее что нам нужно сделать — это скачать драйвер. Скачиваем с сайта производителя и устанавливаем его в систему. У меня при попытке установить драйвер система отчаяно уходила в BSOD, решил я эту проблему установкой более новой винды. Также можно попробовать установить драйвер через диспетчер устройств, но у меня он просто напросто зависал. Для завершения выключаем виртуальную машину и производим перезагрузку компьютера, если этого не сделать, при повторном запуске система может уйти в BSOD. На данный момент, kvm при повторном запуске гостя с проброшенной видеокартой вешает всю систему, поэтому, если вы выключили виртуалку, то придется так же перезагружать весь компьютер.

Итог

Теперь, после старта консоль виртуальной машины отключится после загрузки драйвера видеокарты, в случае Windows 7 там остается картинка «Starting Windows», но само изображение должно уже выводится на проброшенную видеокарту.

Хотя на коносль и не будет выводится изображение, тем не менее она будет передавать данные от устройств ввода и можно будет управлять гостем с клавиатуры и мыши как обычную виртуалку. Цепляем второй монитор к проброшенной видеокарте, и любуемся проделанной работой.

На последок скриншот оценки производительности системы:

Источники

help.ubuntu.com/community/KVM
www.linux.org.ru/wiki/en/Проброс_видеокарты_в_виртуальную_машину

  • виртуализация
  • kvm
  • проброс видеокарты
  • iommu
  • amd-vi
  • vt-d
  • quemu

Источник: https://habr.com/post/183468/

Включаем поддержу IOMMU на Intel VT-d в KVM

2017-05-188 минут чтения (~ 1132 слов)

Включение IOMMU для проброса PCI в KVM

Проброс PCI-устройств позволяет использовать физическое PCI-устройство внутри виртуального сервера. Если мы пробрасываем PCI-устройство в виртуальный сервер, оно больше недоступно хосту.

Проверяем модуль в системе:

[root@kvm ~] QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible : PASS QEMU: Checking if device /dev/vhost-net exists : PASS QEMU: Checking if device /dev/net/tun exists : PASS QEMU: Checking for cgroup 'memory' controller support : PASS QEMU: Checking for cgroup 'memory' controller mount-point : PASS QEMU: Checking for cgroup 'cpu' controller support : PASS QEMU: Checking for cgroup 'cpu' controller mount-point : PASS QEMU: Checking for cgroup 'cpuacct' controller support : PASS QEMU: Checking for cgroup 'cpuacct' controller mount-point : PASS QEMU: Checking for cgroup 'cpuset' controller support : PASS QEMU: Checking for cgroup 'cpuset' controller mount-point : PASS QEMU: Checking for cgroup 'devices' controller support : PASS QEMU: Checking for cgroup 'devices' controller mount-point : PASS QEMU: Checking for cgroup 'blkio' controller support : PASS QEMU: Checking for cgroup 'blkio' controller mount-point : PASS QEMU: Checking for device assignment IOMMU support : PASS QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments) LXC: Checking for Linux >= 2.6.26 : PASS LXC: Checking for namespace ipc : PASS LXC: Checking for namespace mnt : PASS LXC: Checking for namespace pid : PASS LXC: Checking for namespace uts : PASS LXC: Checking for namespace net : PASS LXC: Checking for namespace user : PASS LXC: Checking for cgroup 'memory' controller support : PASS LXC: Checking for cgroup 'memory' controller mount-point : PASS LXC: Checking for cgroup 'cpu' controller support : PASS LXC: Checking for cgroup 'cpu' controller mount-point : PASS LXC: Checking for cgroup 'cpuacct' controller support : PASS LXC: Checking for cgroup 'cpuacct' controller mount-point : PASS LXC: Checking for cgroup 'cpuset' controller support : PASS LXC: Checking for cgroup 'cpuset' controller mount-point : PASS LXC: Checking for cgroup 'devices' controller support : PASS LXC: Checking for cgroup 'devices' controller mount-point : PASS LXC: Checking for cgroup 'blkio' controller support : PASS LXC: Checking for cgroup 'blkio' controller mount-point : PASS

Для Intel CPU

В списке можем наблюдать, что IOMMU отключен в ядре. Включим его, для этого добавим intel_iommu=on в конфигурационный файл GRUB /etc/default/grub:

GRUB_CMDLINE_LINUX=»… intel_iommu=on»

А затем обновим конфигурацию загрузчика:

grub2-mkconfig -o /boot/grub2/grub.cfg

Перезагружаем систему и проверяем.

[ceph@kvm ~]$ virt-host-validate QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible : PASS QEMU: Checking if device /dev/vhost-net exists : PASS QEMU: Checking if device /dev/net/tun exists : PASS QEMU: Checking for cgroup 'memory' controller support : PASS QEMU: Checking for cgroup 'memory' controller mount-point : PASS QEMU: Checking for cgroup 'cpu' controller support : PASS QEMU: Checking for cgroup 'cpu' controller mount-point : PASS QEMU: Checking for cgroup 'cpuacct' controller support : PASS QEMU: Checking for cgroup 'cpuacct' controller mount-point : PASS QEMU: Checking for cgroup 'cpuset' controller support : PASS QEMU: Checking for cgroup 'cpuset' controller mount-point : PASS QEMU: Checking for cgroup 'devices' controller support : PASS QEMU: Checking for cgroup 'devices' controller mount-point : PASS QEMU: Checking for cgroup 'blkio' controller support : PASS QEMU: Checking for cgroup 'blkio' controller mount-point : PASS QEMU: Checking for device assignment IOMMU support : PASS QEMU: Checking if IOMMU is enabled by kernel : PASS LXC: Checking for Linux >= 2.6.26 : PASS LXC: Checking for namespace ipc : PASS LXC: Checking for namespace mnt : PASS LXC: Checking for namespace pid : PASS LXC: Checking for namespace uts : PASS LXC: Checking for namespace net : PASS LXC: Checking for namespace user : PASS LXC: Checking for cgroup 'memory' controller support : PASS LXC: Checking for cgroup 'memory' controller mount-point : PASS LXC: Checking for cgroup 'cpu' controller support : PASS LXC: Checking for cgroup 'cpu' controller mount-point : PASS LXC: Checking for cgroup 'cpuacct' controller support : PASS LXC: Checking for cgroup 'cpuacct' controller mount-point : PASS LXC: Checking for cgroup 'cpuset' controller support : PASS LXC: Checking for cgroup 'cpuset' controller mount-point : PASS LXC: Checking for cgroup 'devices' controller support : PASS LXC: Checking for cgroup 'devices' controller mount-point : PASS LXC: Checking for cgroup 'blkio' controller support : PASS LXC: Checking for cgroup 'blkio' controller mount-point : PASS
Читайте также  Компьютер требует форматировать флешку что делать

Для AMD CPU

Добавим amd_iommu=on в конфигурационный файл GRUB /etc/default/grub:

GRUB_CMDLINE_LINUX=»… amd_iommu=on»

А затем обновим конфигурацию загрузчика:

grub2-mkconfig -o /boot/grub2/grub.cfg

Перезагружаем систему и проверяем.

Источник: https://bogachev.biz/2017/05/18/vklyuchaem-podderzhu-iommu-na-intel-vt-d-v-kvm/

Intel VT-d: практикум для хакеров

Современные персональные платформы характеризуются способностью пе­ри­ферийных контроллеров са­мо­сто­я­тель­но обращаться к оперативной па­мя­ти и другим системным ре­сур­сам. Это требуется учитывать при раз­ра­бот­ке тех­но­ло­гий виртуализации.

Контроллер, работающий с опе­ра­тив­ной памятью под управлением гостевой операционной сис­те­мы, должен видеть только виртуальное адресное про­стран­ство данной среды.

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

Виртуальная адресация и страничное управление памятью впервые были реализованы в процессоре Intel 80386.

Тех­нология виртуализации Intel VT-x опирается на данный механизм и существенно его расширяет, тем не менее, оставляя его привилегией исключительно центрального процессора.

И только технология Intel VT-d снабжает та­ким механизмом периферийные контроллеры.

«Компостер» уже затрагивал тему виртуализации аппаратных средств, использующих доступ к системным ре­сур­сам в режиме bus-master.

В статье «Виртуализация Intel VT-d на марше» рассматриваются базовые принципы этого механизма.

Методы повышения производительности виртуальной платформы и минимизации задержек, вно­си­мых схемами трансляции адресов, рассмотрены в статье «PCI Express оптимизируется для поддержки VT-d».

Тех­но­ло­гия создания виртуального адресного пространства для устройства, работающего с оперативной памятью, рас­смот­ре­на в статье «Каждому bus-master устройству — виртуальное адресное пространство».

Настало время для более подробного рассмотрения…

Об исследуемом объекте

Предлагаемый материал является своего рода лабораторной работой, цель которой — исследовать главный си­с­тем­ный объект, декларирующий поддержку платформой технологии Intel VT-d — ACPI таблицу DMA Remapping Table.

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

В качестве экс­пе­ри­мен­таль­ной платформы использовалась плата TYAN S7012 (dual LGA1366) с одним установленным процессором Intel Xeon E5620.

Таблица DMAR была локализована по алгоритму, описанному в разделе 5.2 документа ACPI Specification Revision 5.0.

При исследовании табличных структур пригодился опыт дизассемблирования, изложенный в статье «Прак­ти­кум по ACPI». Содержимое таблицы было сохранено в файле DMAR.

BIN и проанализировано на основании раз­де­ла 8 документа Intel Virtualization Technology for Directed I/O Architecture Specification, Revision 1.3.

Анализ содержимого таблицы DMAR

В начале таблицы DMAR расположен стандартный ACPI-заголовок:

Рисунок 1. Заголовок таблицы DMAR.
Click to enlarge!

Сразу после заголовка расположена форматированная часть таблицы, содержащая параметры конфигурации системы, основной из которых — разрядность физического адреса, которая на рассматриваемой платформе равна 40 битам. Нулевой бит поля Flags указывает на статус Interrupt Remapping. Установленная в нем «единица» означает, что технология Interrupt Remapping поддерживается.

Рисунок 2. Форматированная часть таблицы DMAR.
Click to enlarge!

Далее следует неформатированная часть таблицы, содержащая последовательность структур DRHD, RMRR, ATSR.

Структура DRHD (DMA Remapping Hardware Unit Definition) декларирует адрес центрального агента технологии Intel VT-d.

Этот узел  выполняет трансляцию виртуальных адресов, генерируемых bus-master устройствами, в физические адреса. Базовый адрес MMIO данного блока на исследуемой плате — FFE000h.

В состав структуры включаются данные о контроллерах прерываний IOAPIC, дополняющие содержимое таблицы ACPI MADT.

Рисунок 3. Структура DRHD в составе таблицы DMAR.
Click to enlarge!

Две структуры RMRR (Reserved Memory Region Reporting), декларируют специальный статус областей оперативной памяти EC000-EFFFF (16KB) и BF7EC000-BF7FFFFF (80KB). Это отражает их взаимосвязь с контроллером универсальной последовательной шины.

Напомним, что до тех пор, пока ОС не взяла на себя управление контроллером USB (Host Controller Ownership), контроллер находится в распоряжении BIOS.

Поэтому BIOS назначает адреса для расписания транзакций и других областей оперативной памяти, к которым контроллер осуществляет доступ.

Структуры RMRR содержат информацию о регионах оперативной памяти, с которыми USB-контроллер работает в режиме bus-master.

Заметим, что когда ОС «отнимет» контроллер у BIOS и назначит собственные адреса для его управляющих структур в оперативной памяти, данная информация перестанет быть актуальной. В общем случае, структуры RMRR могут быть задействованы для любых bus-master устройств, использующих оперативную память до инициализации в операционной системе.

Рисунок 4. Первая структура Reserved Memory Region Reporting.
Click to enlarge!

Рисунок 5. Вторая структура Reserved Memory Region Reporting.
Click to enlarge!

Структура ATSR (Root Port ATS Capability Reporting) декларирует адреса устройств в конфигурационном пространстве {bus, device, function} для которых поддерживается ATS (Address Translation Services). На исследуемой плате, эти адреса соответствуют мостам PCI Express Bridge, входящим в состав северного моста Intel 5520 IOH.

Рисунок 6. Структура ATSR (Root Port ATS Capability Reporting).
Click to enlarge!

Резюме

Мы познакомились с главным системным объектом, обеспечивающим технологию виртуализации Intel VT-d, — таблицей ACPI DMA Remapping Table, расположенной в оперативной памяти. Углубленное исследование этой предметной области предусматривает также изучение следующих основополагающих структур:

  1. блок регистров управления и состояния трансляционного агента, преобразующего виртуальные адреса в физические — Remapping Unit MMIO;
  2. таблица в оперативной памяти, используемая трансляционным агентом для преобразования адресов — Translation Structure.

В документе Intel VT-d Architecture specification с точностью до бита унифицируется формат всех перечисленных объектов.

Гипотетически, это означает, что программному обеспечению, не обязательно распознавать чипсет для использования функциональности VT-d.

С другой стороны, device-specific оптимизация производительности и необходимость обхода различных «багов» могут помешать практическому достижению столь высокой степени унификации.

Источник: https://composter.com.ua/content/intel-vt-d-praktikum-dlya-hakerov-2013-05-24

Как включить аппаратную виртуализацию в BIOS? Virtualization Technology — технология аппаратной виртуализации гостевых ОС (с фото) — Настройка BIOS

Опция Virtualization Technology. Включение данной опции включает технологию аппаратной виртуализации,  основанной на специальной процессорной архитектуре.

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

Гостевая система не зависит от архитектуры хостовой платформы и реализации платформы виртуализации.

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

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

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

  • 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 что это?

Intel VT — это аппаратная основа для программного создания виртуализации, через уменьшение ее размера, стоимости и сложности.

 Например, при использовании такими системами  кэш-памяти, системе ввода-вывод.

Применяется в основном пользователями в корпоративном, облачном, коммуникационном секторах.

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 аналогично тому, как бы он видел физические без него и гипервизора.

VT-d расширяет возможности технологии Virtualization Technology (VT), существующей в IA-32 (VT-x) и Itanium (VT-i), и добавляет поддержку виртуализации новых устройств ввода-вывода.

Ознакомиться подробнее с технической стороной вопроса можно здесь https://ru.wikipedia.org/wiki/

Программа Setup BIOS фирмы AWARD Software International Inc на системных платах GIGABYTE TECHNOLOGY

Название данной опции у данного производителя в данной версии BIOS:

Virtualization значение по умолчанию [Disabled]

Возможное значение:

Обозначение опции BIOS Описание опции в БИОСе Переведенное значение опции БИОС
Hardware assisted VirtuaIization Technology which help improve performance of system running VirtuaI Machine Softwares.Virtual Machine allows multiple OS on one conputer simultaneously. Оборудование для помощи VirtuaIization — технология которая помогает повысить производительность системы, работающей на VirtuaI-машине.Виртуальная машина позволяет запускать более производительно несколько ОС на одном компьютерные одновременно.
[Disabled] Не включать технологию аппаратной виртуализации,  основанной на специальной процессорной архитектуре.
[Enabled] Включает технологию аппаратной виртуализации,  основанной на специальной процессорной архитектуре.

Программа Aptio Setup Utility — BIOS фирмы American Megatrends Inc на системных платах Dell Inc

Название данной опции у данного производителя в данной версии BIOS (ноутбук):

Virtualization значение по умолчанию  [Enabled]

Возможное значение:

Обозначение опции BIOS Описание опции в БИОСе Переведенное значение опции БИОС
This option specifies whether a Virtual Machine Monitor (VMM) can utilize the additional hardware capabilities provided by Intel(R) Virtualization Technology. Эта опция определяет, будет ли монитор виртуальных машин (VMM) использовать дополнительные аппаратные возможности, обеспечиваемые Intel (R) Virtualization Technology.
[Disabled] Disabled = Disable Virtualization Technology. Отключен = Отключить Технология виртуализации.
[Enabled] Enabled = Enable Virtualization Technology.The factory default setting is Enabled. Введено = Включить Virtualization Technology.Заводская настройка по умолчанию — Включена поддержка.

Программа BIOS InsydeH20 Setup Utility компании Insyde Software на на системных платах Hewlett-Packard Company (HP)

Название данной опции у данного производителя в данной версии BIOS:

Virtualization Technology значение по умолчанию  [Disabled]

Данная опция находится на вкладке: «System Configuration»

Обозначение опции BIOS Описание опции в БИОСе Переведенное значение опции БИОС
Hardware VT enables a processor feature for running multiple simultaneous virtual machines allowing specialized software application to run in full isolation of each other. HP recommends that this feature remain disabled unless specialized unless specialized application are being user. Аппаратные средства VT включают функции процессора для запуска нескольких виртуальных машин одновременно, позволяя специализированным прикладным программам запускать в полной изоляции друг от друга приложения. HP рекомендует, чтобы эта функция оставалась отключенной, если пользователь не использует специально предназначенное для этого специализированное приложение.
[ Disabled ]
[ Enabled ]

Источник: http://www.NastrojkaBios.ru/protsessor/virtualization-technologiiu-apparatnoy-virtualizatsii-s-foto.html

IOMMU • ru.knowledgr.com

В вычислении управленческая единица памяти ввода/вывода(IOMMU) является управленческой единицей памяти (MMU), которая соединяет непосредственную память способный к доступу (DMA-способный) автобус ввода/вывода с главной памятью. Как традиционный MMU, который переводит видимые центральным процессором виртуальные обращения к физическим адресам, IOMMU наносит на карту видимые устройством виртуальные адреса (также названный адресами устройства или адресами ввода/вывода в этом контексте) к физическим адресам. Некоторые единицы также обеспечивают защиту памяти от неисправных или злонамеренных устройств.

Примером IOMMU является графический стол переотображения адреса (GART), используемый видеокартами AGP and PCI Express.

До разделения функциональности Нортбриджа и Саутбриджа между центральным процессором и Platform Controller Hub (PCH), виртуализация ввода/вывода не была выполнена центральным процессором, но вместо этого чипсетом.

Преимущества

Преимущества наличия IOMMU, по сравнению с прямым физическим обращением памяти, включают:

  • Большие области памяти могут быть ассигнованы без потребности быть смежными в физической памяти, IOMMU наносит на карту смежные виртуальные обращения к основным фрагментированным физическим адресам. Таким образом использования направленного ввода/вывода (разброс — собирают списки) можно иногда избегать.
  • Устройства, которые не поддерживают адреса памяти достаточно долго, чтобы обратиться ко всей физической памяти, могут все еще обратиться ко всей памяти через IOMMU, избежав накладных расходов, связанных с копированием буферов к и от адресуемого места в памяти peripheral.
  • Например, x86 компьютеры может обратиться больше чем к 4 гигабайтам памяти с особенностью Physical Address Extension (PAE) в x86 процессоре. Однако, обычное 32-битное устройство PCI просто не может обратиться к памяти выше границы на 4 гибибайта, и таким образом это не может непосредственно получить доступ к нему. Без IOMMU операционная система должна была бы осуществить отнимающие много времени буфера сильного удара (также известный как двойные буфера).
  • Память защищена от злонамеренных устройств, которые делают попытку нападений DMA и неисправных устройств, которые делают попытку неправедных передач памяти, потому что устройство не может читать или написать памяти, которая не была явно ассигнована (нанесенная на карту) для него. Защита памяти основана на факте что OS, бегущий на центральном процессоре (см. число), исключительно управляет и MMU и IOMMU. Устройства физически неспособны обойти или испортить формируемые управленческие столы памяти.
  • В виртуализации операционные системы гостя могут использовать аппаратные средства, которые определенно не сделаны для виртуализации. Более высокие исполнительные аппаратные средства, такие как видеокарты используют DMA, чтобы получить доступ к памяти непосредственно; в виртуальной окружающей среде все адреса памяти повторно нанесены на карту программным обеспечением виртуальной машины, которое заставляет устройства DMA терпеть неудачу. IOMMU обращается с этим переотображением, позволяя родным драйверам устройства использоваться в операционной системе гостя.
  • В некоторой архитектуре IOMMU также выполняет переотображение перерыва аппаратных средств способом, подобным стандартному переотображению адреса памяти.
  • Периферийное оповещение памяти может быть поддержано IOMMU. Периферийное использование PCI-СИГНАЛА PCIe Address Translation Services (ATS) расширение Page Request Interface (PRI) может обнаружить и сигнализировать о потребности в услугах распределителя памяти.

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

Недостатки

Недостатки наличия IOMMU, по сравнению с прямым физическим обращением памяти, включают:

  • Некоторое ухудшение работы из перевода и управления наверху (например, прогулки таблицы страниц).
  • Потребление физической памяти для добавленной страницы ввода/вывода (перевод) столы. Это может быть смягчено, если столы могут быть разделены с процессором.

Виртуализация

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

Это делает обеспечение прямого доступа к компьютерной технике трудным, потому что, если бы гость OS попытался приказать аппаратным средствам выполнять доступ непосредственной памяти (DMA), используя физические гостем адреса, это, вероятно, испортило бы память, поскольку аппаратные средства не знают об отображении между физическими гостем и физическими хозяином адресами для данной виртуальной машины. Коррупции избегают, потому что гиперщиток или хозяин OS вмешиваются в операцию по вводу/выводу, чтобы применить переводы, вызывая задержку операции по вводу/выводу.

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

Изданные технические требования

  • AMD издала спецификацию для технологии IOMMU в архитектуре HyperTransport.
  • Intel издал спецификацию для технологии IOMMU как Технология Виртуализации для Направленного ввода/вывода, сократил VT-d.

  • Информация о Солнце IOMMU была издана в части Device Virtual Memory Access (DVMA) Связи Разработчика Соляриса.

  • IBM Translation Control Entry (TCE) была описана в документе под названием Логическая безопасность Разделения в IBM eServer pSeries 690.

У

  • PCI-СИГНАЛА есть соответствующая работа при Виртуализации ввода/вывода условий (IOV) и Address Translation Services (ATS).
  • РУКА определяет свою версию IOMMU как System Memory Management Unit (SMMU), чтобы дополнить ее архитектуру Виртуализации.

См. также

  • Heterogeneous System Architecture (HSA)
  • Список IOMMU-поддержки аппаратных средств
  • Нанесенный на карту памятью ввод/вывод

Внешние ссылки

Источник: http://ru.knowledgr.com/02452842/IOMMU

Понравилась статья? Поделить с друзьями: