LINUX.ORG.RU
ФорумAdmin

i440fx vs q35 on qemu-kvm

 , , , ,


0

1

Windows 2008 R2 x64 в простое на чипсете i440fx потребляет 10% ядра ноды, при том что на q35 потребление 3-4%. В обоих случаях по мнению инстанса потребление CPU = 0.

Под нагрузкой на i440fx стабильно на 5-7% загрузка выше. Такое ощущение, что он на эти 5-7% молотит какой-то «пустой цикл». Проблема только с Windows 2008. 2012 и 2016 - ведут себя одинаково скромно на обоих чипсетах.

Использовал бы q35, но Windows 2008 при первой загрузке на новом инстансе падает в BSOD в двух случаях из десяти. 2012 и 2016 на q35 тоже падают, но реже.

Драйверы стоят virtio-win-0.1.141 stable

q35 устанавливается через дописывание в /etc/nova/nova.conf

hw_machine_type = x86_64=q35

Нода Centos 7 Openstack Rocky QEMU/KVM

Сейчас выложу конфиги...

UPD: Собственно вопрос: Что изменить чтобы не жрало лишнего CPU на i440fx? Что изменить чтобы не падало в BSOD на q35?

Deleted

Последнее исправление: GoKerze (всего исправлений: 6)

i440fx

$ virsh dumpxml instance-00000fc9
<domain type='kvm' id='65'>
  <name>instance-00000fc9</name>
  <uuid>3270ec07-dfbe-41b8-b47a-be27863c3af6</uuid>
  <metadata>
    <nova:instance xmlns:nova="http://openstack.org/xmlns/libvirt/nova/1.0">
      <nova:package version="18.1.0-1.el7"/>
      <nova:name>test-i440fx-win-2008</nova:name>
      <nova:creationTime>2019-05-01 07:23:37</nova:creationTime>
      <nova:flavor name="vps-8">
        <nova:memory>8192</nova:memory>
        <nova:disk>120</nova:disk>
        <nova:swap>0</nova:swap>
        <nova:ephemeral>0</nova:ephemeral>
        <nova:vcpus>4</nova:vcpus>
      </nova:flavor>
      <nova:owner>
        <nova:user uuid="6d453e2b03b54dcfb355c47388b3e3bd">admin</nova:user>
        <nova:project uuid="c4e0dd0405dd44b89254d838adec7c6f">admin</nova:project>
      </nova:owner>
      <nova:root type="image" uuid="fe544451-25b9-4106-84d5-c444eba57695"/>
    </nova:instance>
  </metadata>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <cputune>
    <shares>4096</shares>
    <period>1000000</period>
    <quota>500000</quota>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <sysinfo type='smbios'>
    <system>
      <entry name='manufacturer'>RDO</entry>
      <entry name='product'>OpenStack Compute</entry>
      <entry name='version'>18.1.0-1.el7</entry>
      <entry name='serial'>2bf0ad48-7c83-49b7-826d-b0c4d30fa7ed</entry>
      <entry name='uuid'>3270ec07-dfbe-45b8-b47a-be27863c3af6</entry>
      <entry name='family'>Virtual Machine</entry>
    </system>
  </sysinfo>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type>
    <boot dev='hd'/>
    <smbios mode='sysinfo'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='custom' match='exact' check='full'>
    <model fallback='forbid'>Westmere-IBRS</model>
    <vendor>Intel</vendor>
    <topology sockets='4' cores='1' threads='1'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='pclmuldq'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='pcid'/>
    <feature policy='require' name='x2apic'/>
    <feature policy='require' name='tsc-deadline'/>
    <feature policy='require' name='hypervisor'/>
    <feature policy='require' name='arat'/>
    <feature policy='require' name='tsc_adjust'/>
    <feature policy='require' name='stibp'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='rdtscp'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
      <auth username='cinder'>
        <secret type='ceph' uuid='dce609b8-de3b-4ce1-aabc-3af4c5ecef49'/>
      </auth>
      <source protocol='rbd' name='vms/3270ec07-dfbe-45b8-b47a-be27863c3af6_disk'>
        <host name='10.88.1.1' port='6789'/>
        <host name='10.88.1.2' port='6789'/>
        <host name='10.88.1.3' port='6789'/>
      </source>
      <target dev='sda' bus='scsi'/>
      <iotune>
        <read_iops_sec>3000</read_iops_sec>
        <write_iops_sec>1000</write_iops_sec>
      </iotune>
      <alias name='scsi0-0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='scsi' index='0' model='virtio-scsi'>
      <alias name='scsi0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </controller>
    <controller type='usb' index='0' model='piix3-uhci'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
    </controller>
    <interface type='bridge'>
      <mac address='fa:16:3e:5b:87:df'/>
      <source bridge='brqdab56b80-c8'/>
      <bandwidth>
        <inbound average='3750'/>
        <outbound average='3750'/>
      </bandwidth>
      <target dev='tap0c0c93d7-3b'/>
      <model type='virtio'/>
      <mtu size='1500'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/5'/>
      <log file='/var/lib/nova/instances/3270ec07-dfbe-45b8-b47a-be27863c3af6/console.log' append='off'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/5'>
      <source path='/dev/pts/5'/>
      <log file='/var/lib/nova/instances/3270ec07-dfbe-45b8-b47a-be27863c3af6/console.log' append='off'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0.instance-00000fc9.sock'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input1'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
    </input>
    <graphics type='vnc' port='5905' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <stats period='10'/>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+107:+107</label>
    <imagelabel>+107:+107</imagelabel>
  </seclabel>
