<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83</id>
	<title>Проброс видеокарты в виртуальную машину - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83"/>
	<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;action=history"/>
	<updated>2026-10-12T23:50:08Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=339&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=339&amp;oldid=prev"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 21:39, 27 февраля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=338&amp;oldid=prev</id>
		<title>lor&gt;Valman в 12:45, 15 ноября 2017</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=338&amp;oldid=prev"/>
		<updated>2017-11-15T12:45:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Проброс видеокарты в виртуальную машину.&lt;br /&gt;
&lt;br /&gt;
В целом, я оставлю тут все, что я использовал в течение уже нескольких месяцев для своего компа, чтобы те, кто заинтересуются использованием видеокарты в гостевой системе могли разобраться что к чему =)&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы использовать видеокарту внутри xen или kvm нужны следующие вещи:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Видеокарта с поддержкой проброса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Любая видеокарта для хоста. Конечно можно обойтись и одной, но тогда теряется весь смысл затеи.&lt;br /&gt;
&lt;br /&gt;
# Материнская плата с блоком управления памятью ввода/вывода(IOMMU)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* в случае процессоров/чипсетов от AMD эта технология называется AMD-Vi и важен только чипсет. на данный момент это 890FX, и по идее вся серия 990 чипсетов. процессор может быть любым, но должен иметь аппаратную виртуализацию(AMD-V).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* В случае процессоров/чипсетов от Intel эта технология называется VT-d и важна поддержка как в чипсете, так и в процессоре.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* В не зависимости от выбранной платформы в биосе материнской платы должны быть реализованы IVRS/DMAR таблицы. Это основная проблема, перед выбором материнской платы, лучше погуглить насчет успехов использования iommu на данной плате.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Железо, которое было использовано у меня:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Материнская плата: Gigabyte GA-990FXA-D3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Видеокарта: Msi Twin Razr III R7870&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Процессор: AMD Phenom II x6 1090T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Ядро: 3.4&lt;br /&gt;
&lt;br /&gt;
::* xen 4.1.2&lt;br /&gt;
&lt;br /&gt;
::* kvm 1.0.1&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Подговтока к пробросу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эти действия не зависят от выбранной системы виртуализации, мы подготовим видеокарту к пробросу и применим некоторые костыли для обхода багов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала нужно перезагрузится в биос и включить там IOMMU. Так же надо установить ту видеокарту, которая будет основной для хоста в качестве основной для хоста +) т.е. чтобы сам POST биоса проходил на той видеокарте, которая '''НЕ''' планируется для проброса в гостевую систему.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Прежде чем продолжить, надо проверить что IOMMU вообще работает.&lt;br /&gt;
&lt;br /&gt;
Можно проверить так:&lt;br /&gt;
 dmesg | grep -iE &amp;quot;(iommu|vt-d)&amp;quot; -a1&lt;br /&gt;
А если вы уже загрузились в Xen, это можно сделать примерно так:&lt;br /&gt;
  # xm dmesg | grep -i iommu -a2&lt;br /&gt;
 (XEN) Detected 3547.487 MHz processor.&lt;br /&gt;
 (XEN) Initing memory sharing.&lt;br /&gt;
 (XEN) AMD-Vi: IOMMU 0 Enabled.&lt;br /&gt;
 (XEN) I/O virtualisation enabled&lt;br /&gt;
 (XEN)  - Dom0 mode: Relaxed&lt;br /&gt;
&lt;br /&gt;
Для платформы Intel там будут сообщения о VT-d, вместо AMD-Vi.&lt;br /&gt;
&lt;br /&gt;
Затем, для уменьшения потенциального количества глюков добавить модуль ядра radeon и/или fglrx в blacklist, для того, чтобы не загружать драйвер для видеокарты на хосте, т.к. мы все равно ее будем отправлять в гостевую систему, а динамическое отключение драйвера может добавить несколько неприятностей. Нужно прописать в файле /etc/modprobe.d/blacklist.conf :&lt;br /&gt;
   blacklist fglrx&lt;br /&gt;
   blacklist radeon&lt;br /&gt;
*есть небольшая проблема, если вторая видеокарта в вашей системе - тоже AMD, то при таком раскладе драйвер для нее не загрузится. Тут в принципе три варианта: либо не прописывать radeon/fglrx в blacklist, либо загружать эти модули уже после подключения нужной видеокарты к pci-stub, либо написать правило для udev. Так что, в случае если у вас обе видеокарты AMD, то добавляйте модули в blacklist если возникнут проблемы.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно подготовить видеокарту к пробросу, отключив ее от драйвера на хосте и подключив к специальному ничего-не-делающему драйверу pci-stub. Если присутствуют hdmi/displayport видеовыходы, то на видеокарте есть встроенная звуковая карта, ее так же нужно подключить к pci-stub. Проверить можно через lspci:&lt;br /&gt;
&lt;br /&gt;
   01:00.0 VGA compatible controller: ATI Technologies Inc PITCAIRN [Radeon HD 7800]&lt;br /&gt;
   01:00.1 Audio device: ATI Technologies Inc Device aab0&lt;br /&gt;
&lt;br /&gt;
Как мы видим, 01:00.0 - видеочип, а 01:00.1 - звуковой чип. Затем, нам нужны vendor id и device id. посмотреть можно запустив lspci с ключем -n&lt;br /&gt;
&lt;br /&gt;
   01:00.0 0300: 1002:6818&lt;br /&gt;
   01:00.1 0403: 1002:aab0&lt;br /&gt;
&lt;br /&gt;
Теперь подключаем железки к pci-stub&lt;br /&gt;
&lt;br /&gt;
   #говорим pci-stub, что он может работать с нашей видеокартой.&lt;br /&gt;
   echo &amp;quot;1002 6818&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/new_id &amp;lt;br/&amp;gt;&lt;br /&gt;
   #следующие строчки отключат видеокарту от текущего драйвера и подключат ее к pci-stub.&lt;br /&gt;
   #Если вы уже прописали в blacklist модули radeon/fglrx, то соответственно не нужно отключать/подключать устройство,&lt;br /&gt;
   #поэтому в них нет необходимости. Ядро само увидит, что pci-stub может работать с 1002 6818 и подключит его.&amp;lt;br/&amp;gt;&lt;br /&gt;
   echo &amp;quot;0000:01:00.0&amp;quot; &amp;gt; /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind &lt;br /&gt;
   echo &amp;quot;0000:01:00.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/bind&lt;br /&gt;
&lt;br /&gt;
   #звуковая карта&lt;br /&gt;
   echo &amp;quot;1002 aab0&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/new_id &lt;br /&gt;
   echo &amp;quot;0000:01:00.1&amp;quot; &amp;gt; /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind &lt;br /&gt;
   echo &amp;quot;0000:01:00.1&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/bind&lt;br /&gt;
&lt;br /&gt;
Разумеется лучше это сохранить в виде скрипта, подставив нужные значения.&lt;br /&gt;
&lt;br /&gt;
Можно проверить что все правильно, посмотрев вывод lspci -s 01:00.0 -k&lt;br /&gt;
 01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI PITCAIRN [Radeon HD 7800]&lt;br /&gt;
        Subsystem: Micro-Star International Co., Ltd. Device 2740&lt;br /&gt;
        Kernel driver in use: pci-stub&lt;br /&gt;
        Kernel modules: radeon&lt;br /&gt;
&lt;br /&gt;
В данном случае мы видим, что в данный момент используется драйвер pci-stub, значит все нормально. Разумеется стоит проверить, что он используется и для звуковой карты.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KVM.&lt;br /&gt;
&lt;br /&gt;
Для начала нужно просто установить kvm и по желанию libvirt c virt-manager, для удобного управления через графический интерфейс. Это можно сделать используя пакетный менеджер вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
Поскольку AMD IOMMU(или драйвер в ядре) пока не поддерживает Interrupt Remapping, то нужно передать модулю kvm опцию allow_unsafe_assigned_interrupts=1. Можно или вручную загрузить модуль с помощью modprobe, или создать файл в /etc/modprobe.d/kvm.conf с содержанием и перезагрузить моудль.&lt;br /&gt;
&lt;br /&gt;
   options kvm allow_unsafe_assigned_interrupts=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь запускаем virt-manager и устанавливаем операционную систему в виртуальную машину как обычно. Если это Windows, то разумеется неплохо бы скачать virtio драйвера и установить их. После того как ОС установленна, можно выключить виртуальную машину и в virt-manager'e добавить нужные PCI устройства, в моем случае это 0000:01:00.0 и 0000:01:00.1. Теперь запускаем гостя снова. Для Windows нужно скачать драйвера с сайта AMD и установить их. &lt;br /&gt;
