Вопрос или проблема
Все еще пытаюсь настроить пропускной режим GPU и решил сменить тип машины с устаревшего 440fx на q35, то есть pc-q35, но когда я делаю virsh edit в конфигурации, он отказывается сохранять, говоря “PCI Bridges not supported”… по текущему бинарному файлу qemu. Что мне нужно исправить/изменить в xml файле виртуальной машины?
После некоторых исследований кажется, что q35 позволяет только PCIexpress PCIe, а не PCI, но я не знаю, что изменить в моем xml файле, чтобы virsh перестал жаловаться и принял изменение с 440fx на q35.
Это на Debian Jessie: uname -a
Linux vmserver 3.16.0-customvmkernel #1 SMP Sun Sep 28 00:34:42 PDT 2014 x86_64 GNU/Linux
kvm –version
QEMU emulator version 2.1.0 (Debian 2.1+dfsg-4)
Вот мой текущий файл виртуальной машины с 440fx, который я хочу изменить на q35:
<domain type="kvm" xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>Win7enterprise32bit</name>
<uuid>77599af9-35a3-45e1-9fce-74304f7d7a9c</uuid>
<memory unit="KiB">1048576</memory>
<currentMemory unit="KiB">1048576</currentMemory>
<vcpu placement="static">1</vcpu>
<os>
<type arch="i686" machine="pc-i440fx-2.1">hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset="localtime"/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type="file" device="disk">
<driver name="qemu" type="vmdk"/>
<source file="/mount/ssd/VirtWin7-clone.vmdk"/>
<target dev='vdb' bus="virtio"/>
<address type="pci" domain='0x0000' bus="0x00" slot="0x08" function='0x0'/>
</disk>
<controller type="usb" index='0'>
<address type="pci" domain='0x0000' bus="0x00" slot="0x01" function='0x2'/>
</controller>
<controller type="ide" index='0'>
<address type="pci" domain='0x0000' bus="0x00" slot="0x01" function='0x1'/>
</controller>
<controller type="pci" index='0' model="pci-root"/>
<interface type="bridge">
<mac address="52:54:00:9e:f5:11"/>
<source bridge="br0"/>
<model type="rtl8139"/>
<address type="pci" domain='0x0000' bus="0x00" slot="0x03" function='0x0'/>
</interface>
<serial type="pty">
<target port="0"/>
</serial>
<console type="pty">
<target type="serial" port="0"/>
</console>
<input type="tablet" bus="usb"/>
<input type="mouse" bus="ps2"/>
<input type="keyboard" bus="ps2"/>
<graphics type="vnc" port="-1" autoport="yes"/>
<sound model="ac97">
<address type="pci" domain='0x0000' bus="0x00" slot="0x04" function='0x0'/>
</sound>
<video>
<model type="cirrus" vram='9216' heads="1"/>
<address type="pci" domain='0x0000' bus="0x00" slot="0x02" function='0x0'/>
</video>
<memballoon model="virtio">
<address type="pci" domain='0x0000' bus="0x00" slot="0x05" function='0x0'/>
</memballoon>
</devices>
<qemu:commandline>
<qemu:arg value="-nodefaults"/>
<qemu:arg value="-vga"/>
<qemu:arg value="none"/>
<qemu:arg value="-device"/>
<qemu:arg value="ioh3420,bus=pci.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1"/>
<qemu:arg value="-device"/>
<qemu:arg value="vfio-pci,host=04:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on,rombar=0"/>
<qemu:arg value="-device"/>
<qemu:arg value="vfio-pci,host=04:00.1,bus=root.1,addr=00.1"/>
<qemu:arg value="-bios"/>
<qemu:arg value="/usr/share/seabios/bios.bin"/>
<qemu:arg value="-cpu"/>
<qemu:arg value="host,kvm=off"/>
</qemu:commandline>
</domain>
Последний virt-manager (1.1.0) поддерживает установку архитектуры при создании ВМ. Вы не можете изменить ее позже.
С помощью virsh edit
я немного догадываюсь, но попробовал бы удалить контроллер PCI и все параметры, связанные с шиной (например, <address />
. И изменить
<type arch="i686" machine="pc-i440fx-2.1">hvm</type>
на
<type arch="i686" machine="pc-q35">hvm</type>
ОNormally я бы предложил это в комментарии, так как это больше догадка, но это слишком долго. Я удалю это, если это не сработает.
кстати. Эти <qemu:arg />
в конце могут также вызывать проблемы. Если вы столкнетесь с проблемами, попробуйте удалить их тоже.
Существует патч для основной проблемы (в том, что QEMU не позволит вам связаться с корневой шиной PCIe, что необходимо для Windows-гостей на Q35):
http://lists.nongnu.org/archive/html/qemu-devel/2015-10/msg05385.html
Я только что сделал это сегодня – практически так же, как описал ‘Fox’, только изменил запись контроллера pci, а не удалял ее – изменив ‘pci-root’ на ‘pcie-root’
Затем он начнет жаловаться на любое значение с параметрами шины – я думаю, вы можете оставить элемент, но удалить спецификацию. Мне также пришлось удалить записи, связанные с USB
(интегрированный контроллер piix3 требует шину PCI или что-то в этом роде).
Не уверен, все ли еще пытаетесь это сделать – но я подумал, что стоит выложить это для тех, кто ищет это.
Попробуйте вместо pc-i440fx-2.1 выше
Смотрите пример на https://gist.github.com/lyarbean/7036986
Я бы запустил qemu вручную с -M q35 или -M ?, чтобы проверить, поддерживает ли установленная версия это
надеюсь, это поможет
Сначала нужно проверить, поддерживает ли qemu-kvm q35,
qemu 2.x поддерживает Q35, вы можете проверить поддержку машины, используя
1. [root@localhost ~]# /usr/libexec/qemu-kvm -machine help
Поддерживаемые машины:
pc RHEL 7.6.0 ПК (i440FX + PIIX, 1996) (псевдоним pc-i440fx-rhel7.6.0)
pc-i440fx-rhel7.6.0 RHEL 7.6.0 ПК (i440FX + PIIX, 1996) (умолчание)
pc-i440fx-rhel7.5.0 RHEL 7.5.0 ПК (i440FX + PIIX, 1996)
pc-i440fx-rhel7.4.0 RHEL 7.4.0 ПК (i440FX + PIIX, 1996)
pc-i440fx-rhel7.3.0 RHEL 7.3.0 ПК (i440FX + PIIX, 1996)
pc-i440fx-rhel7.2.0 RHEL 7.2.0 ПК (i440FX + PIIX, 1996)
rhel6.1.0 RHEL 6.1.0 ПК
rhel6.0.0 RHEL 6.0.0 ПК
q35 RHEL-7.6.0 ПК (Q35 + ICH9, 2009) (псевдоним pc-q35-rhel7.6.0)
pc-q35-rhel7.6.0 RHEL-7.6.0 ПК (Q35 + ICH9, 2009)
pc-q35-rhel7.5.0 RHEL-7.5.0 ПК (Q35 + ICH9, 2009)
pc-q35-rhel7.4.0 RHEL-7.4.0 ПК (Q35 + ICH9, 2009)
pc-q35-rhel7.3.0 RHEL-7.3.0 ПК (Q35 + ICH9, 2009)
none пустая машина
#используйте virsh edit, чтобы изменить тип машины из списка выше
hvm
если использовать командную строку
/usr/bin/qemu-system-x86_64 -machine q35,kernel-irqchip=split,accel=kvm -smp 4 -m 2G -device intel-iommu,intremap=on,caching-mode=on -nographic /home/fastlinq/centos-7.8.qcow2
Ответ или решение
Изменение архитектуры виртуальной машины QEMU KVM с pc-i440fx
на pc-q35
может стать критическим шагом для правильной настройki GPU passthrough. Ниже приведены детальные инструкции по изменению конфигурации виртуальной машины с использованием virsh edit
и virt-manager
.
Шаг 1: Подготовка к изменениям
Перед тем как выполнять изменения, убедитесь, что ваша версия QEMU поддерживает q35
. Для этого выполните следующую команду в терминале:
/usr/libexec/qemu-kvm -machine help
Убедитесь, что в списке поддерживаемых машин есть q35
.
Шаг 2: Редактирование XML-файла виртуальной машины
Используя virsh edit
-
Откройте конфигурационный файл виртуальной машины:
virsh edit Win7enterprise32bit
-
Измените строку, которая определяет тип машины, с:
<type arch="i686" machine="pc-i440fx-2.1">hvm</type>
на:
<type arch="i686" machine="pc-q35">hvm</type>
-
Измените контроллер PCI на PCIe:
Замените строку с контроллером:
<controller type="pci" index="0" model="pci-root"/>
на:
<controller type="pcie" index="0" model="pcie-root"/>
-
Удалите или измените параметры всех устройств, содержащих
address
сbus="0x00"
. Например, строки, содержащие:<address type="pci" domain='0x0000' bus="0x00" slot="..."/>
могут быть изменены или полностью удалены, поскольку Q35 использует для этого PCI Express.
-
Удалите контроллеры USB и IDE, так как они могут вызывать проблемы, когда используются с архитектурой Q35. Это сделать можете следующим образом:
Удалите одну или обе следующие секции:
<controller type="usb" index='0'/> <controller type="ide" index='0'/>
-
Сохраните изменения и выйдите из редактора.
Используя virt-manager
- Откройте
virt-manager
и выберите вашу виртуальную машину. - Кликните правой кнопкой мыши и выберите "Открыть".
- Перейдите в настройки виртуальной машины, выберите вкладку
Overview
. - В секции
Architecture
измените тип машины наpc-q35
. - Перейдите к настройкам сетевых интерфейсов и удалите все параметры, зависящие от PCI.
- Сохраните изменения.
Шаг 3: Проверка и запуск виртуальной машины
После того как вы изменили конфигурацию, запустите виртуальную машину:
virsh start Win7enterprise32bit
Если всё прошло успешно, ваша виртуальная машина должна запуститься с новой архитектурой.
Возможные ошибки
Если вы получите сообщение об ошибке типа "PCI Bridges not supported", убедитесь, что вы полностью удалили все устройства с параметрами address
, поскольку Q35 требует использования архитектуры PCIe. Если проблема остается, рассмотрите возможность обновления QEMU до более новой версии, так как в старых версиях могут быть ограничения по поддерживаемым функциям.
Заключение
Изменение архитектуры виртуальной машины является важным шагом в оптимизации производительности и повышения совместимости с современными устройствами, такими как видеокарты. Следуя вышеописанным шагам, вы сможете успешно перейти с pc-i440fx
на pc-q35
, что позволит улучшить работу системы и расширить её возможности.