Har nu kommit igång, men landade i Bazzite istället, då det fungerade bättre "out of the box" för en "HTPC VM".
Det var ett riktigt djävulskap att få Unraid att släppa GPU:n. Det fungerade inte alls med VFIO passthrough från boot, utan hur jag än gjorde visade den bara Unraids bootloader-skärm (kör ett RX 9070 + Intels iGPU). Allt var korrekt i BIOS med iGPU:n vald som primary, provade tom med en HDMI dummy utan framgång.
Slutade med att jag fick använda detta script jag hittade på reddit/moddade lite för att släppa GPU:n efter att Unraid startat istället för att försöka göra det direkt vid boot, och sedan starta Bazzite-maskinen efteråt, så att den får lägga beslag på grafikkortet. Vet inte om Proxmox kanske varit bättre för ändamålet, eller om samma problem uppenbarat sig där (?). Misstänker att det mer är ett BIOS-problem.
Lämna över GPU:n till VM (GFX_ID och AUD_ID är naturligtvis unikt för varje konfiguration etc):
Kod:
#!/bin/bash
# IDs for RX 9070
GFX_ID="1002:7550"
AUD_ID="1002:ab40"
# 1. Unbind from AMDGPU driver (Steal the card)
echo "Unbinding GPU from amdgpu..."
echo "0000:04:00.0" > /sys/bus/pci/drivers/amdgpu/unbind
echo "0000:04:00.1" > /sys/bus/pci/drivers/snd_hda_intel/unbind
# 2. Wait for kernel release
sleep 2
# 3. Bind to VFIO (Lock the card)
echo "Binding GPU to VFIO..."
echo $GFX_ID > /sys/bus/pci/drivers/vfio-pci/new_id
echo $AUD_ID > /sys/bus/pci/drivers/vfio-pci/new_id
# 4. CRITICAL PAUSE: Wait for VM Manager (Libvirt) to be ready
echo "Waiting for VM Manager to initialize..."
sleep 30
# 5. Launch the VM
echo "Starting CachyOS..."
virsh start "Bazzite"
VM-konfiguration optimerad för spel/bare metal:
Kod:
<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='1' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>Bazzite</name>
<uuid>0acb901a-77dd-68a2-7462-f613fa451754</uuid>
<metadata>
<vmtemplate xmlns="http://unraid" name="Linux" iconold="linux.png" icon="steamos.png" os="linux" webui="" storage="default"/>
</metadata>
<memory unit='KiB'>33554432</memory>
<currentMemory unit='KiB'>33554432</currentMemory>
<memoryBacking>
<nosharepages/>
<locked/>
</memoryBacking>
<vcpu placement='static'>6</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
<vcpupin vcpu='4' cpuset='4'/>
<vcpupin vcpu='5' cpuset='5'/>
<emulatorpin cpuset='12-13'/>
</cputune>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-q35-9.2'>hvm</type>
<loader readonly='yes' type='pflash' format='raw'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
<nvram format='raw'>/etc/libvirt/qemu/nvram/0acb901a-77dd-68a2-7462-f613fa451754_VARS-pure-efi.fd</nvram>
</os>
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<synic state='on'/>
<stimer state='on'/>
<reset state='on'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
<ioapic driver='qemu'/>
</features>
<cpu mode='host-passthrough' check='none' migratable='on'>
<topology sockets='1' dies='1' clusters='1' cores='6' threads='1'/>
<cache mode='passthrough'/>
<maxphysaddr mode='passthrough' limit='39'/>
<feature policy='require' name='invtsc'/>
<feature policy='require' name='topoext'/>
</cpu>
<clock offset='utc'>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='kvmclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/local/sbin/qemu</emulator>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/mnt/user/isos/bazzite-deck-stable-amd64.iso' index='1'/>
<backingStore/>
<target dev='hda' bus='sata'/>
<readonly/>
<boot order='2'/>
<alias name='sata0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' 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='0x8'/>
<alias name='pci.1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='2' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='2' port='0x9'/>
<alias name='pci.2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='3' port='0xa'/>
<alias name='pci.3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='4' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='4' port='0xb'/>
<alias name='pci.4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
</controller>
<controller type='pci' index='5' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='5' port='0xc'/>
<alias name='pci.5'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
</controller>
<controller type='pci' index='6' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='6' port='0xd'/>
<alias name='pci.6'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>
</controller>
<controller type='pci' index='7' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='7' port='0xe'/>
<alias name='pci.7'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/>
</controller>
<controller type='virtio-serial' index='0'>
<alias name='virtio-serial0'/>
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:a2:c2:9c'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio-net'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/0'/>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/0'>
<source path='/dev/pts/0'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<channel type='unix'>
<source mode='bind' path='/run/libvirt/qemu/channel/1-Bazzite/org.qemu.guest_agent.0'/>
<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='mouse' bus='ps2'>
<alias name='input0'/>
</input>
<input type='keyboard' bus='ps2'>
<alias name='input1'/>
</input>
<audio id='1' type='none'/>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev0'/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0' multifunction='on'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
</source>
<alias name='hostdev1'/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x1'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x83' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev2'/>
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x87' slot='0x00' function='0x0'/>
</source>
<boot order='1'/>
<alias name='hostdev3'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</hostdev>
<watchdog model='itco' action='reset'>
<alias name='watchdog0'/>
</watchdog>
<memballoon model='none'/>
</devices>
<seclabel type='dynamic' model='dac' relabel='yes'>
<label>+0:+100</label>
<imagelabel>+0:+100</imagelabel>
</seclabel>
<qemu:commandline>
<qemu:arg value='-fw_cfg'/>
<qemu:arg value='name=opt/ovmf/X-PciMmio64Mb,string=65536'/>
</qemu:commandline>
</domain>
Här är flaggorna jag kör med i etc/enviroment på Bazzite för att optimera för bästa prestanda (flaggor för kommande Mesa 26 som påstås förbättra RT_prestandan ordentligt är redan på plats). Jag bytte också scheduler till LAVD.
Jag flashade om mitt RX9070 med en 9070XT-ROM, så det körs i 300W, och undervoltade -50mv. Får med den Intel 245K som sitter i NAS:en följande resultat med "Proton Experimental" vald i Steam i Wukongs benchmark:
Här är resultatet från min workstation med en X3DCPU i samma upplösning (WQHD) och med samma settings:
Jag testade förresten också snabbt att jämföra mot det 9070XT som sitter in min workstation. Diffen mellan 9070 flashat med 9070XT firmware och 9070XT var enbart 4-5% på Windows 
Det verkar som prestandan är helt OK/diffar mycket lite från Windows trots att den körs i en VM med alla settings ovan. Tyvärr är RT-prestandan riktigt dålig på Linux (väntar på Mesa 26 som påstås förbättra prestandan rejält). I Cyberpunk får jag 30-40% sämre resultat mot vad kortet presterar i Windows så fort jag aktiverar RT, utan RT är det däremot jämbördigt. Alla äldre titlar utan RT flyter riktigt fint och har inget stutter alls.
I övrigt fungerar nu allt som tänkt. Det är helt klart enklast om man håller sig till titlar som finns på Steam, annars får man sitta och greja med Wine-inställningar i Lutris för varje sak man skall köra, vilket var rätt drygt. I Steam är det bara plug 'n play. Återstår bara att testa Steamlink till andra enheter och se hur spelströmningen fungerar.
Edit: Vad gäller strömförbrukningen i idle ser det ut så här, ligger runt 60W utan några HDD.s aktiva. Har ett spel aktivt på maskinen just nu, men använder Decky i Steam med en plugin som heter "Pause Games", som man kan ställa in att frysa spel när man aktiverar Steam Overlay, så GPU:n och CPU:n varvar ned. Visade sig fungera utmärkt: