PMU を使用して CPU パフォーマンスを分析する


このページでは、Performance Monitoring Unit(PMU)イベントを使用して、Google Kubernetes Engine(GKE)クラスタノードの CPU パフォーマンスを分析する方法について説明します。

このページは、パフォーマンスに敏感なワークロードがあり、開発、デバッグ、ベンチマーク、継続的なモニタリング中に GKE ノードでのワークロードの CPU 実行を調べる必要があるクラスタ管理者を対象としています。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

要件と制限事項

PMU イベントを有効にする場合は、次の要件と制限事項に注意してください。

  • クラスタは Standard モードである必要があります。
  • クラスタでノードの自動プロビジョニングが有効になっている場合、自動プロビジョニングによって作成されたノードプールで PMU イベントを有効にすることはできません。PMU イベントを有効にした後にノードの自動プロビジョニングを有効にした場合、既存のノードプールには影響しません。
  • クラスタ ノードプールで C4 または C4A マシンタイプが実行されている必要があります。

GKE クラスタを作成する

デフォルトのノードプールで PMU イベントを有効にしてクラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --performance-monitoring-unit=PMU_LEVEL \
    --machine-type=MACHINE_TYPE

次のように置き換えます。

  • CLUSTER_NAME: 新しいクラスタの名前。
  • COMPUTE_LOCATION: 新しいクラスタの Compute Engine のロケーション
  • PMU_LEVEL: 収集する PMU イベントのタイプ。詳細については、Compute Engine のドキュメントの PMU の仕組みをご覧ください。サポートされている値は次のとおりです。
    • architectural: 最下位レベルキャッシュ(LLC)以外のイベントに関連するアーキテクチャ PMU イベントを有効にします。
    • standard: アーキテクチャ イベントが含まれ、L2 キャッシュ イベントなどのコア PMU イベントが有効になります。
    • enhanced: 標準イベントが含まれ、CPU コア外のローカル イベントと LLC PMU イベントが有効になります。このオプションは、特定の数の vCPU を持つ VM でのみ使用できます。詳細については、Compute Engine のドキュメントの制限事項をご覧ください。
  • MACHINE_TYPE: ノードの Compute Engine マシンタイプ。サポートされているマシンタイプの一覧については、Compute Engine ドキュメントの制限事項をご覧ください。

gcloud container node-pools create コマンドを使用して、既存のクラスタの新しいノードプールを作成することもできます。

クラスタに接続する

クラスタと通信を行うように kubectl を構成します。

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=COMPUTE_LOCATION

PMU が有効になっていることを確認する

カーネル メッセージを調べて、クラスタノードで PMU が有効になっていることを確認します。

  1. クラスタ内のノードのリストを取得します。

    kubectl get nodes
    

    出力は次のようになります。

    NAME                                  STATUS   ROLES    AGE     VERSION
    gke-c1-default-pool-44be3e13-prr1     Ready    <none>   5d23h   v1.27.13-gke.1070000
    gke-c1-default-pool-7abc4a17-9dlg     Ready    <none>   2d21h   v1.27.13-gke.1070000
    gke-c1-default-pool-ed969ef6-4gzp     Ready    <none>   5d      v1.27.13-gke.1070000
    

    いずれかのノードの名前を記録します。

  2. ノードの Compute Engine のロケーションを取得します。

    gcloud compute instances list --filter=NODE_NAME
    

    NODE_NAME は、前の手順で取得したノードの名前に置き換えます。

    出力は次のようになります。

    NAME                               ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    gke-c1-default-pool-44be3e13-prr1  us-central1-c  c4-standard-4     true         10.128.0.67  34.170.44.164  RUNNING
    

    Compute Engine ZONE の名前を記録します。この例では us-central1-c です。

  3. SSH を使用してクラスタノードに接続します。

    gcloud compute ssh NODE_NAME \
        --zone=COMPUTE_ZONE
    

    COMPUTE_ZONE は、前の手順で取得した Compute Engine ゾーンの名前に置き換えます。

  4. カーネル メッセージを調べます。

    sudo dmesg |grep -A10 -i "Performance"
    

    出力は次のようになります。

    [    0.307634] Performance Events: generic architected perfmon, full-
    width counters, Intel PMU driver.
    # Several lines omitted
    

    この出力は、PMU ドライバが初期化されていることを示しています。

次のステップ