Iommu что это в БИОСе?

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

Iommu что это в БИОСе?

Года два назад я решил перейти полностью на линукс, но необходимость в венде не упала, поэтому всегда держал у себя 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», но само изображение должно уже выводится на проброшенную видеокарту.

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

Читайте также  Amd live в БИОСе что это?

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

Источники

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

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

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

IOMMU • ru.knowledgr.com

Iommu что это в БИОСе?

В вычислении управленческая единица памяти ввода/вывода(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

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

Iommu что это в БИОСе?
2017-05-18 8 минут чтения (~ 1132 слов)

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

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

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

[[email protected] ~] 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
Читайте также  Acpi apic support в БИОСе что это?

Для Intel CPU

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

GRUB_CMDLINE_LINUX=»… intel_iommu=on»

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

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

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

[[email protected] ~]$ 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/

Iommu controller что это

Iommu что это в БИОСе?

В данной статье рассказывается о проведенном эксперименте цель которого была проброс устройства в виртуальную машину из хоста под управлением 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 завершен успешно.

Читайте также  Floppy boot в БИОСе что это?

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.

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, с ним пришлось повозиться, но в конце концов все заработало.

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

Iommu что это в БИОСе?

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

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