Windows 10 Unusable/BSOD/Freezing/Graphics driver issues


d0u8l3m

Recommended Posts

Hi i currently have a new unraid server that im trying to run a windows 10 vm on for gaming and im having issues post install. Windows runs fine post install before i install the graphics drivers, but once the drivers are installed the OS freezes and the screen goes black, and i have to force stop and start the vm again.

 

Specs:

Gigabyte z87-ud3h

i7 4790k

32gb ram (16 allocated for vm)

gtx 770 (i had two originally but took one out since sli is not supported)

 

 

Things ive tried to remedy the issue

 

-Switch bios to OVMF

 

This only made things worse as once windows crashed it would take out Unraid with it, and i needed to hold the power button on the machine to get it running again

 

-Update the GPU Bios/firmware

 

This didn't make any noticeable difference

 

-adding iommu=pt to the syslinux config

 

also didnt make any noticeable difference

 

Im using the 770 to install and the integrated graphics is set to default in the bios for unraid to use

 

Im also passing the 770s audio component in the vm config

 

I have the latest bios from gigabyte installed

 

Im really at a loss as what i should try next i cant even get into windows at this point to try to enable MSI interrupts any help would be greatly appreciated

 

d0u8l3m-server-diagnostics-20160211-1902.zip

Link to comment

What PCIe slot is the current video card in? Try changing it to a different slot and see if that helps.

 

I haven't tried this yet ill see if i can get to it today

 

 

 

Well after a few restarts i was able to do this i think it may have helped as its not freezing much once im in the VM anymore

 

Now it seems like i have to restart it 2-3 times for it to be fine because on the initial start and restart it will load windows but when i move my mouse it will freeze every few seconds and the mouse jumps around from it being so slow any other tricks i can try to get it working on first boot?

 

Thanks for the help btw =D

Link to comment

Sorry can you also post your pci devices and iommu groups from the tools, system devices.

Please post it using the insert code button on the tool bar # just makes it easier to read than a file attachment. so your xml would look like this  :)

<domain type='kvm' id='2' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Windows Rig</name>
  <uuid>9e4bbedc-f281-a0d5-4129-c2589968ed39</uuid>
  <metadata>
    <vmtemplate name="Custom" icon="windows.png" os="windows"/>
  </metadata>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <nosharepages/>
    <locked/>
  </memoryBacking>
  <vcpu placement='static'>6</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='5'/>
    <vcpupin vcpu='4' cpuset='6'/>
    <vcpupin vcpu='5' cpuset='7'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.3'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='6' threads='1'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/user/Domains/Windows Rig/vdisk1.img'/>
      <backingStore/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <alias name='virtio-disk2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/ISOs/en_windows_10_multiple_editions_version_1511_x64_dvd_7223712.iso'/>
      <backingStore/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <boot order='2'/>
      <alias name='ide0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/ISOs/virtio-win-0.1.112.iso'/>
      <backingStore/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <alias name='ide0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0'>
      <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>
    <controller type='ide' index='0'>
      <alias name='ide'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:41:26:73'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target port='0'/>
      <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='/var/lib/libvirt/qemu/channel/target/Windows Rig.org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x14' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pci.0,addr=1c.0,multifunction=on,port=2,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.1,bus=root.1,addr=00.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=00:03.0,bus=root.1,addr=01.0'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=00:1b.0,bus=root.1,addr=02.0'/>
  </qemu:commandline>
</domain>

Link to comment

Didn't realize there was a button for that my bad haha here ya go

 

PCI Devices

00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-V (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #1 (rev d4)
00:1c.4 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #5 (rev d4)
00:1c.5 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #6 (rev d4)
00:1c.6 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #7 (rev d4)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Z87 Express LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 770] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
03:00.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 41)
05:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 11)
06:00.0 USB controller: Renesas Technology Corp. uPD720202 USB 3.0 Host Controller (rev 02)

 

IOMMU Groups

/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/3/devices/0000:00:03.0
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
/sys/kernel/iommu_groups/5/devices/0000:00:16.0
/sys/kernel/iommu_groups/6/devices/0000:00:19.0
/sys/kernel/iommu_groups/7/devices/0000:00:1a.0
/sys/kernel/iommu_groups/8/devices/0000:00:1b.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.4
/sys/kernel/iommu_groups/11/devices/0000:00:1c.5
/sys/kernel/iommu_groups/12/devices/0000:00:1c.6
/sys/kernel/iommu_groups/13/devices/0000:00:1d.0
/sys/kernel/iommu_groups/14/devices/0000:00:1f.0
/sys/kernel/iommu_groups/14/devices/0000:00:1f.2
/sys/kernel/iommu_groups/14/devices/0000:00:1f.3
/sys/kernel/iommu_groups/15/devices/0000:03:00.0
/sys/kernel/iommu_groups/16/devices/0000:05:00.0
/sys/kernel/iommu_groups/17/devices/0000:06:00.0

