web-dev-qa-db-ja.com

ホストにI / Oの負荷が高いのに、VMがI / Oにひどく苦労するのはなぜですか?

ホストOSに重いI/O負荷がかかると、すべてのVMがi/Oで非常に苦労し始め、systemdで起動すらできなくなるまで、CPUスタックメッセージとその他のタイムアウト。 Linuxホスト上のVMWareWorkstationとVirtualBoxの両方でこのように機能します。ゲストと一緒に。基本的に、ホストがファイルシステムチェックやチェックサム計算などを実行している場合、I/Oがほとんど機能しないため、ゲストOSは半分機能します。

ホストプロセスは、このようなロード中にI/Oを共有する際に問題がなく、2番目のチェックサムが実行されると、I/Oが2つのプロセスにほぼ均等に分割されることに注意してください。何故ですか? VMが「特別」な理由は何ですか?それを助けることができますか?

2
Lapsio

民生用コントローラー/ディスクには、複数の重いI/O操作を効率的に実行する能力がありません。ただし、一般的にはテクノロジーが最も高速であるため、プロセスは(理論的には)より良くなります。

明らかに、ソフトウェアRAIDのようなCPU/I/Oを多用する操作を実行している場合(OPが実行しているように)、コントローラーを共有するときもCPUリソースを使い果たすときも、セットアップ全体のパフォーマンスが低下します。少なくともハードウェアRAIDコントローラーに投資することをお勧めします。

サーバーグレードのハードウェアは、一般に、複数のVM /複数のユーザーの並列ヘビーアクセスの状況にうまく対処します。

ただし、サーバーグレードのハードウェアを選択するだけでは不十分であり、コンシューマーグレードまたはサーバーグレードのハードウェアを扱う場合に役立つ最適化戦略があります。

ハイパーバイザーの負担を軽減してI/Oの負担を大幅に軽減するVMで実行できるのは、paravirtualizingサービスです。

準仮想化とは、バルクデータ転送用の仮想化サービス/カーネル(VMWare用語ではPVSCSIとも呼ばれます)と直接通信する特別なドライバーを追加することを意味します。そのため、実際のメディアストレージデバイス/ NICをエミュレートする必要はありません。

EnterpriseまたはWorkstationのすべてのvmwareソリューションには、LinuxおよびFreeBSD用の_open-vm-tools_パッケージがあります。

Debianでは、以下を使用してインストールします。

_apt-get install open-vm-tools
_

Debian Stretchの場合、これ以上コンパイルする必要はありません。 Jessieの場合、バックポートは_open-vm-tools_ v10をインストールするため、バックポートからopen-vm-toolsをインストールすることをお勧めします。

Open-vm-toolsをインストールした後、VMをシャットダウンし、タイプParaVirtualのディスクコントローラーと_vmxnet3_のネットワークコントローラーを変更する必要があります。

ご覧ください VMware Paravirtual SCSI(PVSCSI)アダプタ(1010398)を使用するようにディスクを構成する

Vmtoolsを使用すると、VMでメモリバルーニングを実行することもできるため、使用していないRAMを使い切る必要はありません。

仮想メモリバルーニングは、ハイパーバイザーが使用するコンピューターメモリ再利用技術であり、物理ホストシステムが特定のゲスト仮想マシン(VM)から未使用のメモリを取得し、他のユーザーと共有できるようにします。メモリバルーニングにより、ゲストVMに必要なRAMの合計量は、ホストで使用可能な物理的なRAM)の量を超えることができます。

VTやVT-dなどのプロセッサレベルでのエミュレーションテクノロジのサポートも、プロセスの円滑化に役立ちます。 ダイレクトI/O用インテルバーチャライゼーションテクノロジー(VT-d)

言うまでもなく、I/Oを削減するOSレベルでの最適化も役立ちます。たとえば、ローカルVMではなく、リモートロギングシステムへのロギング。

またはパーティションを揃えます。

VMware vSphere 5、DeepDrive、Part-1でのパーティションの調整

VMware vSphere 5、DeepDrive、パート2でのパーティションの調整

突然の再起動の場合にログの整合性を維持するためにログデーモンがログファイルをフラッシュするために/ varパーティションからデータベースストレージスペースを取り出すなど、他のI/O最適化にも注意してください。

また、最低限必要なサービスを使用するというUnixの哲学に従うのにも役立ちます。私の使用から経験的に、VMが小さいほど、ハウスキーピング/ページングで使用するI/Oが少なくなります。明らかに、メモリを使い切っていると、I/O(別名トラッシング)に問題が発生する可能性があります。

ハイパーバイザーで特定のVMのI/O優先度を微調整することもできます。つまり、優先度を高くしたり低くしたりできます。VCenter/ VMWare ESXで実行できることはわかっていますが、おそらくVMWare Workstationはレベル2ハイパーバイザーであるため、I/O操作とスライスクォータの管理を処理するのはホストOSです(詳細は後で説明します)。

また、レベル2ハイパーバイザーを使用する場合、ここで説明する最適化の多くは、可能であればホストOSにも適用する必要があることは言うまでもありません。

VMwareハイパーバイザーテクノロジーも、複数のVMでの高負荷I/Oを他の方法よりもうまく処理できるようです。

ただし、少なくともVMWareの領域、少なくとも本番システムのパフォーマンスが心配な場合は、Type-1 /を選択することをお勧めします。 VMwareワークステーションを使用する代わりにベアメタルハイパーバイザー(ESXまたはESXi)。

から ハイパーバイザー

タイプ1、ネイティブまたはベアメタルハイパーバイザーこれらのハイパーバイザーは、ホストのハードウェア上で直接実行され、ハードウェアを制御し、ゲストオペレーティングシステムを管理します。このため、これらはベアメタルハイパーバイザーと呼ばれることもあります。 IBMが1960年代に開発した最初のハイパーバイザーは、ネイティブハイパーバイザーでした。[4]これらには、テストソフトウェアSIMMONおよびCP/CMSオペレーティングシステム(IBMのz/VMの前身)が含まれていました。最新の同等物には、Xen、Oracle VM Server for SPARC、Oracle VM Server for x86、Citrix XenServer、Microsoft Hyper-V、およびVMware ESX/ESXi)が含まれます。タイプ-2またはホストされたハイパーバイザーこれらのハイパーバイザーは、他のコンピュータープログラムと同じように、従来のオペレーティングシステム(OS)で実行されます。ゲストオペレーティングシステムは、ホスト上のプロセスとして実行されます。

タイプ2ハイパーバイザーは、ホストオペレーティングシステムからゲストオペレーティングシステムを抽象化します。 VMware Workstation、VMware Player、VirtualBox、Parallels Desktop for Mac、およびQEMUは、タイプ2ハイパーバイザーの例です。

最後に、PVモードのLinuxホストのXendockerまたは_FreeBSD jails_。この代替案には、この回答の範囲外である長所と短所もあります。

3
Rui F Ribeiro