功耗和散热#

本章提供有关 CPU 功耗和散热管理设置的信息。

C 状态#

C 状态是指 CPU 空闲功耗状态,Grace 包括以下 C 状态

  • C0:活动/运行状态。

    这是 CPU 核心在活动状态时的状态。

  • C1:时钟门控状态。

    当 CPU 核心执行 WFI/WFE 指令时,将进入此状态。进入/退出此状态的延迟可忽略不计。

高级配置和电源接口 (ACPI) 中的 LPI 表提供了有关 C 状态的信息,以供任何 CPU 空闲调速器(如 Linux 中的 cpuidle 框架)使用。

对于启用了 cpuidle 调速器的系统,要读取通过空闲框架进入 C1 状态的次数,请运行以下命令

$ cat /sys/devices/system/cpu/cpu<n>/cpuidle/state0/usage

State0 条目反映了 WFI 或 C1 时钟门控状态,运行以下命令以读取 cpuidle/state0 目录中的 desc 节点并确认

$ cat /sys/devices/system/cpu/cpu<n>/cpuidle/state0/desc

对于不使用 cpuidle 调速器的系统,当执行 WFI/WFE 指令时,CPU 核心仍然可以进入时钟门控状态,但不会有统计数据可用。

P 状态#

P 状态是指性能状态,Grace 不提供显式的 P 状态。相反,Grace 通过 ACPI 的 CPPC 机制公开最大和最小性能能力。CPPC 为用户和操作系统提供了在允许的范围内请求任何性能的能力,而不是离散的 P 状态。有关更多信息,请参阅CPU 性能和频率管理

CPU 性能和频率管理#

每个 CPU 核心都可以以其自己的独立频率运行,并且频率由使用的频率策略调速器确定。Linux 提供了以下频率调速器

  • Performance governor:旨在获得最大性能,并将 CPU 核心的性能/频率请求设置为最大可能值。

    该请求不是基于活动,而是固定在最高值。

  • Userspace governor:绕过内核调速器,并为用户空间应用程序提供频率控制。

    要设置核心的频率,虚拟机监控程序或更高级别的软件实体可以从应用程序获取输入。内核不会根据其他信息修改频率,但会遵守基于散热的频率上限。

  • Schedutil governor:结合来自调度器的信息,这些信息是当前在核心上调度的线程、核心上的活动、负载估计等,以确定核心的最佳频率。

    此调速器的目标是提供最佳性能,同时通过根据调度器可见的工作负载匹配频率来节省功耗。

  • Ondemand governor:根据 CPU 核心的尾随负载调整频率。

    此调速器预测未来负载并相应地提高频率。

有关更多信息,请参阅https://linuxkernel.org.cn/doc/Documentation/cpu-freq/governors.txt

Grace 中的默认频率调速器是 performance governor,它将核心的频率设置为最大值。最大频率通常对应于最大可能的性能,并且高于可以实现标称(持续)性能的频率。当以最大频率运行时违反散热限制时,散热管理解决方案会限制频率。有关更多信息,请参阅功耗和散热管理

可以使用 cpupower 命令或直接使用 sysfs 接口在 Linux 服务器上管理 CPU 频率。下一节提供了一个简明指南,其中结合了设置固定频率和缩放最大频率的方法。

设置固定频率#

本节提供有关设置固定频率的信息。

  • ``cpupower`` 命令

    此命令允许您完成以下任务

  • 切换到 userspace governor 以手动设置频率

    $ sudo cpupower frequency-set -g userspace
    
  • 设置所需的频率(例如,3.2 GHz = 3200000 kHz)

    $ sudo cpupower frequency-set -f 3200000
    
  • ``sysfs`` 方法

    此命令允许您完成以下任务

  • 切换到 userspace governor(如果支持)

    $ echo userspace | sudo tee
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    
  • 直接设置所需的频率(将 [FREQUENCY] 替换为您的值,单位为 kHz)

    $ echo [FREQUENCY] | sudo tee
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_setspeed
    

设置缩放最大频率#

本节提供有关设置缩放最大频率的信息。

  • ``cpupower`` 命令

  • 切换到 performance governor 以限制最大缩放频率

    $ sudo cpupower frequency-set -g performance
    
  • 设置缩放最大频率(例如,3.2 GHz = 3200000 kHz)

    $ sudo cpupower frequency-set -f 3200000
    
  • ``sysfs`` 方法

  • 切换到 performance governor(如果支持)

    $ echo performance | sudo tee
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    
  • 限制最大缩放频率(通过将 [MAX_FREQUENCY] 替换为您的值,单位为 kHz)

    $ echo [MAX_FREQUENCY] | sudo tee
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
    

