2017年6月16日金曜日

Windows ゲストの CPU 使用率

ずっと気になっていたことがある。
Windows ゲストを使用していると、ゲストのタスクマネージャで見る限りぜんぜん CPU を使っていないのに、ホスト側で top を実行すると CPU 消費率が高い、という状態が続いてた。
色々な原因はあるけど、どうやらゲストの定義に
<input type='tablet' bus='usb'/>
というのがあると、USB ポーリングが激しく動いて、ホスト側から見た kvm プロセスの CPU 消費が高くなる、らしい。

virt-manager 等でゲストを作る時、ゲストOSにWindowsを指定するとデフォルトで入る定義のようだ。
但し、この定義を消してゲストを起動すれば、CPU使用率は落ち着くが、virt-viewer/Remote viewer でマウスカーソルの動きがおかしくなるようだ。

で、いつも使っているゲスト:pegasus(Windows 7)もこの設定が入っている。
このゲストで試してみようと思う。

まずは、設定が入っているかを確認。
(sagittarius) $ virsh dumpxml pegasus | grep tablet

設定が入っているのを確認したら、そのままゲストを起動する。
(sagittarius) $ virsh start pegasus

合わせて、top コマンドで CPU 使用率を見てみよう。
(sagittarius) $ top -d 1
(終了させるには、キーボードから q を入力すればいい)

起動したら、端末側の Remote viewer で接続してみよう。

Windows ゲストにログオンしていないウチは、ホストから見たゲストの CPU 使用率は 20%弱のようだ。(sagittarius は 8論理CPU なので、全体では2%~3%程度)
ところが、Windows ゲストにログオンすると、途端にCPU使用率が100%を超える。
Windows としては何のアプリ起動せず、全然負荷をかけていないにも関わらず、だ。

では、先程の <input type='tablet' bus='usb'/> を消したらどうなるだろう?

Windows ゲストをシャットダウンさせ、実際に消してみよう。
(sagittarius) $ virsh shutdown pegasus
(sagittarius) $ virsh edit pegasus
--
<input type='tablet' bus='usb'/>
の行を消す
--

削除が終わったら、先程と同様に起動とCPU使用率の確認だ。
(sagittarius) $ virsh start pegasus
(sagittarius) $ top -d 1

先程は、ログオン前で大体20%程消費していたCPUが、今度は10%前後まで落ちたようだ。(時々跳ね上がるが…)
ログオンしてみるとどうだろうか…。
CPU 使用率は少し下がった。100%をちょっと下回る状態だ。(時々、100%を超えるが…)
但し、Remote Viewer にフォーカスを当てたマウスカーソルが、マウス操作だけではフォーカスを外すことが出来なくなり、更に ゲストWindows 内のマウスカーソルと、端末側のマウスカーソルの2重表示になってしまった。
(フォーカスを外すには、左Ctrl+左Alt の同時押し)

Remote Viewer をフルスクリーン表示してみたらどうだろうか…。
やはり、マウスカーソルの2重表示が消えない。
ちょっと使いにくいが、コンソールを使うことってあまり無さそうだから大丈夫かな?

試しに、リモートデスクトップ接続で CPU 使用率等を確認してみよう。
…う~ん。CPU 使用率は 100% を少し上回るなぁ。
あまり改善された感じはしないけど、少しはマシか…。

頻繁に使う pegasus はこのままにして、他の Windows ゲスト定義は <input type='tablet' bus='usb'/> の定義は残しておくことにしよう…。

--2020/11/17追記
どうやら、別の宣言で解決できそうだ。
とりあえずコチラに記載しておいた。

0 件のコメント:

コメントを投稿