Virtio cpu intensive on guest, not host

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

 



I'm running a Windows XP guest which is experiencing poor performance
with the virtio drivers.  I'm booting the guest with the modified vfio
kernel and qemu from https://github.com/awilliam/qemu-vfio and
https://github.com/awilliam/linux-vfio to use a vfio PCI device, as
well as using the qemu from CentOS 6.2 with libvirt.

I record and play back SD video just fine with the VFIO kernel and
qemu versions.  It's only when I've started to transfer HD content
that it now halts the system.

The libvirt qemu reports version 0.12.1.2
The qemu-vfio reports version 1.0.92

I'm running them both on the VFIO kernel.

Here are the numbers I'm experiencing:
Disk Access
56.2 MB/sec, 25.2ms Average,16.3% CPU usage VirtIO+qemu-vfio:
56.5 MB/sec, 23.0ms Average,07.0% CPU usage VirtIO+libvirt:

Network: Testing with jpeft to a windows 7 machine through a gigabit switch.
Read: 123.0 Mbits/s ~42% CPU, Write 057.4 Mbits/s ~60% CPU -- VirtIO+qemu-vfio
Read: 177.0 Mbits/s ~24% CPU, Write 104.0 Mbits/s ~24% CPU --
VirtIO+libvirt

Running a duplex test on the machine with jperf causes the network
adapter to lock up.  It affects the guest and host at the same time.
Sometimes the card will recover and be accessible again, other times
it never comes back and requires a reboot (or possible network service
restart).

With this network overhead streaming 1 or 2 videos to clients
regularly causes stuttering as the guest cpu hits 100% on both cores.
The Host however, does not show nearly as much CPU utilization as the
guest.

My qemu run script is:
/usr/local/bin/qemu-system-x86_64 \
-m 3048 \
-netdev type=tap,id=guest0,vhost=on \
-device virtio-net-pci,netdev=guest0,mac=52:54:00:b9:bf:b0 \
-cpu Opteron_G3,+wdt,+skinit,+osvw,+3dnowprefetch,+cr8legacy,+extapic,+cmp_legacy,+pdpe1gb,+fxsr_opt,+mmxext,+aes,+sse4.2,+sse4.1,+ssse3,+ht,+vme
\
-smp 2,sockets=2,cores=1,threads=1 \
-enable-kvm \
-name SageTv \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 \
-drive file=/dev/vg_hdd/lv_sagetv,if=none,id=drive-virtio-disk0,format=raw,cache=none,aio=native
\
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1
\
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 \
-device vfio-pci,host=04:07.0,id=hostdev0 \
-vga std \
-usb \
-device usb-tablet,id=input0 \
-rtc base=localtime,driftfix=slew \
-monitor telnet::5901,server,nowait &

As you can see I'm running from a raw LVM partition, both instance
that I'm testing here are booted from the same partition (not at the
same time!).

Here is the output of lspci:
00:00.0 Host bridge: ATI Technologies Inc RD890 PCI to PCI bridge
(external gfx0 port B) (rev 02)
00:00.2 Generic system peripheral [0806]: ATI Technologies Inc RD990
I/O Memory Management Unit (IOMMU)
00:02.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI
express gpp port B)
00:04.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI
express gpp port D)
00:09.0 PCI bridge: ATI Technologies Inc RD890 PCI to PCI bridge (PCI
express gpp port H)
00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA
Controller [AHCI mode] (rev 40)
00:12.0 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
OHCI0 Controller
00:12.2 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
EHCI Controller
00:13.0 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
OHCI0 Controller
00:13.2 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
EHCI Controller
00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 42)
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host
controller (rev 40)
00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
OHCI2 Controller
00:15.0 PCI bridge: ATI Technologies Inc SB700/SB800/SB900 PCI to PCI
bridge (PCIE port 0)
00:16.0 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
OHCI0 Controller
00:16.2 USB controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB
EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 0
00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 1
00:18.2 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 2
00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 3
00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 4
00:18.5 Host bridge: Advanced Micro Devices [AMD] Family 15h Processor
Function 5
01:00.0 VGA compatible controller: ATI Technologies Inc RV620 LE
[Radeon HD 3450]
01:00.1 Audio device: ATI Technologies Inc RV620 HDMI Audio [Radeon HD
3400 Series]
02:00.0 USB controller: Etron Technology, Inc. EJ168 USB 3.0 Host
Controller (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd.
RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
04:07.0 Multimedia video controller: Internext Compression Inc iTVC15
MPEG-2 Encoder (rev 01)


Thanks,
Chris
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux