Jump to content

Sound Problems - Integrated Audio Passthrough


Recommended Posts

Having problems with Audio. I can't figure this out.

I have everything in UnRAID working perfectly except Audio.

 

When I play music and even system sounds I get random micro cuts in the audio, static noises and pops/clicks, along with the "underwater" sound but only for a micro second, it's never prolonged but is always noticeable.

I don't think it's the MSI problem, becuase of this; it says MSI Enable-.

 

lspci -vvv 
00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
        Subsystem: ASRock Incorporation Sunrise Point-H HD Audio
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32
        Interrupt: pin A routed to IRQ 16
        Region 0: Memory at df340000 (64-bit, non-prefetchable) [size=16K]
        Region 4: Memory at df320000 (64-bit, non-prefetchable) [size=64K]
        Capabilities: [50] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0-,D1-,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Kernel driver in use: vfio-pci

 

 

I have an i5-6600 with cores 1, 2 and 3 passed through to my Windows 10 VM, Core 0 is assigned to other VM's. I don't think it's a CPU problem. My Average CPU load never goes over 50% and when I run htop my system load is always ~1.7 or less. I've never seen it at 2.

 

I have 48gb of RAM, and 16 of that is assigned to my VM.

 

Here's my XML for my VM:

 

<domain type='kvm' id='8'>
  <name>Nick-Desktop</name>
  <uuid>52e75470-0b77-15e5-24c6-a5a8d93e6823</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <nosharepages/>
    <locked/>
  </memoryBacking>
  <vcpu placement='static'>3</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/52e75470-0b77-15e5-24c6-a5a8d93e6823_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='3' 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/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/cache/FastVDisk/Windows 10/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/Win10_1511_2_English_x64.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.118-1.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' model='nec-xhci'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </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:00:f9:b0'/>
      <source bridge='br0'/>
      <target dev='vnet1'/>
      <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/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-Nick-Desktop/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='0x01' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>
      </source>
      <alias name='hostdev1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x14' function='0x0'/>
      </source>
      <alias name='hostdev2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </memballoon>
  </devices>
</domain>

 

Any ideas on what I can do next? I've tried default windows drivers and the Realtek drivers, too. I've tried the audio quality fix in control panel (changing the sound quality to a different Bit Rate/kHZ too, to no avail.

 

Any idea?

Link to comment

I have always had problems passing through only a USB audio device. For perfect playback/sound  you have to pass through a USB controller and then connect the audio device.

 

What I'm referring to is that passing through my integrated Audio controller causes issues, but when I pass through my USB Audio device I have no problems.

Link to comment

I have always had problems passing through only a USB audio device. For perfect playback/sound  you have to pass through a USB controller and then connect the audio device.

 

What I'm referring to is that passing through my integrated Audio controller causes issues, but when I pass through my USB Audio device I have no problems.

It looks like you are not using hyper-thread pairs

<cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
  </cputune>

Check your thread pairs in settings system devices.

your pairs will be

 

0 ------4    physical core 1

1 ------5    physical core 2

2 ------6    physical core 3

3 ------7    physical core 4

 

Only use pairs, do not use one hyperthread of a core or else you will get latency. So if you use 1 also use 5. If you assign 5 to something else that physical core 2 is split between 2 different processes and will be a performance hit.

It has no relationship to the load on the cores so your max load being only 50% isnt an indictation your vcpu assignments are okay.

 

I would try to pin emulator tasks to another core not used by the vm aswell. It helps alot of people get better performance.

read  dlandon's excellent post http://lime-technology.com/forum/index.php?topic=49051.msg470454#msg470454

Link to comment

I have always had problems passing through only a USB audio device. For perfect playback/sound  you have to pass through a USB controller and then connect the audio device.

 

What I'm referring to is that passing through my integrated Audio controller causes issues, but when I pass through my USB Audio device I have no problems.

Yeah, I read that as isn't 100%  :o

Link to comment

I have always had problems passing through only a USB audio device. For perfect playback/sound  you have to pass through a USB controller and then connect the audio device.

 

What I'm referring to is that passing through my integrated Audio controller causes issues, but when I pass through my USB Audio device I have no problems.

It looks like you are not using hyper-thread pairs

<cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
  </cputune>

Check your thread pairs in settings system devices.

your pairs will be

 

0 ------4    physical core 1

1 ------5    physical core 2

2 ------6    physical core 3

3 ------7    physical core 4

 

Only use pairs, do not use one hyperthread of a core or else you will get latency. So if you use 1 also use 5. If you assign 5 to something else that physical core 2 is split between 2 different processes and will be a performance hit.

It has no relationship to the load on the cores so your max load being only 50% isnt an indictation your vcpu assignments are okay.

 

I would try to pin emulator tasks to another core not used by the vm aswell. It helps alot of people get better performance.

read  dlandon's excellent post http://lime-technology.com/forum/index.php?topic=49051.msg470454#msg470454

 

Thanks for the assistance, but my CPU does not support hyper threading :(

Link to comment
  • 1 year later...
  • 4 years later...

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.

×
×
  • Create New...