</domain>

Deleted
()

q35

$ virsh dumpxml instance-00000fc5
<domain type='kvm' id='61'>
  <name>instance-00000fc5</name>
  <uuid>bc344977-1d76-4090-b1c0-0bf36c094c46</uuid>
  /// Слишком большое сообщение ///
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <cputune>
    <shares>4096</shares>
    <period>1000000</period>
    <quota>500000</quota>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <sysinfo type='smbios'>
    <system>
      <entry name='manufacturer'>RDO</entry>
      <entry name='product'>OpenStack Compute</entry>
      <entry name='version'>18.1.0-1.el7</entry>
      <entry name='serial'>2bf0ad48-7c83-49b7-826d-b0c4d30fa7ed</entry>
      <entry name='uuid'>bc344977-1d76-4090-bcc0-0bf36c094c46</entry>
      <entry name='family'>Virtual Machine</entry>
    </system>
  </sysinfo>
  <os>
    <type arch='x86_64' machine='pc-q35-rhel7.6.0'>hvm</type>
    <boot dev='hd'/>
    <smbios mode='sysinfo'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='custom' match='exact' check='full'>
    <model fallback='forbid'>Westmere-IBRS</model>
    <vendor>Intel</vendor>
    <topology sockets='4' cores='1' threads='1'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='pclmuldq'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='pcid'/>
    <feature policy='require' name='x2apic'/>
    <feature policy='require' name='tsc-deadline'/>
    <feature policy='require' name='hypervisor'/>
    <feature policy='require' name='arat'/>
    <feature policy='require' name='tsc_adjust'/>
    <feature policy='require' name='stibp'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='rdtscp'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
      <auth username='cinder'>
        <secret type='ceph' uuid='dce609b8-de3b-4ce1-aabc-3af4c5ecef49'/>
      </auth>
      <source protocol='rbd' name='vms/bc344977-1d76-4090-bcc0-0bf36c094c46_disk'>
        <host name='10.88.1.1' port='6789'/>
        <host name='10.88.1.2' port='6789'/>
        <host name='10.88.1.3' port='6789'/>
      </source>
      <target dev='sda' bus='scsi'/>
      <iotune>
        <read_iops_sec>3000</read_iops_sec>
        <write_iops_sec>1000</write_iops_sec>
      </iotune>
      <alias name='scsi0-0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='scsi' index='0' model='virtio-scsi'>
      <alias name='scsi0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='usb' index='0' model='qemu-xhci'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <alias name='ide'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pcie.0'/>
    </controller>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x10'/>
      <alias name='pci.1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x11'/>
      <alias name='pci.2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x12'/>
      <alias name='pci.3'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x13'/>
      <alias name='pci.4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0x14'/>
      <alias name='pci.5'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0x15'/>
      <alias name='pci.6'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='fa:16:3e:f3:43:68'/>
      <source bridge='brqdab56b80-c8'/>
      <bandwidth>
        <inbound average='3750'/>
        <outbound average='3750'/>
      </bandwidth>
      <target dev='tapcc79d556-9e'/>
      <model type='virtio'/>
      <mtu size='1500'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/2'/>
      <log file='/var/lib/nova/instances/bc344977-1d76-4090-bcc0-0bf36c094c46/console.log' append='off'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/2'>
      <source path='/dev/pts/2'/>
      <log file='/var/lib/nova/instances/bc344977-1d76-4090-bcc0-0bf36c094c46/console.log' append='off'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/org.qemu.guest_agent.0.instance-00000fc5.sock'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input1'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
    </input>
    <graphics type='vnc' port='5901' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <stats period='10'/>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+107:+107</label>
    <imagelabel>+107:+107</imagelabel>
  </seclabel>
</domain>
Deleted
()

Не по теме, но вот так предлагают выбирать чипсет товарищи из unraid

The Machine type presented to your VM can be toggled between >QEMU's i440fx or Q35 chipsets

For Windows-based VMs, i440fx is the default setting and should >only be changed if you are having difficulty passing through a >PCI-based graphics card (this may prompt Windows to reactivate)

For Linux-based VMs, Q35 is the default setting and should not be >changed if passing through a GPU

https://wiki.unraid.net/UnRAID_6/VM_Management

