次世代の動的リソース管理


第 5 世代の Intel Xeon プロセッサと Titanium を搭載した N4 VM は、次世代の動的リソース管理を使用して、ホストマシンで利用可能な物理リソースをさらに有効活用することでコスト効率を高めます。また、カスタムビルドの CPU スケジューラとパフォーマンスを重視したライブ マイグレーションを使用して、ワークロードのパフォーマンスのニーズと利用可能なリソースのバランスをとります。これらは、Google 検索、Google 広告、Google マップ、YouTube などのサービスでレイテンシの影響を受けやすいワークロードを効率的に実行するために使用されているテクノロジーと同じテクノロジーです。

次世代の動的リソース管理では、NUMA アフィニティの向上、リソース要件のより正確な予測、パフォーマンスを重視したライブ マイグレーションによるより高速な再調整も行われます。

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

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

動的リソース管理により Compute Engine は、リソースの需要に基づいてサーバーに VM をスケジューリングし、待ち時間が最小限になるように vCPU スレッドを物理 CPU にスケジューリングすることで、利用可能な物理 CPU を有効活用できます。ほとんどの場合、この処理はシームレスに行うことができるため、Google Cloud はより少ないサーバー上で VM をより効率的に実行できます。

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

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

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

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

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

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

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

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

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

ハイパーバイザ CPU スケジューラは、仮想 CPU と仮想メモリをホストサーバーの物理 CPU と物理メモリにオンデマンドで動的にマッピングします。この動的管理では、物理リソースを活用することで VM のコスト効率を高めます。リソースを効率的に使用すると、Compute Engine はより少ないサーバーで VM をより効率的に実行できるため、Google Cloud は節約分をユーザーに還元できます。

第 1 世代の動的リソース管理

E2 は、virtio メモリバルーン デバイスを使用して動的リソース管理を提供する最初の VM シリーズでした。

virtio メモリバルーン デバイスと E2 VM

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

公開イメージ上の 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 ブート時に自動的にデバイスを無効にできます。

次のステップ