E2 マシンシリーズのコストとパフォーマンスの最適化


E2 VM は、ワークロードの大部分を改善する価値、パフォーマンス、柔軟性を提供します。E2 VM は動的リソース管理を使用し、ホストマシンで利用可能な物理リソースをさらに有効活用してコスト効率を高めます。また、E2 VM はカスタムビルドされた CPU スケジューラとパフォーマンス重視のライブ マイグレーションを使用してパフォーマンスを優先的に扱い、オーバー サブスクリプションに関連する問題からワークロードを保護します。これらは、Google 検索、Google 広告、Google マップ、YouTube などのサービスでレイテンシの影響を受けやすいワークロードを効率的に実行するために使用されているテクノロジーと同じテクノロジーです。

動的リソース管理の仕組み

仮想 CPU(vCPU)は、ホスト上の他のスレッドと同様に、オンデマンドで実行するようにスケジュール設定されるスレッドとして実装されます。vCPU が行う処理がある場合、その処理は利用可能な物理 CPU に割り当てられ、再びスリープ状態になるまで実行されます。同様に、仮想 RAM は、ゲスト物理ページが最初にアクセスされるときに入力されるページテーブルにより、物理ホストページにマッピングされます。このマッピングは、ゲスト物理ページが不要であることを VM が通知するまで固定されたままになります。

動的リソース管理により Compute Engine は、リソースの需要に基づいてサーバーに VM をスケジューリングし、待ち時間が最小限になるように vCPU スレッドを物理 CPU にスケジューリングすることで、利用可能な CPU を有効活用できます。ほとんどの場合、この処理はシームレスに行うことができます。その結果、Google Cloud はより少ないサーバーでより多くの VM を実行できるようになり、Compute Engine は他の VM タイプよりも大幅に低い価格で E2 VM を提供できるようになりました。

動的リソース管理のコンポーネント

Compute Engine では、次のテクノロジーを使用して動的リソース管理を実装します。

より大規模で効率的な物理サーバー

コア数と RAM 密度は着実に増加しており、ホストサーバーは個々の E2 VM よりもはるかに多くのリソースを持つようなりました。Google は新しいハードウェアのベンチマークを継続的に実施し、さまざまなクラウド ワークロードとサービスに対して費用対効果が高く、優れたパフォーマンスを発揮するプラットフォームを求めています。ハードウェアのアップグレードが利用可能になると、Compute Engine は E2 VM を新しい高速ハードウェアにライブ マイグレーションします。これにより、これらの新しいリソースを自動的に利用できるようになります。

インテリジェントな VM の配置

Google のクラスタ管理システムは、物理サーバーで実行されている VM の CPU、RAM、メモリ帯域幅、およびその他のリソース需要を監視します。この情報をもとに、新しく追加された VM がそのサーバー上でどのようなパフォーマンスを発揮するかを予測します。次に、何千台ものサーバーを検索して、VM を追加するために最適な場所を探し出します。このような監視により、新しい VM を配置するとその VM にはネイバーと互換性があり、それらのインスタンスからの干渉を受ける可能性が低くなります。

パフォーマンス重視のライブ マイグレーション

VM がホストに配置されると、Compute Engine は VM のパフォーマンスと待機時間を継続的にモニタリングします。VM のリソース需要が増加すると、Compute Engine はライブ マイグレーションを使用して、データセンターの他のホストに E2 の負荷を透過的に移行できます。ライブ マイグレーション ポリシーは予測方式を採用しており、Compute Engine に負荷をシフトする時間を与え、多くの場合、VM が待ち時間を経験する前にシフトします。

ハイパーバイザ CPU スケジューラ

ハイパーバイザ CPU スケジューラは、E2 仮想 CPU とメモリを、ホストサーバーの物理 CPU とメモリにオンデマンドで動的にマッピングします。この動的管理では、物理リソースを活用することで E2 VM のコスト効率を高めます。リソースを効率的に使用すると、Compute Engine はより少ないサーバーでより多くの VM を実行できるため、Google Cloud は他の VM タイプよりも大幅に安い価格で E2 VM を提供できます。

