KVM Windows 10 гость без SMT / Hyperthreading

KVM (виртуальная машина ядра) Ubuntu 18.04 MSI MPG x570 Gaming Plus Ryzen 5 3600 Nvidia RTX 2070 Super

Я использую пропускную способность графического процессора, цель этой настройки - дать мне оптимальную производительность в играх, так как а также поддержание способности использовать Ubuntu в качестве основной платформы. Это даст мне возможность дистро-хоп и проверить свои навыки на более сложных дистрибутивах без использования ядерных зарядов и мощения.

Проблема, с которой я столкнулся, с которой у меня проблемы, заключается в том, что мой гость Windows 10, который я буду использовать в основном для игр, не видит какой-либо гиперпоточности, я смотрю на это, потому что Я заметил, что частота кадров падает на 50-70 кадров в секунду ниже, чем до виртуализации, и большие потери кадров, которые почти проявляются как всплески с минимальной задержкой, я знаю, что у меня будет потеря производительности, но я хочу сделать все возможное для максимальной производительности.

Когда я использовал контейнер по умолчанию qemu, я получал ошибки после изменения настроек в xml-файле с надписью

qemu-system-x86_64: AMD CPU doesn't support hyperthreading. Please configure -smp options properly.

Эта ошибка исчезла при обновлении до qemu 4.1.0, хотя в моей гостевой системе Windows я могу подтвердить, что гиперпоточность не видна с помощью команд

wmic 
CPU GET NumberOfCores,NumberOfLogicalProcessors /Format:List

Количество совпадающих ядер и логических процессоров, что указывает на то, что Windows видит все потоки как настоящие ядра.

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

Первоначально я следовал этому руководству

После этого все мои дальнейшие правки касались исправления кода ошибки 43. и затем в основном закрепления процессора.

Моя материнская плата имеет 3 отдельных контроллера sata, поэтому у меня один из контроллеров sata (2 накопителя, ssd и hdd) пропущен напрямую. Графический процессор пропускается напрямую, многочисленные USB-порты пропускаются напрямую. На моем хосте установлена ​​карта Nvidia Quadro емкостью 2 ГБ.

Любое направление будет очень полезным.

XML Config file

<domain type='kvm'>
  <name>Windows10</name>
  <uuid>de7e92c8-cde1-4722-a20d-a3c791db265e</uuid>
  <memory unit='KiB'>12386304</memory>
  <currentMemory unit='KiB'>12386304</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <iothreads>4</iothreads>
  <cputune>
    <vcpupin vcpu='0' cpuset='4'/>
    <vcpupin vcpu='1' cpuset='5'/>
    <vcpupin vcpu='2' cpuset='6'/>
    <vcpupin vcpu='3' cpuset='7'/>
    <vcpupin vcpu='4' cpuset='8'/>
    <vcpupin vcpu='5' cpuset='9'/>
    <vcpupin vcpu='6' cpuset='10'/>
    <vcpupin vcpu='7' cpuset='11'/>
    <iothreadpin iothread='1' cpuset='4-5'/>
    <iothreadpin iothread='2' cpuset='6-7'/>
    <iothreadpin iothread='3' cpuset='8-9'/>
    <iothreadpin iothread='4' cpuset='10-11'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-bionic'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/Windows10_VARS.fd</nvram>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='1234567890ab'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none'>
    <topology sockets='1' cores='4' threads='2'/>
    <cache level='3' mode='emulate'/>
    <feature policy='require' name='topoext'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <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>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/terry/Downloads/Win10_1903_V1_English_x64.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/terry/.kvm/virtio/virtio-win-0.1.141.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:fb:32:91'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2d' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2d' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2d' slot='0x00' function='0x2'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2d' slot='0x00' function='0x3'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2a' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x2a' slot='0x00' function='0x3'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x26' slot='0x00' function='0x0'/>
      </source>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Исследования, которые я нашел и на которые ссылались в некоторой степени до сих пор, приведены ниже.

http://mathiashueber.com/cpu-pinning-on-amd-ryzen/#comments
https://www.reddit.com/r/VFIO/comments/9iukj5/whats_best_practice_for_ryzen_1800x_cpu_pinning/

Это утверждение так как numa уже включена в auto, что emulatorpin не нужен, поэтому я удалил emulatorpin из моего xml.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-Virtualization_Tuning_Optimization_Guide-NUMA-NUMA_and_libvirt#sect-Virtualization_Tuning_Optimization_Guide-NUMA-NUMA_and_libvirt-Using_emulatorpin



https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-numa-numa_and_libvirt

И я попробовал с моделью процессора Epyc, а также с моделью хоста с похожими результатами

0
задан 24 August 2019 в 21:16

1 ответ

Ну, я буквально выполнил мили в кругу вокруг моего ответа.

, Поскольку в моем первоначальном руководстве говорится у основания создания раздела qemu 3.1

When this is done you can later use:

<os>
  ...
  <type arch='x86_64' machine='pc-q35-3.1'>hvm</type>
  ...
</os>
and

<devices>
  ...
  <emulator>/usr/local/bin/qemu3.1-system-x86_64</emulator>
  ...
</devices>

, я не понял то, что означал этот материал, хотя, таким образом, тип машины, имеющий "3.1" в конце, выделился, поскольку он устанавливал версию 3.1 после большего количества рытья вокруг Интернета, я нашел людей, говорящих, что это - исправленная версия для начальной загрузки, она не применена по умолчанию, ни перечислена в виртуальном менеджере. Я не использую q35, но путем выполнения

/usr/local/bin/qemu-system-x86_64 -machine help

Это дало мне поддерживаемые типы машины, где я видел мой и использовал соответствующие 4.1.

следующая часть этого указывает эмулятор. Мы теперь хотим, чтобы новые загруженные 4,1 qemu-system-x86_64 эмулировали. Поэтому это должно быть определено также.

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

я надеюсь, что это может помочь другим в будущем. Goodluck

0
ответ дан 23 October 2019 в 04:42

Другие вопросы по тегам:

Похожие вопросы: