Configuring a headless Linux OS installation strictly for virtualizing then managing a Windows installation?

I was having similar problems with Proxmox, Windows guests, NVidia GPUs and Code 43 errors. I finally decided to zig instead of zag, and installed Windows Server 2012 R2 in my VM. The Windows 8.1 driver worked out of the box with my GTX 1050 Ti, no code 43 errors. The downside is some audio distortion in the 2012R2 VM I can’t quite fix.

1 Like

Did you get it to work in the end?

1 Like

I got audio mostly working. Games play fine under Windows Server, but there is a performance penalty and installation can be a little obtuse. Case in point, I had to install .NET 3.5 manually for Xcom.

The audio plays fine for the most part, but once every several minutes it’ll get garbled for a couple of seconds. Subtitles are a big help.

1 Like

My question was to @vitalius re the passthrough problem. But yes, sound seems to pose several issues when virtualising, perhaps not surprising as it is real-time sensitive and operates on a much higher sample rate than graphics.

There are issues with sound hiccups several times per minute when using spice under KVM as a sound channel, which can be worked around by turning playback compression off. But it seemed to me from your recent thread that your sound problem is another one, though similar, as you seem to have the problem in other scenarios.

1 Like

My current step is to get a second GPU and put the one I actually want to use in the 2nd slot via PCI-e 16x to 1x adapter.

This should let me get a clean VBIOS from the card since it won’t be the main one and so the BIOS won’t be shadowed by the Motherboard.

Once I grab that and tell KVM to use it, that should fix my problem.

The issue is that I haven’t had a second GPU on hand for a while so I’ve been putting it off.

We’ll see.

So I’ve finally gotten around to installing a 2nd GPU into the System. It is a GT 610.

root@pve-001:~# lspci -k | grep GT -A 3
02:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1)
Subsystem: eVga.com. Corp. GF119 [GeForce GT 610]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
02:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)

04:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)
Subsystem: eVga.com. Corp. GK208 [GeForce GT 710B]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
04:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)

root@pve-001:/sys/bus/pci/devices/0000:04:00.0# echo 1 > rom
root@pve-001:/sys/bus/pci/devices/0000:04:00.0# cat rom > /tmp/image.rom
cat: rom: Input/output error

UGGGH

root@pve-001:/sys/bus/pci/devices# cd 0000:02:00.0
root@pve-001:/sys/bus/pci/devices/0000:02:00.0# echo 1 > rom; cat rom > /tmp/image.rom;echo 0 > rom
root@pve-001:/sys/bus/pci/devices/0000:02:00.0# cd /root/rom-parser/
root@pve-001:~/rom-parser# ./rom-parser /tmp/image.rom
Valid ROM signature found @0h, PCIR offset 188h
PCIR: type 0 (x86 PC-AT), vendor: 10de, device: 104a, class: 030000
PCIR: revision 0, vendor revision: 1
Last image

Ok, so the GT 610’s ROM seems fine. I don’t get an error when parsing that image as I did before with the GT 710’s ROM.

But the point of adding the GT 610 was so that I could pull the GT 710’s ROM without it being shadowed.

Guess I’ll try swapping the two and seeing if that somehow magically fixes it so that I can do that.

Edit:

And I can’t do that because the GT 710 is a dual slot card and blocks the PCI-e x1 needed.

So I guess now I’ll go grab a second PCI-e x1 to x16 riser. sigh

So, late update to this.

I finally got a clean copy of the BIOS from the GT710 GPU. I ended up having to boot into Windows to do it and use GPU-Z. Hey, it works. Whatever.

Anyway, now I have the BIOS rom and will try using that in place of whatever the motherboard is actually offering the OS.

Here’s to hoping. If anyone needs it, here is a copy of the EVGA GT710 Dual Slot Passive GPU P/N 02G-P3-2712-KR BIOS ROM:

GK208_BIOS_FILE.ppt (165.5 KB)

Change .ppt to .rom (forum upload limitations)

Edit:

And I don’t remember what I did to passthrough the GPU. Which I undid to try and get the ROM of the BIOS. So now I have to relearn all this. sigh

So I made it to getting the GPU to show back up in the VM.

Screenshot from 2017-12-13 14-19-32

Still same error. Here is the VM config file:

bios: ovmf 
bootdisk: virtio0
cores: 4
cpu: host
efidisk0: local-lvm:vm-100-disk-2,size=128K
hostpci0: 02:00,pcie=1,x-vga=on,romfile=GK208_BIOS_FILE.bin
machine: q35
memory: 7168
name: Test-Windows
net0: virtio=96:24:CF:B4:AA:A2,bridge=vmbr0 
numa: 0
ostype: win10
scsihw: virtio-scsi-pci
smbios1: uuid=f675c872-c390-4668-9c48-423f5b4ff239
sockets: 1
usb0: host=6-1.2
usb1: host=2-4
usb2: host=3-1.2.3.4
usb3: host=1-1.2.3.4
virtio0: local-lvm:vm-100-disk-1,cache=writeback,size=90G