Link to comment

You don't need to isolate the bridge, you can remove the ACS override option (if you did, this would have never worked at all).

You can attempt to pass the rom file for the card (see the wiki), this can help with certain cards.

 

If not, you may want to search and see if others have had issues or success with the 770, specifically your make model (if there is enough data | it can actually make a difference).

This will help you to make the best decision moving forward.

 

It is possible that this particular card does not work correctly virtualized, it is an unfortunate occurrence, but very much a reality here.

If so, it is better to get a different card, and not have the issues you're experiencing (I started with multiple cards that had similar issues that I no longer own).

Link to comment

You don't need to isolate the bridge, you can remove the ACS override option (if you did, this would have never worked at all).

You can attempt to pass the rom file for the card (see the wiki), this can help with certain cards.

 

If not, you may want to search and see if others have had issues or success with the 770, specifically your make model (if there is enough data | it can actually make a difference).

This will help you to make the best decision moving forward.

 

It is possible that this particular card does not work correctly virtualized, it is an unfortunate occurrence, but very much a reality here.

If so, it is better to get a different card, and not have the issues you're experiencing (I started with multiple cards that had similar issues that I no longer own).

 

well i guess ill turn acs override off then. From what ive read on here it looks like people are running 770s fine, so im not sure whats going on. I am getting a 980ti soon anyways though since i just got two more monitors to run nvidia surround so i guess ill post an update when i get that. I might just do a complete fresh install of windows and reconfigure my vm. Any tips and tricks this time around to make sure i dont have issues? Like for instance it looks like the Q35 chipset implementation is far superior to the i440 so would it be better to use that? and which bios would be the better one to use. Im curious as to what settings would be the most stable and give me the closest native performance i can get

 

Thanks!

Link to comment

440fx is the recommended Windows chipset, Q35 for Linux VM's.

I know that 6.2 (whenever we actually SEE that!) has some upgrades for VFIO/QEMU that could be beneficial.

OVMF/UEFI is recommended, however with 6.1.8, SeaBIOS may be less problematic (dependent on the card/hardware).

 

For my use case, I have 4 VM's, all windows, all SeaBIOS (i440FX) without any real issue (I'm sure I could bitch about something, but all 4 are up at all times(typing on one now)).

If you were reinstalling Windows now, OVMF is certainly recommended though, so keep that in mind (and the default moving forward). You can also try the Windows default drivers, as opposed to the Nvidia ones, however that is certainly not preferred, and shouldn't be needed if able to resolve the reason(s) for your issues.

 

Have you tried passing the rom for the card?

The wiki explains how to do this, and may help with stability.

Link to comment

Since we were discussing 440FX vs Q35, I wanted to add a post with some good information that I just stumbled upon (bottom section).

 

"The VGA space itself is a shared resource, so every time the guest

tries to access VGA space it gets gets trapped into QEMU, which

forwards the request to VFIO, which negotiates with the VGA arbiter and

adjusts chipset routing as necessary.  Therefore VGA mode is bearable

when there's one consumer, once you start getting contention and the

arbiter needs to switch routing on each access, this can certainly

become a bottleneck.  However, even when using a legacy BIOS with

x-vga, those VGA accesses *only* occur during early boot or if you're

using non-accelerated drivers, so the window for contention is very

small.  Once the guest is up and running, access to legacy VGA space

ceases, and there's no performance difference between legacy BIOS and

UEFI that I'm aware of.  FWIW, it's also a misconception that Q35 based

VMs provide some sort of performance advantage vs 440FX.  The chipset

is virtual, it has no bearing on performance.  Thanks, Alex"

 

https://www.redhat.com/archives/vfio-users/2016-February/msg00036.html

 

Link to comment
  • 2 years later...
On 2/17/2016 at 8:31 PM, d0u8l3m said:

Thanks for all the info.  My 980ti should be here tomorrow and im gonna remake a new vm. Ill try to follow your recommended settings and hope my issues are resolved. Will update once its running

 

Did you receive the 980ti and did it work fine?

I'm having the same issue with my GTX660Ti , soon my trial with unraid will expire and I will have to move to Windows if I don't make my card to work well with my VM.

The card passthrough fine using the "rom file = " commmand for UEFI, but as soon as I install the latest version or different versions of the driver, the VM OS gets really slow, the mouse jumps and the Windows 10 becomes a turtle, really crazy!

 

I tried installing again a VM and as soon as I install the drivers it happens the same all over again.

 

I know the card is old, and I'm using unRAID 6.4.1, but still.. if the card works with the rom file  command, then the rest should stay the same as if it is native right?

Then why is this problem happening?

 

I have tried enable and disable Hyper-V, enable and disable ACS override, different CPU core pairs and nothing helps.

 

Please someone share a light on this because soon I will have to make a decision about this.

 

Thanks.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.