ゲスト無負荷時のKVMプロセス(qemu-kvm)高負荷問題と対応方法

2016/5/30 時点情報

CentOS6 の KVM 仮想化環境において、ゲスト無負荷時でもKVMプロセス(qemu-kvm)のCPU利用率が比較的高くなる問題と対応方法。

症状

ゲストが無負荷状態にもかかわらず、ホスト上の qemu-kvm プロセスが常時 10〜20% 程度のCPU利用率(topコマンド %CPU)になる

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15531 qemu      20   0 4841m 496m 5252 S 14.3  6.5   0:32.62 qemu-kvm (未対応ゲスト:CentOS)
 1345 root      10 -10  336m  48m 7460 S  0.7  0.6   0:31.07 ovs-vswitchd
 2618 qemu      20   0 4291m 310m 5260 S  0.7  4.1   1:20.43 qemu-kvm
   19 root      20   0     0    0    0 S  0.3  0.0   0:00.83 events/0
 1827 root      20   0     0    0    0 S  0.3  0.0   0:04.77 kondemand/2
発生環境

ホスト CentOS 6.6

  • kernel 2.6.32-642.el6.x86_64
  • qemu-kvm 0.12.1.2-2.491.el6_8.1.x86_64
  • openvswitch 2.1.0-1.x86_64

所謂 CentOS 上での普通の libvirt-KVM 環境での仮想化

ゲスト

  • CentOS 6.6 kernel 2.6.32-642.el6.x86_64
  • VyOS 1.1.7
対応後

ゲストが無負荷状態で、ホスト上の qemu-kvm プロセスCPU利用率 1〜4% に落ち着く

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2693 qemu      20   0 4478m 874m 5252 S  4.3 11.4   4:24.19 qemu-kvm (対応済みゲスト:CentOS)
 1345 root      10 -10  336m  48m 7460 S  0.7  0.6   0:30.14 ovs-vswitchd
  502 root      20   0     0    0    0 S  0.3  0.0   0:00.02 kdmflush
 1826 root      20   0     0    0    0 S  0.3  0.0   0:02.03 kondemand/1
対処法

各ゲスト定義 XML (libvirt Domain XML) から

<input type='tablet' bus='usb'/>

の行を削除して、ゲストシャットダウン→再度起動

$ sudo virsh edit <guest>
$ sudo virsh shutdown <guest>
$ sudo virsh start <guest>
参考

見つけた情報ではWindowsゲスト時になっているけれど、ゲストが Linux でも同症状は出る模様
.log : KVM上のゲストWindowsがホストLinux上でCPU利用率を消費する
Bug 949547 – qemu-kvm process consumes 8% cpu even when windows guest is idle inside and 70% when guest uses 10% cpu inside
USB デバイスの polling が負荷の要因?
qemu and usb-tablet cpu consumtion | kraxel's news

<input type='tablet' bus='usb'/>

が無いと、 VNC で接続した場合に、マウスカーソルがずれる恐れアリ。とも。
linux/kvm – Yuna's Technical Guide