文档文档

Intel 性能监控单元插件

此插件收集可通过 Linux Perf 子系统获得的 Intel 性能监控单元指标。

PMU 指标提供对 IA 处理器内部组件(包括核心和非核心单元)的性能和健康状况的洞察。随着核心数量的增加和处理器拓扑变得越来越复杂,深入了解这些指标对于确保最佳 CPU 性能和利用率至关重要。

性能计数器是 CPU 硬件寄存器,用于计算硬件事件,例如执行的指令、缓存未命中或分支预测错误。它们是分析应用程序以跟踪动态控制流和识别热点的基础。

推出版本: Telegraf v1.21.0 标签: hardware, system 操作系统支持: linux

要求

该插件使用了 iaevents 库,该库简化了对 Linux 内核 perf 接口的访问。

Intel PMU 插件仅适用于 Linux 64 位系统。

特定架构的事件定义 JSON 文件可以在 Github 仓库中找到。下载适合您系统的事件定义,例如使用 event_download.py PMU 工具,并将其保存在您系统中的安全位置。

全局配置选项

插件支持其他全局和插件配置设置,用于修改指标、标签和字段,创建别名以及配置插件顺序等任务。更多详情请参阅 CONFIGURATION.md

配置

# Intel Performance Monitoring Unit plugin exposes Intel PMU metrics available through Linux Perf subsystem
# This plugin ONLY supports Linux on amd64
[[inputs.intel_pmu]]
  ## List of filesystem locations of JSON files that contain PMU event definitions.
  event_definitions = ["/var/cache/pmu/GenuineIntel-6-55-4-core.json", "/var/cache/pmu/GenuineIntel-6-55-4-uncore.json"]

  ## List of core events measurement entities. There can be more than one core_events sections.
  [[inputs.intel_pmu.core_events]]
    ## List of events to be counted. Event names shall match names from event_definitions files.
    ## Single entry can contain name of the event (case insensitive) augmented with config options and perf modifiers.
    ## If absent, all core events from provided event_definitions are counted skipping unresolvable ones.
    events = ["INST_RETIRED.ANY", "CPU_CLK_UNHALTED.THREAD_ANY:config1=0x4043200000000k"]

    ## Limits the counting of events to core numbers specified.
    ## If absent, events are counted on all cores.
    ## Single "0", multiple "0,1,2" and range "0-2" notation is supported for each array element.
    ##   example: cores = ["0,2", "4", "12-16"]
    cores = ["0"]

    ## Indicator that plugin shall attempt to run core_events.events as a single perf group.
    ## If absent or set to false, each event is counted individually. Defaults to false.
    ## This limits the number of events that can be measured to a maximum of available hardware counters per core.
    ## Could vary depending on type of event, use of fixed counters.
    # perf_group = false

    ## Optionally set a custom tag value that will be added to every measurement within this events group.
    ## Can be applied to any group of events, unrelated to perf_group setting.
    # events_tag = ""

  ## List of uncore event measurement entities. There can be more than one uncore_events sections.
  [[inputs.intel_pmu.uncore_events]]
    ## List of events to be counted. Event names shall match names from event_definitions files.
    ## Single entry can contain name of the event (case insensitive) augmented with config options and perf modifiers.
    ## If absent, all uncore events from provided event_definitions are counted skipping unresolvable ones.
    events = ["UNC_CHA_CLOCKTICKS", "UNC_CHA_TOR_OCCUPANCY.IA_MISS"]

    ## Limits the counting of events to specified sockets.
    ## If absent, events are counted on all sockets.
    ## Single "0", multiple "0,1" and range "0-1" notation is supported for each array element.
    ##   example: sockets = ["0-2"]
    sockets = ["0"]

    ## Indicator that plugin shall provide an aggregated value for multiple units of same type distributed in an uncore.
    ## If absent or set to false, events for each unit are exposed as separate metric. Defaults to false.
    # aggregate_uncore_units = false

    ## Optionally set a custom tag value that will be added to every measurement within this events group.
    # events_tag = ""

修饰符

Perf 修饰符会调整特定事件的 perf 属性以满足特定要求。有关 perf 属性结构的详细信息,请参阅 perf_event_open 系统调用手册。

配置的 events 列表元素的通用模式

