sunsili 发表于 2023-8-10 20:21:43

GPU功耗管理方式介绍(Linux)

本帖最后由 sunsili 于 2023-8-10 20:24 编辑

GPU功耗管理方式介绍(Linux)
NIVDIA LINUX电源管理框架


PCI-Express Runtime D3 (RTD3) Power Management PCI-Express Runtime D3 (RTD3) Power Management是一种用于管理PCI-Express设备的低功耗模式的技术RTD3是一种睡眠状态,当PCI-Express设备处于空闲状态时,可以将其置于低功耗模式,以减少能源消耗和热量产生。英伟达™(NVIDIA®)图形处理器有许多省电机制。其中一些机制会降低芯片不同部分的时钟和电压,在某些情况下还会完全关闭芯片部分的时钟或电源,但不会影响功能或继续运行,只是速度较慢。然而,英伟达™(NVIDIA®)GPU 的最低能耗状态需要关闭整个芯片的电源,通常是通过调用 ACPI 来实现。这显然会影响功能。在关机状态下,GPU 无法运行任何功能。必须注意的是,只有在 GPU 上没有运行任何工作负载的情况下才能进入这种状态,而且在试图开始工作或进行任何内存映射 I/O (MMIO) 访问之前,必须先重新开启 GPU 并恢复任何必要的状态。
Configuring Power Management Support
NVIDIA的Linux驱动程序支持挂起(挂起到RAM)和休眠(挂起到磁盘)等系统电源管理操作,如在x86/x86_64平台上的ACPI S3和S4。当系统挂起或休眠时,NVIDIA内核驱动程序会准备正在使用的GPU进入睡眠状态,并保存必要的状态,以便在系统稍后恢复时将这些GPU返回到正常运行状态。NVIDIA内核驱动程序保存的GPU状态包括在视频内存中进行的分配。然而,这些分配通常是大量的,而且通常无法被清除。由于在挂起时驱动程序可用的系统内存量通常不足以容纳视频内存的大量拷贝,因此NVIDIA内核驱动程序被设计成保守行动,并且通常只保存必要的视频内存分配。用户空间的NVIDIA驱动程序和一些应用程序在一定程度上弥补了视频内存内容的损失,但可能导致渲染损坏和应用程序在退出电源管理周期时崩溃等问题。为了更好地支持这些类型应用程序的电源管理,NVIDIA的Linux驱动程序提供了一个自定义的电源管理接口,旨在与systemd等系统管理工具集成。此接口仍被视为实验性质。它默认情况下不被使用,但可以利用它以实现更好的电源管理。
NIVDIA-SMI
NVIDIA 系统管理接口 (nvidia-smi) 是一个基于NVIDIA 管理库 (NVML) 的命令行实用程序,旨在帮助管理和监控 NVIDIA GPU 设备。该实用程序允许管理员查询 GPU 设备状态,并通过适当的权限允许管理员修改 GPU 设备状态。它针对的是 Tesla TM、GRID TM、Quadro TM和 Titan X 产品,但其他 NVIDIA GPU 也提供有限的支持。
CUDA APIcudaSetDeviceFlags
[*]cudaDeviceScheduleSpin: Instruct CUDA to actively spin when waiting for results from the device. This can decrease latency when waiting for the device, but may lower the performance of CPU threads if they are performing work in parallel with the CUDA thread.
[*]cudaDeviceScheduleYield: Instruct CUDA to yield its thread when waiting for results from the device. This can increase latency when waiting for the device, but can increase the performance of CPU threads performing work in parallel with the device.
使用cudaDeviceScheduleYield 在等待GPU完成工作时,GUDA会让出CPU的使用权,一定程度上可以降低功耗
NVML
NVML(NVIDIA Management Library)是NVIDIA提供的一组API(应用程序编程接口),用于管理和监控NVIDIA GPU(图形处理器单元)的相关参数和状态。它提供了一种编程接口,使开发人员可以访问和控制显卡的各种属性,如温度、功耗、使用情况、性能状态等。NVML API Reference Manual nvmlDeviceSetPowerManagementLimit参数
[*]device 目标设备的标识符
[*]Power 设置电源管理限制(以毫瓦为单位)
返回值
[*]NVML_SUCCESS 如果限制已经设置完成
[*]NVML_ERROR_UNINITIALIZED 库尚未初始化成功
[*]NVML_ERROR_INVALID_ARGUMENT 无效的值
[*]NVML_ERROR_NOT_SUPPORTED 不支持该功能
[*]NVML_ERROR_GPU_IS_LOST 目标GPU已脱离总线
[*]NVML_ERROR_UNKNOWN 任何意外错误出现

