使用 PMU 分析 CPU 性能


本页面介绍如何使用性能监控单元 (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:包含架构事件并启用核心 PMU 事件,包括 L2 缓存事件。
    • enhanced:包含标准事件并启用 CPU 核心之外的任何本地事件以及 LLC PMU 事件。此选项仅适用于具有特定数量的 vCPU 的虚拟机。如需了解详情,请参阅 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 驱动程序已初始化。

后续步骤