Как я могу изменить архитектуру машины Qemu KVM с 440fx на q35 с помощью virsh edit или virt-manager?

Вопрос или проблема

Все еще пытаюсь настроить пропускной режим 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

  1. Откройте конфигурационный файл виртуальной машины:

    virsh edit Win7enterprise32bit
  2. Измените строку, которая определяет тип машины, с:

    <type arch="i686" machine="pc-i440fx-2.1">hvm</type>

    на:

    <type arch="i686" machine="pc-q35">hvm</type>
  3. Измените контроллер PCI на PCIe:

    Замените строку с контроллером:

    <controller type="pci" index="0" model="pci-root"/>

    на:

    <controller type="pcie" index="0" model="pcie-root"/>
  4. Удалите или измените параметры всех устройств, содержащих address с bus="0x00". Например, строки, содержащие:

    <address type="pci" domain='0x0000' bus="0x00" slot="..."/>

    могут быть изменены или полностью удалены, поскольку Q35 использует для этого PCI Express.

  5. Удалите контроллеры USB и IDE, так как они могут вызывать проблемы, когда используются с архитектурой Q35. Это сделать можете следующим образом:

    Удалите одну или обе следующие секции:

    <controller type="usb" index='0'/>
    <controller type="ide" index='0'/>
  6. Сохраните изменения и выйдите из редактора.

Используя virt-manager

  1. Откройте virt-manager и выберите вашу виртуальную машину.
  2. Кликните правой кнопкой мыши и выберите "Открыть".
  3. Перейдите в настройки виртуальной машины, выберите вкладку Overview.
  4. В секции Architecture измените тип машины на pc-q35.
  5. Перейдите к настройкам сетевых интерфейсов и удалите все параметры, зависящие от PCI.
  6. Сохраните изменения.

Шаг 3: Проверка и запуск виртуальной машины

После того как вы изменили конфигурацию, запустите виртуальную машину:

virsh start Win7enterprise32bit

Если всё прошло успешно, ваша виртуальная машина должна запуститься с новой архитектурой.

Возможные ошибки

Если вы получите сообщение об ошибке типа "PCI Bridges not supported", убедитесь, что вы полностью удалили все устройства с параметрами address, поскольку Q35 требует использования архитектуры PCIe. Если проблема остается, рассмотрите возможность обновления QEMU до более новой версии, так как в старых версиях могут быть ограничения по поддерживаемым функциям.

Заключение

Изменение архитектуры виртуальной машины является важным шагом в оптимизации производительности и повышения совместимости с современными устройствами, такими как видеокарты. Следуя вышеописанным шагам, вы сможете успешно перейти с pc-i440fx на pc-q35, что позволит улучшить работу системы и расширить её возможности.

Оцените материал
Добавить комментарий

Капча загружается...