EVENT_NAME(:(config|config1|config2)=(0x[0-9a-f]{1-16})(p|k|u|h|H|I|G|D))*

其中

修饰符底层属性描述
configperf_event_attr.config特定于类型的配置
config1perf_event_attr.config1config 的扩展
config2perf_event_attr.config2config1 的扩展
pperf_event_attr.precise_ip跳跃约束
kperf_event_attr.exclude_user不计入用户
uperf_event_attr.exclude_kernel不计入内核
h / Hperf_event_attr.exclude_guest不计入访客
Iperf_event_attr.exclude_idle空闲时不计入
Gperf_event_attr.exclude_hv不计入虚拟机监控程序
Dperf_event_attr.pinned必须始终开启 PMU

测量

该插件允许测量核心和非核心事件。在插件初始化期间,用户提供的事件名称将与 JSON 文件中包含的事件定义进行比较,并转换为 perf 属性。接下来,这些事件将被激活以开始计数。在每个 telegraf 间隔内,该插件都会读取每个先前激活事件的适当测量值。

每个单独的核心事件可以在每个可用的 CPU 核心上分别计数。相比之下,非核心事件可以放置在指定 CPU 封装内的多个 PMU 中。该插件允许选择应该执行计数的核心 ID(核心事件)套接字 ID(非核心事件)。非核心事件会在所有套接字 PMU 上单独激活,并可以公开为单独的测量值,或汇总为一个测量值。

获得的测量值存储为三个值:原始值 (Raw)已启用 (Enabled)运行中 (Running)。原始值是事件的总计数。已启用和运行中是事件启用和运行的总时间。通常它们是相同的。如果启动的事件多于 PMU 上可用的计数器槽位,则会发生多路复用,事件仅在部分时间内运行。因此,该插件提供了第四个值,称为缩放值 (scaled),它使用以下公式计算:raw * enabled / running

事件针对所有正在运行的进程进行测量。

核心事件组

Perf 允许将事件组合成一个组。perf 事件组作为一个单元被调度到 CPU:只有当组中的所有事件都能被放入 CPU 时,它才会被放入 CPU。这意味着成员事件的值可以有意义地相互比较——相加、相除(得到比率)等等,因为它们已经为同一组执行的指令进行了计数 (来源)

注意: 请注意,当尝试创建大小超出可用核心 PMU 计数器的核心事件组时,插件将抛出错误。perf 系统调用的错误消息将显示为“无效参数”。如果您想检查您的 Intel CPU 支持多少个 PMU,可以使用 cpuid 命令。

关于文件描述符的说明

该插件打开的文件描述符数量取决于监视的 CPU 数量和监视的计数器数量。这很容易超过每个进程允许的文件描述符的默认限制。根据配置,可能需要增加允许打开的文件描述符的数量限制。例如,可以使用 ulimit -n 命令 来实现。

Metrics

在每个 Telegraf 间隔,Intel PMU 插件会传输以下数据

指标字段

字段类型描述
enableduint64时间计数器,包含关联的 perf 事件被启用的时间
runninguint64时间计数器,包含事件实际被计数的事件
rawuint64值计数器,包含事件在实际被计数的事件期间的计数
scaleduint64值计数器,使用 scaled = raw * (enabled / running) 公式,包含事件持续计数时的近似值

指标标签 - 通用

标签描述
host由 Telegraf 读取的主机名
event事件的名称

指标标签 - 核心事件

标签描述
cpu由 Linux 操作系统标识的 CPU ID(当 HT 开启时为逻辑 CPU ID,当 HT 关闭时为物理 CPU ID)
events_tag(可选)在“intel_pmu.core_events”配置元素中定义的标签

指标标签 - 非核心事件

标签描述
socket由 Linux 操作系统标识的套接字编号(physical_package_id)
unit_type事件能力的 PMU 类型,该事件是在其上计数的,提供了事件被计数 PMU 的类别,例如 cbox 用于 uncore_cbox_1,r2pcie 用于 uncore_r2pcie 等。
unit事件能力的 PMU 名称,该事件是在其上计数的,如 /sys/bus/event_source/devices/ 中列出的,例如 uncore_cbox_1,uncore_imc_1 等。仅对非聚合的非核心事件存在
events_tag(可选)在“intel_pmu.uncore_events”配置元素中定义的标签

