[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [vfio-users] Why does the audio from VM crackle?



The CPU isolation and interrupt reduction for the guest CPUs seems to
have greatly reduced the audio problems.

Thanks for that.

On Thu, Jun 9, 2016 at 12:43 PM, Milos Kaurin <milos kaurin gmail com> wrote:
> Yes, this keeps coming up now and again on this list.
>
> My solution was:
>
> 1. Buy a dedicated PCIE sound card
> 2. Pass it through to the guest
> 3. Route audio: mobo soundcard > guest soundcard
>
> In essence, the always-on guest would handle audio, but I would still have
> crackles (rarely), especially from the web browsers (host & guest). Games
> not so much.
>
> To fix crackles, I did the following:
> 1. In the kernel cmdline: Use hugepages, 16x1GB for the guest (16 for the
> host, 32 total)
> 2. In the kernel cmdline: Use cpuisol (6 cores for the gues, 2 for the host)
> 3. In the kernel cmdline: Use nohz_full and rcu_nocbs for the guest cores
> 4. In the virt XML: Use cputune, hugepages, cpu mode=host-passthrough with
> the correct topology
> 5. In the virt XML: iothreadpin and emulatorpin for the 2 host CPUs
> 6. In the virt XML: Use virtio wherever possible (net, block devices)
>
> I think I covered everything. If anyone else has any other tips, please let
> me know.
>
>
>
> Appenix
>
>
> My /etc/default/grub:
>
> GRUB_CMDLINE_LINUX="rhgb quiet intel_iommu=on iommu=pt kvm.ignore_msrs=1
> rd.driver.pre=vfio-pci hugepagesz=1G default_hugepagesz=1G hugepages=16
> nohz_full=1,2,3,5,6,7 rcu_nocbs=1,2,3,5,6,7 isolcpus=1,2,3,5,6,7"
>
>
>
> My XML:
>
> <domain type='kvm'>
>   <name>Win10</name>
>   <uuid>4bb72e5b-c886-425f-8280-b69755ebf054</uuid>
>   <memory unit='KiB'>16777216</memory>
>   <currentMemory unit='KiB'>16777216</currentMemory>
>   <memoryBacking>
>     <hugepages/>
>   </memoryBacking>
>   <vcpu placement='static'>6</vcpu>
>   <iothreads>2</iothreads>
>   <cputune>
>     <vcpupin vcpu='0' cpuset='1'/>
>     <vcpupin vcpu='1' cpuset='5'/>
>     <vcpupin vcpu='2' cpuset='2'/>
>     <vcpupin vcpu='3' cpuset='6'/>
>     <vcpupin vcpu='4' cpuset='3'/>
>     <vcpupin vcpu='5' cpuset='7'/>
>     <emulatorpin cpuset='0,4'/>
>     <iothreadpin iothread='1' cpuset='0'/>
>     <iothreadpin iothread='2' cpuset='4'/>
>   </cputune>
>   <os>
>     <type arch='x86_64' machine='pc-i440fx-2.4'>hvm</type>
>     <loader readonly='yes'
> type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
>     <nvram>/var/lib/libvirt/qemu/nvram/Win10_VARS.fd</nvram>
>   </os>
>   <features>
>     <acpi/>
>     <apic/>
>     <kvm>
>       <hidden state='on'/>
>     </kvm>
>     <vmport state='off'/>
>   </features>
>   <cpu mode='host-passthrough'>
>     <topology sockets='1' cores='3' threads='2'/>
>   </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>
>   <pm>
>     <suspend-to-mem enabled='no'/>
>     <suspend-to-disk enabled='no'/>
>   </pm>
>   <devices>
>     <emulator>/usr/bin/qemu-kvm</emulator>
>     <disk type='block' device='disk'>
>       <driver name='qemu' type='raw' cache='none' io='native'/>
>       <source dev='/dev/sdb'/>
>       <target dev='vda' bus='virtio'/>
>       <boot order='2'/>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x09'
> function='0x0'/>
>     </disk>
>     <controller type='pci' index='0' model='pci-root'/>
>     <controller type='scsi' index='0' model='virtio-scsi'>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
> function='0x0'/>
>     </controller>
>     <controller type='usb' index='0' model='none'/>
>     <interface type='bridge'>
>       <mac address='52:54:00:3e:c8:03'/>
>       <source bridge='br0'/>
>       <model type='virtio'/>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
> function='0x0'/>
>     </interface>
>     <hostdev mode='subsystem' type='pci' managed='yes'>
>       <source>
>         <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
>       </source>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x0a'
> function='0x0'/>
>     </hostdev>
>     <hostdev mode='subsystem' type='pci' managed='yes'>
>       <source>
>         <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
>       </source>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x0b'
> function='0x0'/>
>     </hostdev>
>     <hostdev mode='subsystem' type='pci' managed='yes'>
>       <source>
>         <address domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
>       </source>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>     </hostdev>
>     <hostdev mode='subsystem' type='pci' managed='yes'>
>       <source>
>         <address domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
>       </source>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
> function='0x0'/>
>     </hostdev>
>     <memballoon model='none'/>
>   </devices>
> </domain>
>
>
>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]