描述
设置该设备的新功率限制
注意
重新启动或驱动程序卸载后,限制不会持续存在。启用持久模式以防止驱动程序在没有应用程序使用设备时卸载
NVIDIA SETTINGS
NVIDIA官方的驱动程序(NVIDIA-Driver)提供了一些电源管理选项,可以通过NVIDIA设置工具(nvidia-settings)进行配置。打开nvidia-settings,导航到“PowerMizer”选项卡,可以调整GPU的性能级别和电源模式。在这里,你可以选择“自动”模式,让驱动程序自动根据需要调整GPU的性能和功耗,或者选择“最大性能”模式以获取最佳性能。
AMD LINUX电源管理框架
AMD GPU的Linux电源管理框架是一个由内核模块、用户空间工具和ACPI方法等组成的复杂系统,旨在优化AMD GPU在Linux系统下的能耗和性能表现。在AMD GPU的Linux电源管理框架中,内核模块负责实现GPU的功耗监测、功率管理和功率限制等功能,同时提供了一组名为“pp_*”函数的API,供用户空间程序调用。用户空间工具则通过调用这些API来实现GPU的功耗管理和性能调优等功能,比如可以通过设置GPU的功耗限制来控制GPU的功耗和温度,或者通过调整GPU的频率来提高GPU的性能表现。ACPI方法则用于与系统BIOS进行交互,以获取和设置GPU的功耗管理相关参数。AMD GPU的Linux电源管理框架在Linux内核中已经得到了很好的支持,并且已经成为了Linux操作系统中GPU电源管理的标准框架之一。通过使用AMD GPU的Linux电源管理框架,用户可以更好地控制GPU的能耗和性能表现,从而提高计算机的稳定性和可靠性,同时也可以延长GPU的使用寿命。
HWMON
HWMON是指Linux内核中的硬件监控(Hardware Monitoring)子系统,主要用于监测计算机硬件的温度、电压、风扇转速等信息,并将这些信息以文件的形式保存在/sys/class/hwmon目录下。HWMON子系统通常与传感器硬件设备结合使用,如CPU温度传感器、风扇转速传感器等,可以通过读取/sys/class/hwmon目录下的文件来获取这些传感器的实时数据。AMD GPU驱动针对HWMON接口支持以下功能
[*]GPU temperature (via the on-die sensor)
[*]GPU voltage
[*]Northbridge voltage (APUs only)
[*]GPU power
[*]GPU fan
[*]GPU gfx/compute engine clock
[*]GPU memory clock (dGPU only)

SysFsGPU的电源控制可以通过sysfs 文件来实现
power_dpm_state
power_dpm_state 文件是旧版接口,仅为了向后兼容而提供。amdgpu 驱动程序提供了 sysfs API,用于调整某些与电源相关的参数。文件 power_dpm_state 用于此目的。它接受以下参数:battery balanced performance
power_dpm_force_performance_level
amdgpu 驱动程序提供了 sysfs API,用于调整某些与电源相关的参数。文件 power_dpm_force_performance_level 用于此目的。它接受以下参数:
[*]auto - 选择自动时,驱动程序将尝试针对驱动程序中的当前条件动态选择最佳功率配置文件
[*]low - 最低功耗状态
[*]high - 最高功耗状态
[*]manual - 用户可以通过 sysfs pp_dpm_mclk、pp_dpm_sclk 和 pp_dpm_pcie 文件手动调整每个时钟域启用的 - 电源状态,并通过 pp_power_profile_mode sysfs 文件调整电源状态转换heuristics
[*]profile_standard
[*]profile_min_sclk
[*]profile_min_mclk
[*]profile_peak 选择分析模式后,时钟和电源门控将被禁用,并且时钟将针对不同的分析情况进行设置。建议使用此模式来分析特定工作负载,您不希望时钟或时钟波动的电源门控干扰您的结果。profile_standard 将时钟设置为固定时钟级别,该级别因不同的 asic 而异。profile_min_sclk 强制 sclk 为最低级别。profile_min_mclk 强制 mclk 至最低级别。profile_peak 将所有时钟(mclk、sclk、pcie)设置为最高级别。
[*]
pp_table
amdgpu 驱动程序提供了一个 sysfs API,用于上传新的 powerplay table。文件 pp_table 用于此目的。读取该文件将转储当前的powerplay table。写入文件将尝试上传新的 powerplay table并使用该新表重新初始化 powerplay。AMD PowerPlay is the brand name for a set of technologies for the reduction of the energy consumption implemented in several of AMD's graphics processing units and APUs supported by their proprietary graphics device driver "Catalyst". AMD PowerPlay is also implemented into ATI/AMD chipsets which integrated graphics and into AMD's Imageon handheld chipset, that was sold to Qualcomm in 2008.(From wiki)
pp_od_clk_voltageamdgpu 驱动程序提供了一个 sysfs API,用于调整电源状态下每个功率级别的时钟和电压。pp_od_clk_Voltage 用于此目的。请注意,公开的是实际内存控制器时钟速率,而不是 DRAM 的有效内存时钟
pp_dpm_*amdgpu 驱动程序提供了一个 sysfs API,用于调整给定电源状态启用的功率级别。文件 pp_dpm_sclk、pp_dpm_mclk、pp_dpm_socclk、pp_dpm_fclk、pp_dpm_dcefclk 和 pp_dpm_pcie 用于此目的。####pp_power_profile_mode amdgpu 驱动程序提供了一个 sysfs API,用于调整与在电源状态下的电源级别之间切换相关的heuristics。文件 pp_power_profile_mode 用于此目的
*_busy_percent
amdgpu 驱动程序提供了一个 sysfs API,用于读取 GPU 繁忙程度的百分比。文件 gpu_busy_percent 用于此目的。。amdgpu 驱动程序提供了一个 sysfs API,用于读取 VRAM 的繁忙程度(百分比)。文件 mem_busy_percent 用于此目的。
gpu_metricsamdgpu 驱动程序提供 sysfs API 用于检索当前 GPU 指标数据。文件 gpu_metrics 用于此目的。读取该文件将转储所有当前 GPU 指标数据。这些数据包括温度、频率、引擎利用率、功耗、throttler状态、风扇速度和CPU核心统计数据(仅适用于APU)。
GFXOFFGFXOFF 是大多数最新 GPU 的一项功能,可在运行时节省电能。当图形处理器或计算管道没有工作负载时,显卡的 RLC(运行列表控制器)固件会动态关闭图形引擎。在支持的 GPU 上,GFXOFF 默认开启。用户空间可通过 debugfs 接口与 GFXOFF 交互
ROCM-SIM
ROCM-SMI(ROCm System Management Interface)是一款用于管理和监控AMD ROCm平台的命令行工具。它提供了一系列选项和功能,用于管理GPU设备、监控功耗和温度、检查显存使用情况以及查看GPU的性能信息。ROCM-SMI可以用于以下操作:监控GPU的功耗和温度:ROCM-SMI可以显示GPU的功耗和温度信息,以及GPU的风扇转速、电压和功耗限制等。这些信息对于调整GPU的功耗管理和性能优化非常有用。管理GPU的功耗模式:ROCM-SMI可以设置GPU的功耗模式,例如常规模式、低功耗模式或固定功耗模式。这些模式可以根据需求来平衡GPU的功耗和性能。检查显存使用情况:ROCM-SMI可以显示GPU显存的使用情况,包括已使用的显存量、剩余的显存量以及显存带宽的使用情况。这对于优化GPU计算和内存管理非常有用。查看GPU的性能信息:ROCM-SMI可以显示GPU的性能指标,如核心频率、显存频率、显存带宽等。这些信息对于评估GPU的性能和进行性能优化非常有用。
Radeon-profile
Radeon-profile是一个第三方开源的工具,用于在Linux上管理和监控AMD Radeon显卡。它提供了一个图形界面,可以用于调整显卡的功耗管理、风扇控制和性能调优。通过Radeon-profile,用户可以执行以下操作:监控功耗和温度:Radeon-profile显示GPU的功耗和温度信息,帮助用户了解显卡的工作状态和温度情况。设置功耗模式:用户可以切换显卡的功耗模式,如自动模式、低功耗模式、中等功耗模式和高功耗模式。这些模式可以根据用户需求平衡功耗和性能。风扇控制:Radeon-profile允许用户手动调整显卡风扇的转速,以控制显卡的温度和散热效果。调整显卡的性能设置:用户可以通过Radeon-profile调整显卡的核心频率、显存频率和电压等参数,以实现更好的性能。
参考资料https://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/https://docs.kernel.org/hwmon/hwmon-kernel-api.htmlhttps://docs.nvidia.com/deploy/nvml-api/
页: [1]
查看完整版本: GPU功耗管理方式介绍(Linux)