[vfio-users] Static and stutter on USB devices.

Lance R. Vick lance at lrvick.net
Mon May 9 09:34:21 UTC 2016


>
> echo 400000 > /sys/module/kvm/parameters/halt_poll_ns


Tried this change by itself first. CPU was noticeably lower on all cores,
almost never exceeding 70%
The stuttering effect however was much worse.

Next, you have a quad-core+threads processor and you're creating a
> quad-core+threads VM; where's the hypervisor supposed to run?  Of
> course you're going to get stutters when the guest vCPU is preempted by
> the hypervisor or another system process.  Be less aggressive in
> allocating vCPUs, virtualization isn't free.  Try a 3-core+threads VM
> for example.


Tried 3 cores vs 4 as suggested: "-smp 6,sockets=1,cores=3,threads=2"

Guest consistently locks up during boot. No idea what is up with that :/

Went all the way down to 2 cores next: "-smp 4,sockets=1,cores=2,threads=2"

3.11% slower than native now by 3Dmark test, but all my static/jitter
issues are totally gone!

Will have to continue with the other tuning you suggested to find a sweet
spot in-between the two extremes, but now I know I am only dealing with CPU
starving and not something more complex. Thanks.


On Sun, May 8, 2016 at 9:34 PM, Alex Williamson <alex.williamson at redhat.com>
wrote:

> On Sun, 8 May 2016 19:22:43 -0700
> "Lance R. Vick" <lance at lrvick.net> wrote:
>
> > I have some persistent issues with a couple USB devices via vfio/qemu
> that
> > I do not experience when booted native:
> >
> > Oculus Rift CV1
> > - head-tracking stutter (any game or demo)
> > - host CPU ~100% on every core (any game or demo)
> >   - at same time Guest CPU may only show ~20% usage
> > - audio static from built-in USB DAC
> >
> > FiiO K1 USB Headphone DAC/AMP
> > - mild but noticeable cuts/jitter
> >
> > This may also impact other USB devices in ways I have not yet noticed.
> Any
> > kind of test to quantify this would be helpful. Guest OS was installed
> on a
> > dedicated disk so I can easily native boot to compare tests when needed.
> >
> > 3DMark score is only 0.64% lower in VM which indicates to me at least
> > things are -mostly- there:
> > http://www.3dmark.com/compare/fs/8402818/fs/8403766
> >
> > Guest OS is Windows 10 Professional.
> >
> > Any advice/debugging tips would be most welcome.
> >
> > Here are all the other relevant details I can think of for my setup:
>
> For starters, turn down the kvm module parameter halt_poll_ns to
> something like 400000 to see if that brings the host CPU usage down.
>
> echo 400000 > /sys/module/kvm/parameters/halt_poll_ns
>
> Kernel v4.4.8 already includes a change to make this the default.
>
> Next, you have a quad-core+threads processor and you're creating a
> quad-core+threads VM; where's the hypervisor supposed to run?  Of
> course you're going to get stutters when the guest vCPU is preempted by
> the hypervisor or another system process.  Be less aggressive in
> allocating vCPUs, virtualization isn't free.  Try a 3-core+threads VM
> for example.
>
> Pinning vCPUs can also reduce stutter, it helps to avoid cold caches
> and avoids resource conflicts that can occur with threads.  Switch to
> libvirt, it makes this easy.
>
> Pinning the emulator can help to make sure it doesn't run on a
> conflicting CPU to a vCPU.  Libvirt makes this easy to manage.
>
> Tune irqbalanced to avoid placing interrupts on CPUs used by vCPUs.
>
> Finally, if you're willing to dedicate CPUs completely to the VM, use
> the isolcpus= and nohz_full= boot options to avoid the scheduler
> running anything on the physical CPUs except for the vCPUs.
> >
> > > sudo qemu-system-x86_64 \
> > -enable-kvm \
> > -machine type=q35,accel=kvm \
> > -cpu host,kvm=off \
>
> Enable hyper-v extensions, but specify the hv_vendor_id option to avoid
> Code43 issues.  Some workloads can have huge benefits from this, things
> like 3dmark are mostly unaffected.
>
> > -smp 8,sockets=1,cores=4,threads=2 \
> > -m 8G \
> > -mem-path /dev/hugepages \
> > -device virtio-scsi-pci,id=scsi \
> > -drive file=/dev/sda,id=disk,format=raw,if=none \
> > -device scsi-hd,drive=disk \
> > -device vfio-pci,host=01:00.0,multifunction=on,x-vga=on \
>
> x-vga=on isn't needed when you're booting the VM with OVMF.
> multifunction=on doesn't do anything useful unless you also specify and
> addr= option for the devices.
>
> > -device vfio-pci,host=01:00.1 \
> > -drive
> if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd
> > \
> > -drive if=pflash,format=raw,file=/tmp/OVMF_VARS-pure-efi.fd \
> > -nographic \
> > -vga none \
> > -usb \
> > -device vfio-pci,host=00:14.0 \
> > -rtc clock=host,base=utc
> >
> >
>
>


-- 
Lance R. Vick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/vfio-users/attachments/20160509/9e607050/attachment.htm>


More information about the vfio-users mailing list