以下是您可以用来读取当前请求和测量的设置的通用 CPU 频率命令

  • CPU 核心 <n> 的软件频率请求 (kHz)。

    $ cat /sys/devices/system/cpu/cpu<n>/cpufreq/scaling_cur_freq
    
  • 测量的频率 (kHz)。

    $ cat /sys/devices/system/cpu/cpu<n>/cpufreq/cpuinfo_cur_freq
    

注意

这使用了 ARM 提供的 actmon (AMU),其中测量了源时钟和参考时钟,并使用该比率来计算实际频率。使用 Linux 中使用的默认测量窗口,频率读取可能存在高达 3% 的误差。为了提高精度,应在上游 Linux 代码中增加测量窗口。

GPU 和模块功耗管理#

GPU 在以下范围内提供功耗限制

  • 限制 Grace + Hopper 超级芯片(模块)的功耗,并将其保持在提供的功耗限制内。

  • 限制 GPU 的功耗,并将其保持在提供的功耗限制内。

_images/gpu_and_module_power_management.jpg

GPU 和模块功耗管理#

这是通过 GPU 中的自动功率控制完成的,因为 GPU 监控 Grace、模块和 GPU 的功率遥测。模块范围内的功耗限制监控消耗的 Grace 功率,这会从模块功耗限制中移除功率,并将剩余功率提供给 GPU。

GPU 可以在新的功耗限制下工作,也可以坚持为 GPU 显式设置的限制,其中以两个限制中较低的那个为准。这可以有效地平衡 Grace 和 GPU 之间的功耗,通过机会性地提高 GPU 功耗预算来提高整体应用程序性能。GPU 通过使用 DVFS 实现功耗限制。

功耗管理#

系统

旋钮

描述

GPU

nvidia-smi -q -d POWER

转储模块和 GPU 功耗遥测

GPU

nvidia-smi -pl <limit in Watt> -sc 0

设置 GPU 的限制。如果此限制低于通过“自动功率控制”评估的限制,则将应用于 GPU

GPU

nvidia-smi -pl <limit in Watt> -sc 1

设置模块的限制

以下是 NVSMI 日志的输出

nvidia@localhost:~$ nvidia-smi -q -d POWER
==============NVSMI LOG==============
Timestamp                : Fri Oct 6 22:46:55 2023
Driver Version           : 535.122
CUDA Version             : 12.2

Attached GPUs            : 1
GPU 00000009:01:00.0
    GPU Power Readings
        Power Draw               : 77.61 W
        Current Power Limit      : 900.00 W
        Requested Power Limit    : 900.00
        Default Power Limit      : 900.00 W
        Min Power Limit          : 100.00 W
        Max Power Limit          : 900.00 W
    Power Samples
        Duration                 : 2.36 sec
        Number of Samples        : 119
        Max                      : 78.26 W
        Min                      : 76.65 W
        Avg                      : 77.48 W
    Module Power Readings
        Power Draw               : 147.49 W
        Current Power Limit      : 1000.00 W
        Requested Power Limit    : 1000.00 W
        Default Power Limit      : 1000.00 W
        Min Power Limit          : 200.00 W
        Max Power Limit          : 1000.00 W

功耗和散热管理#

Grace 提供以下类型的散热管理类型

  • 限制功耗并将其保持在提供的功耗限制内。

  • 基于热传感器 (Tj) 的管理。

功率遥测#

本节提供有关 Grace 功率遥测的信息,以及将 Grace 功率遥测与 Intel 和 AMD 功率遥测进行比较的指南。当与其他 CPU 架构进行功率效率比较时,这可能很有用。

Grace 功率遥测#

Grace 通过 hwmon 公开功率遥测,hwmon 使用 ACPI 功率计接口。您可以通过以下方式之一读取功率遥测信息

  • 显示功率计的名称。

    这提供了有关在 hwmon 节点 X 上报告哪个功率的信息。

    cat /sys/class/hwmon/hwmonX/device/power1_oem_info
    
  • 显示 hwmon 节点 X 上以微瓦 (µW) 为单位的功耗,默认情况下是过去 50 毫秒间隔的平均功率

    cat /sys/class/hwmon/hwmonX/device/power1_average
    
  • 显示 hwmon 节点 X 上以毫秒为单位的功率统计间隔

    cat /sys/class/hwmon/hwmonX/device/power1_average_interval
    
  • 更改 hwmon 节点 X 上以毫秒为单位的功率统计间隔(默认为 50)

    echo <value> | sudo tee
    /sys/class/hwmon/hwmonX/device/power1_average_interval
    

