前置き
QEMU/KVM上でdGPU(GTX970)をパススルーしたWindows10インスタンスの挙動が不安定なのでチューニングを試みる
環境は以下の通り
CentOS7 + QEMU 2.5.0
$ cat /etc/centos-release CentOS Linux release 7.2.1511 (Core) $ qemu-system-x86_64 --version QEMU emulator version 2.5.0, Copyright (c) 2003-2008 Fabrice Bellard
また、今回作業対象のインスタンス名はgtx970_img
とする。
検討
以下のサイトを参考にしながらパフォーマンスチューニングを検討する。
この中で既にCPUピニングの設定は完了しているので、今回はメモリ関連に焦点を当て以下の事項を設定していくこととする。
1. locked
— 追記 —
hard_limit
とlocked
の設定をしたところインスタンスが2回連続で起動時/起動直後にフリーズしたため、最終的にこれらは除外することとした。以下はフリーズ時に出力されたエラーメッセージである。
Jan 28 13:05:01 office kernel: traps: CPU 3/KVM[7142] trap int3 ip:7fa266a758d3 sp:7fa25eba0c90 error:0
よって今回は本項を実施する必要がなかったが、参考のため削除せず残しておくこととする。
— 追記ここまで —
事前にmemtune
でhard_limit
の値を設定しておかないとインスタンス起動時に初期化に失敗するので注意。
hard_limit設定前
hard_limit : unlimited soft_limit : unlimited swap_hard_limit: unlimited
hard_limit設定変更
sudo virsh memtune gtx970_img --hard-limit 10240000 --config
hard_limit設定後
$ sudo virsh memtune gtx970_img hard_limit : 10240000 soft_limit : unlimited swap_hard_limit: unlimited
hard_limitの値はmemory
の設定より多めに指定する必要がある。
今回作業したインスタンスのmemory
は以下の通り8388608
なのだが、hard_limitは9000000
では動作せず、10240000
で動作した。
<memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory>
hard_limit
を設定が完了したところでXMLに以下の設定を追加。
<memoryBacking> <locked/> </memoryBacking>
2. nosharepages
XMLに以下の設定を追加する。
<memoryBacking> <nosharepages/> </memoryBacking>
3. hugepages
事前にカーネルパラメータのvm.nr_hugepages
を設定をしておく必要がある。
hugepages
にどれだけ割り当てるかはインスタンスのメモリ使用量をページサイズで割るとよい。ページサイズはmeminfoで確認することができる。
$ cat /proc/meminfo | grep Hugepagesize Hugepagesize: 2048 kB
今回はインスタンスの割り当てメモリが8GBなので4000以上、余裕を見て4500を割り当てることとした。
vm.nr_hugepages変更前
$ sysctl -n vm.nr_hugepages 0
hugepages変更
$ sysctl -w vm.nr_hugepages=4500
vm.nr_hugepages変更後
$ sysctl -n vm.nr_hugepages 4500
XMLに以下の設定を追加した後、
<memoryBacking> <hugepages/> </memoryBacking>
実際にインスタンスを起動して確認してみる。
$ cat /proc/meminfo | grep Huge AnonHugePages: 1961984 kB HugePages_Total: 4500 HugePages_Free: 404 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
動作に問題がなければカーネルパラメータの設定をファイルに書き出しておく。
$ cat /etc/sysctl.d/01-hugepages.conf vm.nr_hugepages=4500
以上