Linux rapl 度量集编辑

此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,按原样提供,没有任何保证。测试版功能不适用于官方 GA 功能的支持服务级别协议。

RAPL 度量集报告英特尔 RAPL(运行平均功耗限制)API 报告的以瓦特为单位的功耗。实际上,RAPL 用于设置 CPU 的功耗限制,但它也可以用于监控功耗。

从 Sandy Bridge 开始,大多数英特尔 CPU 都以某种形式支持 RAPL,但是,此实现需要通过 /dev/cpu/[CPU]/msr 公开英特尔 MSR(特定于模型的寄存器)的 Linux 发行版。您可以运行以下命令来检查您的 Linux 发行版和 CPU 是否支持 RAPL:

sudo rdmsr 0x606

如果该命令返回一个十六进制值,例如 a1003,则表示支持 RAPL。

RAPL 将 CPU 分为四个域,每个域对应于硬件本身内的组件:PackageDRAMPP0(通常是内核的集体功耗)和 PP1(通常是集成 GPU)。并非所有软件包都适用于所有 CPU,RAPL 度量集将报告它找到的所有 RAPL 域。

msr-safe 使用编辑

此度量集还支持 msr-safe,它允许用户在没有 root 权限的情况下访问 MSR 设备。Linux 模块配置中的 rapl.use_msr_safe 标志将启用 /dev/cpu/[CPU]/msr_safe 设备的使用。

对于现有的 msr-safe 安装,以下允许列表将打开所有 RAPL MSR 以供读取

0x00000606 0x0000000000000000 # "SMSR_RAPL_POWER_UNIT"

0x00000610 0x0000000000000000 # "SMSR_PACKAGE_POWER_LIMIT"
0x00000611 0x0000000000000000 # "SMSR_PACKAGE_ENERGY_STATUS"
0x00000613 0x0000000000000000 # "SMSR_PACKAGE_PERF_STATUS"
0x00000614 0x0000000000000000 # "SMSR_PACKAGE_POWER_INFO"

0x00000618 0x0000000000000000 # "SMSR_DRAM_POWER_LIMIT"
0x00000619 0x0000000000000000 # "SMSR_DRAM_ENERGY_STATUS"
0x0000061b 0x0000000000000000 # "SMSR_DRAM_PERF_STATUS"
0x0000061c 0x0000000000000000 # "SMSR_DRAM_POWER_INFO"

0x00000638 0x0000000000000000 # "SMSR_PP0_POWER_LIMIT"
0x00000639 0x0000000000000000 # "SMSR_PP0_ENERGY_STATUS"
0x0000063a 0x0000000000000000 # "SMSR_PP0_POLICY"
0x0000063b 0x0000000000000000 # "SMSR_PP0_PERF_STATUS"

0x00000640 0x0000000000000000 # "SMSR_PP1_POWER_LIMIT"
0x00000641 0x0000000000000000 # "SMSR_PP1_ENERGY_STATUS"
0x00000642 0x0000000000000000 # "SMSR_PP1_POLICY"

字段

有关度量集中每个字段的说明,请参阅 导出字段 部分。

这是一个由该度量集生成的示例文档

{
    "@timestamp": "2017-10-12T08:05:34.853Z",
    "event": {
        "dataset": "linux.rapl",
        "duration": 115000,
        "module": "linux"
    },
    "linux": {
        "rapl": {
            "core": 0,
            "dram": {
                "joules": 38106.59,
                "watts": 5.912
            },
            "package": {
                "joules": 25764.9984,
                "watts": 11.5784
            },
            "pp0": {
                "joules": 27353.5644,
                "watts": 2.7159
            }
        }
    },
    "metricset": {
        "name": "rapl",
        "period": 10000
    },
    "service": {
        "type": "linux"
    }
}