下表提供了有关可用功率遥测的信息。

注意

要查看 hwmon sysfs 节点,您需要在 kconfig 中使用 CONFIG_SENSORS_ACPI_POWER=m

有关补丁的更多信息,请参阅NVIDIA Grace 平台支持软件补丁和配置指南。

下表提供了有关可用功率遥测的信息。

可用功率遥测#

系统

遥测

详细信息

Grace 超级芯片

Grace 功耗插槽 0

插槽 0 的总功耗,包括 DRAM 功耗和稳压器损耗。

CPU 功耗插槽 0

插槽 0 的 CPU 轨功耗。

SysIO 功耗插槽 0

SOC 轨功耗。

Grace 功耗插槽 1

插槽 1 的总功耗,包括 DRAM 功耗和稳压器损耗。

CPU 功耗插槽 1

插槽 1 的 CPU 轨功耗。

SysIO 功耗插槽 1

SOC 轨功耗。

Grace Hopper 超级芯片

模块功耗

插槽 0

的总功耗

CG1 模块,包括 DRAM 功耗和稳压器损耗。这还包括 GPU 和 GPU HBM 功耗。

Grace 功耗插槽 0

Grace 插槽的功耗。

CPU 功耗插槽 0

CPU 轨功耗。

SysIO 功耗插槽 0

SOC 轨功耗。

_images/grace_power_telemetry_sensors.png

Grace 功率遥测传感器#

_images/grace_superchip_telemetry_sensors.png

Grace 超级芯片遥测传感器#

如上表所述,报告的插槽总功耗包括 CPU 功耗、DRAM 功耗和稳压器损耗。同样,报告的 CPU 核心功耗包括稳压器损耗。稳压器损耗占 TDP 功耗限制的 15%。DRAM 功耗可以根据下表中的公式,基于总流量进行估算。

DRAM 功耗 (mW, 不包括 稳压器 损耗): -a*DRAM_BW_GBps^2 + b*DRAM_BW_GBps + c

估算 DRAM 功耗#

配置

a

b

c

128 GB,4266 MHz

00.0000136

28.9

2334

128 GB,3200 MHz

00.0000175

28.3

2043

512 GB,3200 MHz

00.0000603

56.2

3396

DRAM 带宽可以使用Grace CPU 性能指标中描述的 PMU 指标来确定。

比较 Grace 和 Intel® 功率遥测#

Intel® CPU 通过 Intel® Performance Counter Monitor (Intel® PCM) API 公开功率遥测。当将 Grace CPU 的功耗与 Intel® CPU 进行比较时,可以使用这些 API 来收集可比较的指标。PCM API 在 GitHub 上提供,网址为 intel/pcm

有关更多信息,请参阅以下文档

可以运行 PCM 的 pcm-power 实用程序来收集多个间隔的性能指标以及每个间隔的持续时间。例如,要以一秒间隔捕获一分钟的样本,请运行以下命令

sudo pcm-power 1.00 -i=60 -silent

对于每个间隔,pcm-power 都会打印每个插槽(S0、S1)的功耗,包括 CPU 功耗和 DRAM 功耗

$ sudo pcm-power -silent 1.0 -i=60 | grep '^S.; Consumed
S0; Consumed energy units: 3563683; Consumed Joules: 217.51; Watts: 217.51
S0; Consumed DRAM energy units: 533250; Consumed DRAM Joules: 32.55; DRAM Watts: 32.55
S1; Consumed energy units: 3350361; Consumed Joules: 204.49; Watts:204.49
S1; Consumed DRAM energy units: 597938; Consumed DRAM Joules: 36.50;DRAM Watts: 36.50
_images/intel_power_telemetry_sensors.png

Intel 功率遥测传感器#

如上图所示,每个插槽的功耗不包括稳压器损耗,因此与可用功率遥测表中所述的 CPU 功耗插槽 0 和 CPU 功耗插槽 1 遥测不可直接比较。要将 Intel CPU 功耗与 Grace CPU 功耗进行比较,请去除 Grace 稳压器损耗。

有关通过 sysfs 中的 Linux powercap 内核接口提供的功耗指标的更多信息,请参阅Power Capping Framework

要仅测量核心的功耗,不包括稳压器损耗或 DRAM 功耗,每个 CPU 的指标可在以下位置获得

对于 CPU 0

cat /sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:0/energy_uj

对于 CPU 1

cat /sys/class/powercap/intel-rapl/intel-rapl:1/intel-rapl:1:0/energy_uj