Here is the output of parsing the obtained ROM:

root@pve-001:~/rom-parser# ./rom-parser /usr/share/kvm/GK208_BIOS_FILE.bin
    Valid ROM signature found @600h, PCIR offset 190h
        PCIR: type 0 (x86 PC-AT), vendor: 10de, device: 128b, class: 030000
        PCIR: revision 0, vendor revision: 1
    Valid ROM signature found @fc00h, PCIR offset 1ch
        PCIR: type 3 (EFI), vendor: 10de, device: 128b, class: 030000
        PCIR: revision 3, vendor revision: 0
            EFI: Signature Valid, Subsystem: Boot, Machine: X64
    Last image

I don’t know if GPU-Z just gives it to me in the format I need, but I assume I can just rename the rom from .rom to .bin and it work fine? Given the parser works fine, it makes sense that it’s in the right format.

I probably missed a step along the way given I’m combining multiple guides (Arch Wiki, ProxMox Wiki, ProxMox Forum Nvidia GPU Passthrough, etc).

What am I missing here?

Hello,

I’ve jumped through the same Proxmox hoops as you before but with AMD. Two things you can try:

  1. remove ‘pcie=1’ option from ‘hostpci0:’ line
  2. fallback to SeaBIOS

I think success largely depends on your generation of CPU (if Intel). I’ve worked with Sandy/Ivy/Haswell and I’ve never gotten ovmf successfully working with my R9 Fury; so based on my experience, I believe ovmf behaves with Broadwell and above

With SeaBIOS i didn’t need a romfile. VM and host would sleep/resume perfectly

Extra:
If *passing-through integrated graphics (IGD): Sandy-Haswell uses ‘legacy’, Broadwell and above ‘UPT’

*Alex Williamson’s blog

1 Like

My hardware is opposite yours.

AMD Athlon X4 865 and an Nvidia GT 710.

I have no integrated GPU. There’s only one GPU.

Just use a non gui distro of linux and have your VM scripts start as init.d scripts should do the job e.g. SL them into rc5.d.
else wise you’ll have to either manully ssh and start them, or get creative.
or a mix.

So I’m a bit confused. What do you think I’m trying to accomplish here?

ProxMox does 90% of what I want to do. The last 10% is GPU passthrough. I am fine with this being a manual process to setup, but I can’t seem to get the drivers to ignore the fact that they’re in a Virtual Machine since Nvidia cares for some reason. Or doesn’t care enough to not fix a bug.

The header pretty much says whats up.
Headless e.g. no monitor, nor gui, and i am guessing you want to use more then is one VM, or more, on said headless installation.
IF you wanted gui to manage your installations, id have gone with “GUI FOR REMOTE MANAGEMENT OF VIRTUAL MACHINE(S) WANTED”.
There’s tons fo GUI based managed system, like proxmox which will do your just just fine then if that is the case.
but check out what linus(He has that whole 57 gamers 1 computer line of youtube releases) does with his linux distro for “headless”(then) management of of virtual machine passthrough forgot the distro’s name, but i think it’ll hit your G-spot just right if so.

How about

cpu: host,kvm=off

I just want one Windows VM with a GPU passed through and a Linux host. I won’t need more VMs.

He used unRAID. unRAID is not free.

This is currently the command used to start the VM:

-cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=proxmox,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_reset,hv_vpindex,hv_runtime,hv_relaxed,kvm=off' -m 7168 -k en-us -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=Nvidia43FIX,kvm=off'

Both host and kvm=off are in there and the issue still occurs.

Updated BIOS? VirtuMVP disabled in BIOS (idk i have no experience with AMD CPU)?

You should try and get it working in SeaBIOS. OVMF didn’t work on my 560ti; I’m not sure which generation ovmf starts to behave

As far as I’m aware, it is the latest BIOS on the motherboard (if you meant that BIOS).

The reason I focused on OVMF is because of this section in the Wiki:

Screenshot from 2017-12-18 15-12-05

Undoing everything to make Seabios work is a bit tedious but I guess I have no real choice if this just isn’t working.

Can also try attaching to a pcie controller:

-device -ioh3420

Full list can be seen:

qemu-system-x86_64 -device help

I assume you mean the GPU I’m passing through.

It’s currently:

-device 'vfio-pci,host=02:00.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on,romfile=/usr/share/kvm/GK208_BIOS_FILE.bin' 
-device 'vfio-pci,host=02:00.1,id=hostpci0.1,bus=pci.0,addr=0x10.1'

So I would change vfio-pci to ioh3420 for both? Do the device options change then?

No, it’s a separate device that those will attach to in QEMU