内核驱动 fam15h_power

支持的芯片

  • AMD Family 15h 处理器

  • AMD Family 16h 处理器

    前缀:‘fam15h_power’

    扫描地址:PCI 空间

    数据表

    • AMD Family 15h 处理器的 BIOS 和内核开发者指南 (BKDG)

    • AMD Family 16h 处理器的 BIOS 和内核开发者指南 (BKDG)

    • AMD64 架构程序员手册第 2 卷:系统编程

作者:Andreas Herrmann <herrmann.der.user@googlemail.com>

描述

  1. 处理器 TDP(热设计功耗)

在固定频率和电压下,处理器的功耗会随着执行的工作负载而变化。降额功耗是运行特定应用程序时消耗的功耗。热设计功耗 (TDP) 是降额功耗的一个示例。

该驱动程序允许通过 TDP 算法读取提供 AMD Family 15h 和 16h 处理器功耗信息的寄存器。

对于 AMD Family 15h 和 16h 处理器,可以使用不同的处理器北桥功能寄存器计算以下功耗值

  • BasePwrWatts

    以瓦特为单位指定处理器用于 NB 和核心外部逻辑的最大功耗量。

  • ProcessorPwrWatts

    以瓦特为单位指定处理器可以支持的最大功耗量。

  • CurrPwrWatts

    以瓦特为单位指定处理器当前消耗的功耗量。

此驱动程序提供 ProcessorPwrWatts 和 CurrPwrWatts

  • power1_crit (ProcessorPwrWatts)

  • power1_input (CurrPwrWatts)

在多节点处理器上,计算的值是整个封装的值,而不是单个节点的值。因此,该驱动程序仅为多节点处理器的内部节点 0 创建 sysfs 属性。

  1. 累积功耗机制

此驱动程序还引入了一种算法,该算法应用于计算处理器在测量间隔 Tm 期间消耗的平均功耗。累积功耗机制的功能由 CPUID Fn8000_0007_EDX[12] 指示。

  • Tsample

    计算单元功耗累加器采样周期

  • Tref

    PTSC 计数器周期

  • PTSC

    性能时间戳计数器

  • N

    计算单元功耗累加器采样周期与 PTSC 周期的比率

  • Jmax

    最大计算单元累积功耗,由 MaxCpuSwPwrAcc MSR C001007b 指示

  • Jx/Jy

    计算单元累积功耗,由 CpuSwPwrAcc MSR C001007a 指示

  • Tx/Ty

    性能时间戳计数器的值,由 CU_PTSC MSR C0010280 指示

  • PwrCPUave

    CPU 平均功耗

  1. 通过执行 CPUID Fn8000_0007 来确定 Tsample 与 Tref 的比率。

    N = CPUID Fn8000_0007_ECX[CpuPwrSampleTimeRatio[15:0]] 的值。

  2. 从新的 MSR MaxCpuSwPwrAcc 读取累积能量值的全范围。

    Jmax = 返回的值。

  3. 在时间 x,SW 读取 CpuSwPwrAcc MSR 并采样 PTSC。

    Jx = 从 CpuSwPwrAcc 读取的值,Tx = 从 PTSC 读取的值。

  4. 在时间 y,SW 读取 CpuSwPwrAcc MSR 并采样 PTSC。

    Jy = 从 CpuSwPwrAcc 读取的值,Ty = 从 PTSC 读取的值。

  5. 计算计算单元在时间段 (y-x) 内的平均功耗。结果单位为微瓦

    if (Jy < Jx) // Rollover has occurred
            Jdelta = (Jy + Jmax) - Jx
    else
            Jdelta = Jy - Jx
    PwrCPUave = N * Jdelta * 1000 / (Ty - Tx)
    

此驱动程序提供 PwrCPUave 和间隔(默认为 10 毫秒,最大值为 1 秒)

  • power1_average (PwrCPUave)

  • power1_average_interval (间隔)

power1_average_interval 可以在 /etc/sensors3.conf 文件中更新,如下所示

芯片 fam15h_power-*

设置 power1_average_interval 0.01

然后使用 “sensors -s” 保存它。