Deleted
()

Использовал бы q35, но Windows 2008 при первой загрузке на новом инстансе падает в BSOD в двух случаях из десяти. 2012 и 2016 на q35 тоже падают, но реже.

У меня и 440fx и q35 работают стабильно, оставшиеся гостевые винды (2008r2) отлично работают, не падают.

Deleted
()

Надо включить фичи Hyper-V, например как это делает virt-manager.

Как-то тут мало всего:

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>

vvvvvvvv
()
Ответ на: комментарий от vvvvvvvv

Еще надо часики поправить, а то убегут или отстанут:

  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup' track='guest'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>

Так же рекомендую
  <cpu mode='host-passthrough'>

(если Haswell, надо отключить пару инструкций)
Отключение Memory Ballooning:
    <memballoon model='none'>
      <alias name='balloon0'/>
    </memballoon>

pekmop1024 ★★★★★
()

Пытаюсь воссоздать ситуацию на настольном ПК. Устанавливаю QEMU/KVM. Создаю виртуальную машину.

virt-install --connect qemu:///system --virt-type kvm \
	--name win2008 --vcpu 2 \
	--ram 2048 --memballoon model=virtio \
	--controller=scsi,model=virtio-scsi \
	--boot hd,menu=on \
	--disk device=disk,bus=scsi,discard=unmap,cache=writeback,size=16,format=raw,path=/var/lib/libvirt/images/win2008.raw \
	--network network=default,model=virtio \
	--graphics vnc --noautoconsole \
	--video qxl --channel spicevmc \
	--os-type=windows --os-variant=win2k8r2 \
	--machine=pc-q35-2.11 --arch=x86_64

Вопрос по параметру "--machine"

Где взять список этих machine type? От чего зависит доступность того или иного machine type?

На ноде используются следующие machine type: pc-q35-rhel7.6.0 и pc-i440fx-rhel7.6.0

Если я попробую использовать их на настольном ПК то virt-install выругается следующим образом:

ERROR    Хост не поддерживает домены kvm with machine 'pc-q35-rhel7.6.0' для виртуализации типа «hvm» (архитектура «x86_64»)
ERROR    Хост не поддерживает домены kvm with machine 'pc-i440fx-rhel7.6.0' для виртуализации типа «hvm» (архитектура «x86_64»)
Deleted
()

Список допустимых значений для "--os-variant" можно получить командой «osinfo-query os»

Deleted
()

Список допустимых значений для "--machine"

virsh capabilities

Deleted
()

Держи нас в курсе, не останавливайся.

anonymous
()

На 440 нужно отключить usb-tablet

anonymous
()

ТС какой-то терпильный, ещё и выпилился из-за страха что работодатель узнает о его неадекватности раньше времени. Ну это как раз хорошо, мир станет чуточку чище.

anonymous
()

Без tablet не будет работать мышка в VNC

<input type='tablet' bus='usb'> <alias name='input0'/> <address type='usb' bus='0' port='1'/> </input>

anonymous
()

Знает кто как на q35 под Windows 2008 завести USB3 контроллер?

Windows 2012 видит два устройства:

USB Root Hub (xHCI)
USB\ROOT_HUB30&VID1B36&PID000D&REV0001
USB\ROOT_HUB30&VID1B36&PID000D
USB\ROOT_HUB30

USB xHCI Compliant Host Controller
PCI\VEN_1B36&DEV_000D&SUBSYS_11001AF4&REV_01
PCI\VEN_1B36&DEV_000D&SUBSYS_11001AF4
PCI\VEN_1B36&DEV_000D&CC_0C0330
PCI\VEN_1B36&DEV_000D&CC_0C03

Windows 2008 видит одно устройство. И драйвер из коробки не ставит. По кодам это тот самый «USB xHCI Compliant Host Controller».

Universal Serial Bus (USB) Controller
PCI\VEN_1B36&DEV_000D&SUBSYS_11001AF4&REV_01
PCI\VEN_1B36&DEV_000D&SUBSYS_11001AF4
PCI\VEN_1B36&DEV_000D&CC_0C0330
PCI\VEN_1B36&DEV_000D&CC_0C03

Драйверы от Inel, которые легко гуглятся - не встают. Вот такой оффтопик, да.

anonymous
()

Существует ли в природе другой драйвер для чипсета q35, кроме Microsoft?

Такой драйвер установила Windows 2012 R2:

Driver
Intel(R) G33/G31/P35/P31 Express Chipset Processor to I/O Controller - 29C0
Microsoft
6/21/2006
6.3.9600.18939
Hardware Ids
PCI\VEN_8086&DEV_29C0&SUBSYS_11001AF4&REV_00
PCI\VEN_8086&DEV_29C0&SUBSYS_11001AF4
PCI\VEN_8086&DEV_29C0&CC_060000
PCI\VEN_8086&DEV_29C0&CC_0600
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.