PULSE_SERVER=127.0.0.1 \
QEMU_AUDIO_DAC_FIXED_FREQ=44100 \
QEMU_AUDIO_ADC_FIXED_FREQ=44100 \
QEMU_AUDIO_DRV=pa \
qemu-system-x86_64 \
-enable-kvm -m 16384 -M q35 \
-cpu Haswell,hv-time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff -smp 6 \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device piix4-ide,bus=pcie.0,id=ahci \
-device ide-hd,bus=ahci.0,drive=disk \
-device ich9-intel-hda,bus=pcie.0,addr=1b.0,id=sound0 \
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
-bios /usr/share/qemu/bios.bin \
-vnc none \
-drive file=/dev/virt/win7,id=disk,format=raw \
-net nic,model=rtl8139,macaddr=52:54:00:08:d9:75 \
-net tap,script=/home/user/bin/asset/qemu-ifup \
-device pci-assign,host=00:1a.0,bus=pcie.0,addr=1a.0 \
-usb \
-usbdevice host:044f:0404 $(: joystick) \
-usbdevice host:044f:0402 $(: joystick) \
-usbdevice host:06a3:0764 $(: pedals) \
-usbdevice host:131d:0158 $(: TrackIR) \
-boot menu=on -vga none -no-hpet
разберём по частям:
PULSE_SERVER=127.0.0.1 # поскольку запуск скорее всего будет (как в моём случае) вне контекста сессии дбаса и pulseaudio, то чтобы был звук - указываем сервер пульсы как локальный. В моём случае это ещё необходимость гнать звук на эту машину по сети и в /etc/pulse/default.pa надо что-то типа
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1
QEMU_AUDIO_DAC_FIXED_FREQ=44100 \ # говорим qemu использовать частоты
QEMU_AUDIO_ADC_FIXED_FREQ=44100 \ # 44100 для звука
QEMU_AUDIO_DRV=pa \ # и драйвер pulseaudio в общем.
-enable-kvm -m 16384 -M q35 \ # включаем kvm в qemu и выделяю 16 гигов памяти (из 32-ух) на чипсете seabios q35.
-cpu Haswell,hv-time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff -smp 6 \ # даём виртуалке что-то типа CPU на базе haswell с некими Hyper-V (вендоприколы, ага), как их называют, enlightenment'ами. По-большому счёту для увеличения производительности нужен только hv-time (дефис или подчёркивание вроде как равнозначны), остальные hv_* не то чтобы нужны, но могут быть полезными. -smp 6 говорит что выделям 6 ядер (из восьми в моём случае).
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \ # выделяет PCI-E шину с айди root.1
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \ # устанавливает пробрасываемый VGA-адаптер (важны параметры multifunction=on и x-vga=on) на хостовой шине 01:00.0. Поддевайсы типа аудиокарты на видеокарте можно не пробрасывать, достаточно иметь их на vfio-pci.
-device piix4-ide,bus=pcie.0,id=ahci \ # добавляем ide-шину для виртуального жёсткого диска
-device ide-hd,bus=ahci.0,drive=disk \ # и вешаем на неё диск с id=disk (укажем впоследствии)
-device ich9-intel-hda,bus=pcie.0,addr=1b.0,id=sound0 \ # создаёт и размещает на pcie-шине
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \ # стаднартную intel-hda-duplex аудиокарту, которую будет видеть виртуалка
-bios /usr/share/qemu/bios.bin \ # указываем путь до seabios'а
-vnc none \ # отключаем vnc-сервер, встроенный в qemu
-drive file=/dev/virt/win7,id=disk,format=raw \ # указываем некий девайс (в моём случае - партитиция lvm целиком) в качестве диска, под id=disk для ide-шины, что указывал и ранее
-net nic,model=rtl8139,macaddr=52:54:00:08:d9:75 \ # создаём некую генериковую сетевуху с определённым мак-адересом
-net tap,script=/home/user/bin/asset/qemu-ifup \ # и указываем ifup-скрипт для этой сетевухи. Выглядит он примерно так: ip link set $1 up promisc on; brctl addif br0 $1; sleep 2. br0 бридж разумеется должен быть сконфигурирован до запуска скрипта.
-device pci-assign,host=00:1a.0,bus=pcie.0,addr=1a.0 \ # вешаем один из USB-контроллереров на pcie.0 шину виртуалки.
-usb \ # включаем давно всем известный usb-passthrough
-usbdevice host:044f:0404 $(: joystick) \ # и кидаем в виртуалку
-usbdevice host:044f:0402 $(: joystick) \ # пачку USB-устройств.
-usbdevice host:06a3:0764 $(: pedals) \ # смотреть их айдишники можно в
-usbdevice host:131d:0158 $(: TrackIR) \ # lsusb. штуки в $(: строках) -- просто хитрый способ сделать инлайн-коментарий на баше.
-boot menu=on -vga none -no-hpet # включем загрузочное меню seabios'а, отключаем эмуляцию vga-дисплея (у нас и так есть видеокарта) и выключаем глючный HPET qemu (его роль играть будет hv-time в опциях CPU).
Вот собственно и всё. Так, при помощи изоленты, молотка и зубила можно из буханки хлеба... ой. Ну вы поняли.
В моём случае, чего я не мог достигнуть просто поставив винду: это стеап дал возможность гнать в вендовую машину звук по сети через протоклы pulseaudio с минимальной латенси (виндовая версия пока ещё очень сыра и тормозит на 200 мс минимум) и использовать шаредную LVM-партитицию для нужд венды вместо живого разрозненого железа. Ну а так же такой сетап не лишил меня второго потенциального монитора на IGD с линуксом на том же хосте.
P.S. Пишу с ноутбука.
P.P.S. Вот честно, отправлю и пойду спать. Честно-честно.