这些计数器提供每个 CPU 消耗的微焦耳的运行总数。

来自此接口的测量结果与可用功率遥测表中描述的 CPU 功耗插槽 0 和 CPU 功耗插槽 1 遥测相当。

比较 Grace 和 AMD 功率遥测#

AMD 的 AMD μProf 软件包包括提供功率遥测的实用程序。当您将 Grace CPU 的功耗与 AMD CPU 进行比较时,可以使用这些 API 来收集可比较的指标。

要下载并安装 AMD μProf,请访问 https://www.amd.com/en/developer/uprof.html

有关可用指标的平台特定信息,请参阅AMD μProf 用户指南

要捕获每个插槽功耗的测量值 60 秒,每秒测量一次,请运行以下命令

AMDuProfCLI-bin timechart --event socket=0-1,power --interval 1000 --duration 60 -o powerOutput

生成的输出文件(采用 CSV 格式)将在命令输出中报告,例如

Live Profile Output file : /home/nvex/powerOutput/AMDuProf-SWP-Timechart_Aug-05-2023_00-03-29/timechart.csv

它包含每个间隔的 CSV 格式的功率测量值,每个插槽一列,例如

RecordId,Timestamp,socket0-package-power,socket1-package-power
1,0:3:30:462, 95.56, 91.05
2,0:3:31:462, 95.09, 90.63
3,0:3:32:462, 95.17, 90.23
4,0:3:33:462, 95.70, 90.70
_images/amd_power_telemetry_sensors.png

AMD 功率遥测传感器#

有关测量 AMD 处理器 DRAM 功耗的指南取决于平台实施细节。请联系您的平台供应商,以获取有关测量功耗以与 Grace 的 LPDDR5x 功率读数进行比较的指南。

AMD μProf 还允许捕获每个核心的功耗利用率测量值。例如,在 64 核 AMD 处理器上

AMDuProfCLI-bin timechart --event core=0-63,power --interval 1000 --duration 60 -o powerOutput

生成的文件包含每个间隔的 CSV 格式的功率测量值,每个核心一列。将这些核心相加即可获得所有核心的总功率输出,以确定 CPU 的总功耗。如上图所示,此测量值不包括稳压器损耗。当从 Grace CPU 测量值中去除稳压器损耗时,总功率与可用功率遥测表中描述的 Grace CPU 轨功耗 CPU 功耗插槽 0 或 CPU 功耗插槽 1 遥测相当。

功耗限制#

功耗限制限制了平均功耗,通常根据系统的散热能力进行设置。当平均功耗超过此限制时,Grace 会限制功率。用户可以将功耗限制降低到 BIOS 中设置的默认值以下。此设置通过 Hwmon 节点公开,可以应用于插槽总功耗。功耗限制可在插槽级别应用,而不能在 vdd_cpu 或 vdd_soc 功率级别应用。

要设置功耗限制,请运行以下命令

echo <power value in micro Watts> > /sys/class/hwmon/hwmonX/device/power1_cap

对于 Grace Hopper 超级芯片系统,Grace CPU 的功耗限制允许 Hopper GPU 消耗更多功率,这可以提高 GPU 密集型应用程序的性能。GPU 的功耗限制可以根据GPU 和模块功耗管理应用。

CPU 温度管理#

ACPI 散热管理 (Tj) 使用来自温度传感器的遥测数据,以确保没有局部热点超过工作温度。功耗限制确保插槽/模块的平均功耗等于或低于系统的散热能力。但是,这并未考虑基于核心之间工作负载分布的不对称功率分配。ACPI 表提供了被动和临界温度限制,散热调速器尝试限制 CPU 以将温度保持在或低于被动温度限制。如果温度超过临界温度限制,则会启动关机。

要读取用于 ACPI 软件节流的关键和被动跳变点

cat /sys/class/thermal/thermal_zone*/trip_point_0_type
cat /sys/class/thermal/thermal_zone*/trip_point_0_temp
cat /sys/class/thermal/thermal_zone*/trip_point_1_type
cat /sys/class/thermal/thermal_zone*/trip_point_1_temp

要修改这些值,请更新 ACPI 表。

注意

我们建议您不要更改默认值。

  • 如果降低被动跳变点,则可能会更频繁地发生节流,这会影响性能。

  • 如果提高被动跳变点,则软件可能并非始终稳定在温度下,这会导致更激进的硬件节流,并可能降低性能。

GPU 温度#

对于使用 nvidia-smi 的 GPU 温度,要获取温度输出,请运行 nvidia-smi -q -d TEMPERATURE 命令。

此步骤获取当前温度和与温度相关的限制。