このドキュメントでは、Compute Engine 仮想マシン(VM)インスタンスとベアメタル インスタンスで CPU、メモリ、ストレージのパフォーマンスの問題を診断して軽減する方法について説明します。
始める前に
- Ops エージェントをインストールして、インスタンスのパフォーマンス指標(メモリやディスク容量の使用状況など)をすべて表示します。
パフォーマンス指標を表示する
コンピューティング インスタンスのパフォーマンス指標を表示するには、Google Cloud コンソールで使用可能な Cloud Monitoring オブザーバビリティ指標を使用します。
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
個々のインスタンスまたはリソースを最も多く消費している 5 つのインスタンスの指標を表示できます。
個々のインスタンスの指標を表示する手順は次のとおりです。
パフォーマンス指標を表示するインスタンスの名前をクリックします。インスタンスの詳細ページが開きます。
[オブザーバビリティ] タブをクリックして、オブザーバビリティの [概要] ページを開きます。
リソースを最も多く消費している 5 個のインスタンスの指標を表示するには、[VM インスタンス] ページの [オブザーバビリティ] タブをクリックします。
インスタンスのパフォーマンス指標を確認します。[概要]、[CPU]、[メモリ]、[ネットワーク]、[ディスク] のセクションを表示して、各トピックの詳細な指標を確認します。インスタンスのパフォーマンスを示す主要な指標は次のとおりです。
[概要] ページで次の操作を行います。
CPU 使用率。インスタンスが使用する CPU の割合。
メモリ使用率。インスタンスが使用するメモリの割合(ディスク キャッシュを除く)。Linux OS を使用するインスタンスの場合、カーネルメモリも除外されます。
ネットワーク トラフィック。1 分間に送受信された平均バイト数。
VM、外部、Google との新たな接続1 分間に予想される個別の TCP / UDP フローの推定数。ピアタイプでグループ化されます。
ディスク スループット。ディスクに対する読み取りと書き込みのバイト数の平均レート。
ディスク IOPS。ディスクに対する I/O 読み取り / 書き込みオペレーションの平均レート。
[ネットワーク] の [概要] ページ:
VM / 外部 / Google に送信済み。パケットのサンプルに基づき、Google サービス、インスタンス、外部の宛先に送信されるネットワーク トラフィックのレート。この指標は、合計が送信ネットワーク トラフィックの合計と一致するようにスケーリングされます。
VM / 外部 / Google から受信。パケットのサンプルに基づき、Google サービス、インスタンス、外部ソースから受信したネットワーク トラフィックのレート。この指標は、合計が受信ネットワーク トラフィックの合計と一致するようにスケーリングされます。
ネットワーク パケットの合計。1 分間隔で送受信されるパケットの合計レート。
パケット平均サイズ。1 分間隔で送受信されるパケットの平均サイズ(バイト単位)。
拒否されたファイアウォールの受信パケット。インスタンスに送信されたものの、ファイアウォール ルールで拒否されたため、インスタンスで受信されていない受信ネットワーク パケットのレート。
[ディスク パフォーマンス] ページで、次の操作を行います。
I/O サイズの平均。ディスクに対する I/O 読み取り / 書き込みオペレーションの平均サイズ。小サイズ(4~16 KiB)のランダム I/O は、通常、IOPS により制限されます。シーケンシャルまたは大サイズ(256 KiB~1 MiB)の I/O はスループットにより制限されます。
キューの長さの平均: 上位 5 つのデバイスで、キューに格納中と実行中のディスク I/O オペレーションの数(「キューの深度」とも呼ばれます)。ディスクのパフォーマンスを上限に近づけるには、I/O キューの深度に高い値を使用します。Persistent Disk と Google Cloud Hyperdisk はネットワーク ストレージであるため、通常、物理ディスクやローカル SSD ディスクよりもレイテンシが大きくなります。
I/O レイテンシの平均: インスタンスにアタッチされているすべてのディスクのオペレーションを集計した、I/O 読み取り / 書き込みオペレーションの平均レイテンシ。Ops エージェントによって測定されます。この値にはオペレーティング システムとファイル システムの処理レイテンシが含まれ、キューの長さと I/O サイズに依存します。
パフォーマンス指標を理解する
インスタンスのパフォーマンスは、インスタンスが実行されているハードウェア、インスタンスで実行されているワークロード、インスタンスのマシンタイプによって影響を受けます。ハードウェアでインスタンスのワークロードまたはネットワーク トラフィックをサポートできない場合、インスタンスのパフォーマンスに影響する可能性があります。
CPU とメモリのパフォーマンス
ハードウェアの詳細
CPU とメモリのパフォーマンスは、次のハードウェアの制約による影響を受けます。
- 各仮想 CPU(vCPU)は、CPU プロセッサ上に単一のハードウェア マルチスレッドとして実装されます。
- Intel Xeon CPU プロセッサでは、単一のプロセッサコアで複数のアプリスレッドがサポートされます。
- C2 マシンタイプを使用する VM では、仮想コアから物理コアへのマッピングを固定し、NUMA セル アーキテクチャをゲスト OS に公開します。
- ゲスト環境には基本周波数しかアドバタイズされない状態でも、ほとんどの VM は CPU プラットフォームに一覧表示されている全コアターボ時の周波数を取得します。
- 共有コア マシンタイプは、コンテキストの切り替えを使用し、マルチタスクのために vCPU 間で物理コアを共有します。また、VM の CPU 使用率が 100% を超えることが可能となるバースト機能も提供します。詳細については、共有コア マシンタイプをご覧ください。
インスタンスの CPU とメモリのパフォーマンスを把握するには、CPU 使用率とメモリ使用率のパフォーマンス指標を表示します。さらに、プロセスの指標を使用すると、実行中のプロセスを表示することや、リソース使用量の異常を特定プロセスに関連付けることができます。また、インスタンスで最も高価なリソース コンシューマを識別することもできます。
CPU またはメモリの使用率が一貫して高い場合は、VM のサイズをスケールアップする必要があることを示します。VM が常に CPU またはメモリの 90% を上回る場合は、VM のマシンタイプを変更して、より多くの vCPU やメモリを搭載したマシンタイプに変更します。
ネットワーク パフォーマンス
ハードウェアの詳細
ネットワークのパフォーマンスは、次のハードウェア制約による影響を受けます。
- 各マシンタイプには、特定の下り(外向き)帯域幅の上限があります。インスタンスのマシンタイプの最大下り(外向き)帯域幅を確認するには、インスタンスのマシン ファミリーに対応するページをご覧ください。
- ネットワーク インターフェースを追加するか、ネットワーク インターフェースごとに VM に IP アドレスを追加することによって、VM の上り(内向き)または下り(外向き)のネットワーク帯域幅は増加しませんが、一部のマシンタイプを高帯域幅に構成できます。詳細については、高帯域幅の VM の構成をご覧ください。
インスタンスのネットワーク パフォーマンスを把握するには、[ネットワーク パケットの合計]、[パケット平均サイズ]、[VM / 外部 / Google からの新しい接続]、[VM / 外部 / Google に送信]、[VM / 外部 / Google から受信]、[ファイアウォールで受信され拒否されたパケット] のパフォーマンス指標を表示します。
ワークロードの [ネットワーク パケットの合計]、[パケット平均サイズ]、[VM / 外部 / Google からの新しい接続] の値が標準値かどうか確認します。たとえば、ウェブサーバーでは接続数が多く、パケットサイズが小さくなっていても、データベースでは接続数が少なく、パケットサイズが大きくなっていることがあります。
常に送信されるネットワーク トラフィックが多い場合は、下り(外向き)帯域幅の上限が高いマシンタイプに VM のマシンタイプを変更する必要があることを示している可能性があります。
ファイアウォールによって多数の受信パケットが拒否された場合は、Google Cloud コンソールの [ネットワーク インテリジェンス] の [ファイアウォール インサイト] ページで、拒否されるパケットの原因を詳細に確認してください。
ファイアウォールで独自のトラフィックが誤って拒否されていると思われる場合は、接続テストをお試しください。
インスタンスが異なるゾーンまたはリージョンのインスタンスから大量のトラフィックを送受信する場合は、ワークロードを変更してゾーンまたはリージョン内により多くのデータを保持し、レイテンシを増やしてコストを削減することを検討してください。詳細については、Google Cloud 内の VM 間データ転送の料金をご覧ください。インスタンスが同じゾーン内の他のインスタンスに大量のトラフィックを送信する場合は、ネットワーク レイテンシを低くするためコンパクト プレースメント ポリシーの使用を検討してください。
ベアメタル インスタンス
VM インスタンスとは異なり、ベアメタル インスタンスでは、C6 と C1E のスリープ状態は無効になりません。これにより、アイドル状態のコアがスリープ状態になり、ベアメタル インスタンスのネットワーク パフォーマンスが低下する可能性があります。最大ネットワーク帯域幅のパフォーマンスが必要な場合は、オペレーティング システムでこれらのスリープ状態を無効にできます。
次のスクリプトを使用すると、インスタンスを再起動せずに C3 ベアメタル インスタンスのスリープ状態を無効にできます。
for cpu in {0..191}; do echo "1" | sudo tee /sys/devices/system/cpu/cpu$cpu/cpuidle/state3/disable echo "1" | sudo tee /sys/devices/system/cpu/cpu$cpu/cpuidle/state2/disable done
また、GRUB 構成ファイルを更新して、インスタンスの再起動後も変更を保持することもできます。
# add intel_idle.max_cstate=1 processor.max_cstate=1 to GRUB_CMDLINE_LINUX sudo vim /etc/default/grub sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo reboot
再起動後、C6 と C1E のスリープ状態が無効になっていることを確認します。
ls /sys/devices/system/cpu/cpu0/cpuidle/ state0 state1 cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name POLL C1
入出力メモリ管理ユニット(IOMMU)は、PCI デバイスのアドレス仮想化を提供する CPU 機能です。I/O translation lookaside
buffer
(IOTLB)ミスが多数発生すると、IOMMU がネットワーク パフォーマンスに悪影響を及ぼす可能性があります。
- 小さなページを使用すると、ミスが生じる可能性が高くなります。
- パフォーマンスを最適化するには、大きなページ(サイズ 2 MB~1 GB)を使用することをおすすめします。
ストレージのパフォーマンス
ハードウェアの詳細
ストレージは、次のハードウェアの制約による影響を受けます。
- すべての永続ディスクの合計サイズと vCPU 数を組み合わせると、ストレージの合計パフォーマンスが決まります。VM にさまざまなタイプの永続ディスクがアタッチされている場合、SSD 永続ディスクのパフォーマンス上限が VM 上のすべてのディスクで共有されます。詳細については、ブロック ストレージのパフォーマンスをご覧ください。
- Persistent Disk と Hyperdisk が送信データ転送トラフィックと競合する場合、最大送信ネットワーク帯域幅の 60% が Persistent Disk と Hyperdisk に使用され、残りの 40% を送信ネットワーク データ転送に使用できます。詳細については、パフォーマンスに影響するその他の要因をご覧ください。
- I/O サイズとキューの深さのパフォーマンスは、ワークロードによって異なります。ワークロードによっては、完全な I/O サイズとキューの深さのパフォーマンスの上限が十分でない可能性があります。
- VM のマシンタイプはストレージのパフォーマンスに影響します。詳細については、マシンタイプと vCPU 数をご覧ください。
VM のストレージ パフォーマンスを把握するには、スループット、オペレーション(IOPS)、I/O サイズ、I/O レイテンシ、キューの長さのパフォーマンス指標を表示します。
ディスク スループットと IOPS は、VM ワークロードが想定どおりに動作しているかどうかを示します。スループットまたは IOPS がディスクタイプの表に示されている想定された最大値よりも低い場合、I/O サイズ、キューの長さ、または I/O レイテンシのパフォーマンスの問題が存在する可能性があります。
I/O サイズは、高い IOPS と低いレイテンシが必要なワークロードでは 4~16 KiB、シーケンシャルでサイズの大きい書き込みを伴うワークロードでは 256 KiB~1 MiB になると予想されます。これらの範囲外の I/O サイズは、ディスクのパフォーマンスに問題があることを示しています。
キューの長さはキューの深さとも呼ばれ、スループットと IOPS の要因です。ディスクのパフォーマンスが優れている場合、キューの長さは、推奨される I/O キューの深さの表に一覧表示されている特定のスループットまたは IOPS レベルを達成するために推奨されるキュー長とほぼ同じでなければなりません。
I/O レイテンシは、キューの長さと I/O サイズに依存します。ディスクのキューの長さまたは I/O サイズが大きい場合は、レイテンシも高くなります。
ストレージのパフォーマンス指標でディスクのパフォーマンスに関する問題が示されている場合は、次の 1 つ以上を行います。
- Persistent Disk のパフォーマンスの最適化または Hyperdisk のパフォーマンスを最適化するの内容を確認し、パフォーマンスを向上させるためのベスト プラクティスを実装します。
- ディスクのパフォーマンスの上限を上げるには、新しい永続ディスクを VM にアタッチするか、Hyperdisk ストレージを VM に追加します。ディスクのパフォーマンスは、インスタンスにアタッチされているストレージの合計容量に基づきます。このオプションは、ファイル システムのマウント解除、インスタンスの再起動、シャットダウンを行う必要がないため、中断される可能性が最も低くなります。
- Hyperdisk を変更して、ディスクごとの IOPS とスループットの上限を引き上げます。Persistent Disk の場合、ディスクのサイズを増やすことで、ディスクごとの IOPS とスループットの上限を引き上げることができます。Persistent Disk には予約済みの未使用容量がないため、パフォーマンスの低下を気にすることなく、ディスク全体を使用できます。
- パフォーマンスを向上させるディスクタイプにディスクタイプを変更します。