При установке драйверов Windows может легко уйти в BSOD, так что если не получилось с первого раза, стоит попробовать запустить гостя вновь и попробовать еще. После установки, разумеется нужно будет перезапустить виртуальную машину.&lt;br /&gt;
* На данный момент, kvm при повторном запуске гостя с проброшенной видеокартой вешает всю систему, поэтому, если вы выключили виртуалку, то придется так же перезагружать весь компьютер.&lt;br /&gt;
Теперь, после старта консоль виртуальной машины отключится после загрузки драйвера видеокарты, в случае Windows 7 там остается картинка &amp;quot;Starting Windows&amp;quot;, но само изображение должно уже выводится на проброшенную видеокарту. Хотя на коносль и не будет выводится изображение, тем не менее она будет передавать данные от устройств ввода и можно будет управлять гостем с клавиатуры и мыши как обычную виртуалку.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
XEN&lt;br /&gt;
&lt;br /&gt;
Сначала, разумеется, нужно поставить ксен из репозитория дистрибутива.&lt;br /&gt;
&lt;br /&gt;
В отличие от kvm, здесь не нужно никаких дополнительных костылей.&lt;br /&gt;
&lt;br /&gt;
Пример конфигурационного файла, который использовался у меня:&lt;br /&gt;
&lt;br /&gt;
 kernel = &amp;quot;hvmloader&amp;quot;&lt;br /&gt;
 builder='hvm'&lt;br /&gt;
 memory = 3096&lt;br /&gt;
 name = &amp;quot;win7_x64&amp;quot;&lt;br /&gt;
 vcpus=3&lt;br /&gt;
 pae=1&lt;br /&gt;
 acpi=1&lt;br /&gt;
 apic=1&lt;br /&gt;
 vif = [ 'bridge=xenbr0' ]&lt;br /&gt;
 disk = [ &lt;br /&gt;
 'phy:/dev/md0,hda,w',&lt;br /&gt;
 'file:/var/lib/libvirt/images/win7_x64_n_u.iso,hdb:cdrom,r'&lt;br /&gt;
 ]&lt;br /&gt;
 xen_platform_pci=1&lt;br /&gt;
 viridian=1&lt;br /&gt;
 on_poweroff = 'destroy'&lt;br /&gt;
 on_reboot   = 'restart'&lt;br /&gt;
 on_crash    = 'destroy'&lt;br /&gt;
 device_model = 'qemu-dm'&lt;br /&gt;
 boot='c'&lt;br /&gt;
 sdl=0&lt;br /&gt;
 vnc=1&lt;br /&gt;
 vncconsole=0&lt;br /&gt;
 stdvga=1&lt;br /&gt;
 serial='pty'&lt;br /&gt;
 pci = ['01:00.0', '01:00.1']&lt;br /&gt;
 gfx_passthru=0&lt;br /&gt;
 usbdevice=&amp;quot;tablet&amp;quot;      &lt;br /&gt;
&lt;br /&gt;
В данном случае, в качестве диска для виртуальной машины использовался mdraid массив /dev/md0, если вы хотите использовать образ в виде файла, то в параметре disk, вместо phy:/dev/md0 нужно написать tap:aio:/path/to/file или просто file:/path/to/file&lt;br /&gt;
&lt;br /&gt;
параметр boot говорит xen'у с чего грузиться, &amp;quot;c&amp;quot; - грузиться с диска, &amp;quot;d&amp;quot; - с cdrom'а, так что вначале вам придется поставить там d, чтобы установить ОС.&lt;br /&gt;
&lt;br /&gt;
После того, как поставите нужные параметры, конфиг надо куда нибудь сохранить.&lt;br /&gt;
&lt;br /&gt;
Собственно старт виртуальной машины:&lt;br /&gt;
 xm create /path/to/vmconfig&lt;br /&gt;
&lt;br /&gt;
А для ее управления можно использовать vncviewer, запущенный от обычного пользователя&lt;br /&gt;
 vncviewer :0&lt;br /&gt;
&lt;br /&gt;
Как и в случае с kvm, если вы ставите Windows, то нужно скачать паравиртуальные драйвера для Xen (GPLPV) и драйвер Catalyst для проброшенной видеокарты. &lt;br /&gt;
* так же как и с kvm, установка драйверов запросто может отправить Windows в BSOD, судя по моему опыту, драйвера устанавливаются полностью только раза с третьего.&lt;br /&gt;
После того как все установленно, нужно, разумеется перезагрузить гостя. Поведение будет такое же как и в случае с kvm, т.е. на vnc консоли замрет изображение, но события от устройств ввода она будет передавать гостю. Изображение с виртуальной машины должно передаваться на проброшенную видеокарту.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://ompldr.org/vZWVtbQ/fzu1ts3xw5uk.jpg '''Ох, это было чертовски интересно !'''] TODO: Проблема со звуком, Устройства ввода, FLR, Отжать устройство обратно из виртуалки, Ну по фиксы по мелочи.&lt;/div&gt;</summary>
		<author><name>lor&gt;Valman</name></author>
	</entry>
</feed>