示例输出

事件组

pmu_metric,cpu=0,event=CPU_CLK_THREAD_UNHALTED.REF_XCLK,events_tag=unhalted,host=xyz enabled=2871237051i,running=2871237051i,raw=1171711i,scaled=1171711i 1621254096000000000
pmu_metric,cpu=0,event=CPU_CLK_UNHALTED.THREAD_P_ANY,events_tag=unhalted,host=xyz enabled=2871240713i,running=2871240713i,raw=72340716i,scaled=72340716i 1621254096000000000
pmu_metric,cpu=1,event=CPU_CLK_THREAD_UNHALTED.REF_XCLK,events_tag=unhalted,host=xyz enabled=2871118275i,running=2871118275i,raw=1646752i,scaled=1646752i 1621254096000000000
pmu_metric,cpu=1,event=CPU_CLK_UNHALTED.THREAD_P_ANY,events_tag=unhalted,host=xyz raw=108802421i,scaled=108802421i,enabled=2871120107i,running=2871120107i 1621254096000000000
pmu_metric,cpu=2,event=CPU_CLK_THREAD_UNHALTED.REF_XCLK,events_tag=unhalted,host=xyz enabled=2871143950i,running=2871143950i,raw=1316834i,scaled=1316834i 1621254096000000000
pmu_metric,cpu=2,event=CPU_CLK_UNHALTED.THREAD_P_ANY,events_tag=unhalted,host=xyz enabled=2871074681i,running=2871074681i,raw=68728436i,scaled=68728436i 1621254096000000000

非核心事件未聚合

pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_0,unit_type=cbox enabled=2870630747i,running=2870630747i,raw=183996i,scaled=183996i 1621254096000000000
pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_1,unit_type=cbox enabled=2870608194i,running=2870608194i,raw=185703i,scaled=185703i 1621254096000000000
pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_2,unit_type=cbox enabled=2870600211i,running=2870600211i,raw=187331i,scaled=187331i 1621254096000000000
pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_3,unit_type=cbox enabled=2870593914i,running=2870593914i,raw=184228i,scaled=184228i 1621254096000000000
pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_4,unit_type=cbox scaled=195355i,enabled=2870558952i,running=2870558952i,raw=195355i 1621254096000000000
pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit=uncore_cbox_5,unit_type=cbox enabled=2870554131i,running=2870554131i,raw=197756i,scaled=197756i 1621254096000000000

非核心事件已聚合

pmu_metric,event=UNC_CBO_XSNP_RESPONSE.MISS_XCORE,host=xyz,socket=0,unit_type=cbox enabled=13199712335i,running=13199712335i,raw=467485i,scaled=467485i 1621254412000000000

时间多路复用

pmu_metric,cpu=0,event=CPU_CLK_THREAD_UNHALTED.REF_XCLK,host=xyz raw=2947727i,scaled=4428970i,enabled=2201071844i,running=1464935978i 1621254412000000000
pmu_metric,cpu=0,event=CPU_CLK_UNHALTED.THREAD_P_ANY,host=xyz running=1465155618i,raw=302553190i,scaled=454511623i,enabled=2201035323i 1621254412000000000
pmu_metric,cpu=0,event=CPU_CLK_UNHALTED.REF_XCLK,host=xyz enabled=2200994057i,running=1466812391i,raw=3177535i,scaled=4767982i 1621254412000000000
pmu_metric,cpu=0,event=CPU_CLK_UNHALTED.REF_XCLK_ANY,host=xyz enabled=2200963921i,running=1470523496i,raw=3359272i,scaled=5027894i 1621254412000000000
pmu_metric,cpu=0,event=L1D_PEND_MISS.PENDING_CYCLES_ANY,host=xyz enabled=2200933946i,running=1470322480i,raw=23631950i,scaled=35374798i 1621254412000000000
pmu_metric,cpu=0,event=L1D_PEND_MISS.PENDING_CYCLES,host=xyz raw=18767833i,scaled=28169827i,enabled=2200888514i,running=1466317384i 1621254412000000000

变更日志

版本描述
v1.0.0初始版本
v1.1.0添加了对 新 perfmon 事件格式的支持。旧事件格式仍然被接受(日志中会打印警告消息)

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2