Virtio メモリバルーン デバイス

メモリバルーンは、ゲスト用に予約されたメモリのサイズを動的に調整するためのホストとゲスト間のインターフェース メカニズムです。virtio メモリバルーン デバイスを使用して、メモリバルーンを実装します。ホストは virtio メモリバルーン デバイスを介して、一定量の空きメモリページ(メモリバルーン インフレーションとも呼ばれます)を提供するようゲストに明示的に要求し、ホストが空きメモリを他の VM に使用できるようにメモリを再要求することが可能です。同様に、virtio メモリバルーン デバイスはメモリバルーンを収縮することで、メモリページをゲストに返すことができます。

Virtio メモリデバイス

公開イメージ上の Compute Engine E2 VM インスタンスには、ゲスト オペレーティング システムのメモリ使用量をモニタリングする virtio メモリバルーン デバイスがあります。ゲスト オペレーティング システムは、使用可能なメモリをホストシステムに知らせます。ホストは、未使用のメモリをオンデマンドでその他のプロセスに再割り当てし、メモリを効率的に使用します。Compute Engine では、このデータを収集してより正確なサイズ適正化の推奨を行います。

ドライバのインストールの確認

イメージに virtio memory balloon のデバイス ドライバがインストールされ、読み込まれているかどうかを確認するには、次のコマンドを実行します。

Linux

ほとんどの Linux ディストリビューションには、virtio メモリバルーン デバイス ドライバが含まれています。イメージがドライバをインストールして読み込まれていることを確認するには、次のコマンドを実行します。

sudo modinfo virtio_balloon > /dev/null && echo Balloon driver is \
installed || echo Balloon driver is not installed; sudo lsmod | grep \
virtio_balloon > /dev/null && echo Balloon driver is loaded || echo \
Balloon driver is not loaded

5.2 より前の Linux カーネルでは、バルーン デバイスが存在するときに Linux メモリシステムが大規模な割り当てを誤って阻止することがあります。これは実際にはほとんど問題ではありませんが、仮想メモリ overcommit_memory 設定を 1 に設定して、問題が発生しないようにすることをおすすめします。この変更は、2021 年 2 月 9 日以降に公開された Google が提供するイメージのすべてにおいて、デフォルトですでに実施されています。

この設定を修正するには、次のコマンドを使用して値を 0 から 1 に変更します。

sudo /sbin/sysctl -w vm.overcommit_memory=1

再起動後もこの変更を維持するには、/etc/sysctl.conf ファイルに以下を追加します。

vm.overcommit_memory=1

Windows

Compute Engine の Windows イメージには、virtio バルーン デバイスが含まれています。ただし、カスタム Windows イメージにはありません。Windows イメージにドライバがインストールされているかどうかを確認するには、次のコマンドを実行します。

googet verify google-compute-engine-driver-balloon

virtio メモリバルーン デバイスの無効化

virtio メモリバルーン デバイスを使用すると、Compute Engine がメモリリソースをより効果的に利用できるようになり、Google Cloud が E2 VM をより低価格で提供できるようになります。virtio メモリバルーン デバイスをオプトアウトするには、デバイス ドライバを無効にします。virtio メモリバルーン デバイスを無効にした後でも、引き続きサイズ適正化の推奨の通知を受け取りますが、これは正確性に欠ける可能性があります。

Linux

Linux でデバイスを無効にするには、次のコマンドを実行します。

sudo rmmod virtio_balloon

このコマンドを VM の起動スクリプトに追加すると、VM ブート時に自動的にデバイスを無効にできます。

Windows

Windows でデバイスを無効にするには、次のコマンドを実行します。

googet -noconfirm remove google-compute-engine-driver-balloon

このコマンドを VM の起動スクリプトに挿入すると、VM ブート時に自動的にデバイスを無効にできます。

次のステップ