VMホスト-> Xenon E5-2440 w/48G mem ...すべてがCentOS6.5(2.6.32-431)を実行します
2Gのメモリを搭載した4つのゲストVMを実行しています。それらのディスクイメージはローカルファイルです。ホストマシンも使用頻度の低いNFSサーバーを実行していますが、それ以外はあまり実行していません。 (swappiness = 0)1日ほど後、バッファキャッシュが40G近くまで増加すると、これらのVMの一部はほぼ完全にディスクにスワップされます。 (表示:grep VmSwap/proc/PID/status)
私が抱えている問題は、これらのVMが定期的に使用されていない可能性がある一方で、準備ができている必要があることです。ただし、実際には、それらは交換されており、応答時間に深刻な問題を引き起こしています。
私は確かに、ゲストVMに適切なサイズのスワップファイルを使用させ、OSにバッファキャッシュとスワップのバランスを決定させることに全力を注いでいますが、これは私のユースケースではホストマシンでは機能していないようです。
ホストマシンでスワップを無効にする以外に、VMの応答性が低下しないようにするオプションはありますか? cgroupsを試してみるか、このユースケースのスワップファイルのプラグを抜いてみますか?
Libvirtの新しいバージョンでは、ページをメモリにロックできます。-
http://libvirt.org/formatdomain.html#elementsMemoryBacking
注意:これは、Fedora 19をハイパーバイザーとして使用している場合は表示されませんが、EL6の最新のRPM(私が見つけることができます)の変更ログによると。 5libvirtこれが存在します。
- 2013年7月18日木曜日JiriDenemark-0.10.2-21
- conf:pmsuspendedドメイン状態のNULL derefを回避します(rhbz#822306)
- libvirt:ドメインクラッシュイベントタイプを定義します(rhbz#822306)
- qemu:processWatchdogEventのリファクタリング(rhbz#822306)
- qemu:qemuProcessShutdownOrReboot()を公開します(rhbz#822306)
- qemu:ゲストがパニックになったときに「oncrash」イベントを実装します(rhbz#822306)
- qemu:ゲストがパニックになったときに「oncrash」コアダンプイベントを実装します(rhbz#822306)
- conf:NATポートXMLノードを解析する際のメモリリークを修正しました(rhbz#851455)
- security_manager:比較を修正しました(rhbz#984793)
- qemu:ゲストエージェントを設定せずにlibvirtdがクラッシュするのを防ぎます(rhbz#984821)
- qemu:qemuAgentGetVCPUs()で返されたJSON配列のdouble freeを修正しました(rhbz#984821)
- qemu_agent:コマンドに配列を追加するためのサポートを追加しました(rhbz#924400)
- ドメインのメモリページをロックするためのサポートを追加します(rhbz#947118)
- qemu:ドメインのメモリページをロックするためのサポートを実装します(rhbz#947118)
- qemu:-realtime mlock = on | offサポートを確認します(rhbz#947118)
- qemu:メモリ制限の計算を再利用可能な関数に移動します(rhbz#947118)
- util:新しいvirCommandSetMax(MemLock | Processes | Files)(rhbz#947118)
- qemu:memoryBacking/lockdが使用されている場合にRLIMIT_MEMLOCKを設定します(rhbz#947118)
- サポートされているネットワークディスクバックエンドとしてGlusterプロトコルを追加します(rhbz#849796)
- qemu:glusterプロトコルベースのネットワークストレージバックエンドのサポートを追加します。 (rhbz#849796)
- テスト:glusterプロトコルベースのネットワークディスクサポートのテストを追加します(rhbz#849796)
Cgroupを使用して、cgroupごとにswappinessを設定できます
http://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
http://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
A KVM仮想CPUはホスト上の単なるスレッドであるため、他のプロセスと同様に制御できます。
マシューのソリューションのステップバイステップの説明は次のとおりです。
virt-xml $VMNAME --edit --memorybacking locked=on
systemctl restart libvirtd
(それが必要かどうかわからない)ここで、$VMNAME
はVMの名前です。
以前はVMが完全にスワップアウトされる状況を無事に通過しました。これで、VMのqemuプロセスのスワップ使用量は0になり、応答します。
警告: libvirtドキュメント によると、qemuのすべてのメモリがロックされ、予期せず大きくなる可能性があるため、ホストシステムを保護するためにhard_limit
を設定する必要があります(VM制限内にとどまるために必要な場合は殺されます)。
編集:簡略化されたステップ2(virsh edit $VMNAME
であり、<memoryBacking><locked/></memoryBacking>
の後に<domain type='kvm'>
を追加)