0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NIVDIA和AMD GPU的LINUX电源管理框架讲解

Linux阅码场 来源:Linux阅码场 作者:Linux阅码场 2023-08-08 10:10 次阅读

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 API

cudaSetDeviceFlags

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的性能和功耗,或者选择“最大性能”模式以获取最佳性能。

a1a39b0a-3590-11ee-9e74-dac502259ad0.png

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)

SysFs

GPU的电源控制可以通过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_voltage

amdgpu 驱动程序提供了一个 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_metrics

amdgpu 驱动程序提供 sysfs API 用于检索当前 GPU 指标数据。文件 gpu_metrics 用于此目的。读取该文件将转储所有当前 GPU 指标数据。这些数据包括温度、频率、引擎利用率、功耗、throttler状态、风扇速度和CPU核心统计数据(仅适用于APU)。

GFXOFF

GFXOFF 是大多数最新 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调整显卡的核心频率、显存频率和电压等参数,以实现更好的性能。

a1b19ea8-3590-11ee-9e74-dac502259ad0.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19169

    浏览量

    229163
  • 电源管理
    +关注

    关注

    115

    文章

    6155

    浏览量

    144241
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4702

    浏览量

    128710
  • Linux
    +关注

    关注

    87

    文章

    11230

    浏览量

    208937
  • NIVDIA
    +关注

    关注

    0

    文章

    6

    浏览量

    7133

原文标题:GPU功耗管理方式介绍(Linux)

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AMD迎头猛追Intel 全球首发7nm GPU很威风!

    `处理器大厂美商超微(AMD)日前发布全球首款7奈米制程资料中心绘图处理器(GPU),为新世代人工智能(AI)、云端运算与高效能运算挹注动能。AMD Radeon Instinct MI60
    发表于 11-20 11:35

    深度学习框架TensorFlow&TensorFlow-GPU详解

    TensorFlow&TensorFlow-GPU:深度学习框架TensorFlow&TensorFlow-GPU的简介、安装、使用方法详细攻略
    发表于 12-25 17:21

    什么电源管理适用于FPGA、GPU和ASIC系统?

    在 FPGA、GPU 或 ASIC 控制的系统板上,仅有为数不多的几种电源管理相关的设计挑战,但是由于需要反复调试,所以这类挑战可能使系统的推出时间严重滞后。
    发表于 09-30 06:59

    什么电源管理适用于FPGA、GPU和ASIC系统

    在 FPGA、GPU 或 ASIC 控制的系统板上,仅有为数不多的几种电源管理相关的设计挑战,但是由于需要反复调试,所以这类挑战可能使系统的推出时间严重滞后。
    发表于 10-09 06:21

    探究Linux电源管理模型

    Linux电源管理/#more探究Linux电源管理模型,并为Tiny4412的LCD驱动添加
    发表于 10-29 06:04

    LINUX电源管理的相关资料分享

    Linux的系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-15 07:10

    GPU如何在imx8m plus上工作以及GPU驱动程序如何集成到DRM驱动程序框架中?

    我正在研究 imx8m plus 的 DRM 驱动程序。在linux内核源代码中,我找到了CRTC、Encoder和Connector的驱动源,但是GPU驱动在哪里呢?我知道 vivante GPU
    发表于 06-08 08:23

    《SoC底层软件低功耗系统设计与实现》基于Linux专门讲解软件低功耗框架和设计的书籍

    和细节都可以参考。 内容充实 基于Linux讲解了其涉及低功耗各个框架模块的设计和实现,后面的扩展知识点,低功耗问题定位及优化思路都是干货内容,都是工程实践相关的内容,内容比较充实。 从目录也可以看出
    发表于 09-08 23:38

    linux存储器管理

     linux存储器管理 本章主要讲解了存储器管理的基本方式,剖析了Linux 操作系统对内存的
    发表于 04-28 15:01 0次下载

    AMDLinux5.11开发版增添新显卡的驱动

    正式版预计将于明年二月亮相。 本周三,AMDLinux 提交了多个 AMD GPU 核心的驱动,包含未发布的 GPU 核心。新的核心
    的头像 发表于 11-30 10:14 1770次阅读

    CPU、GPU、TPU、NPU等的讲解

    CPU、GPU、TPU、NPU等的讲解
    的头像 发表于 01-05 14:54 1.1w次阅读

    Linux电源管理

    CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。本博文对应地址: https://hceng.cn/2018/01/18/Linux电源管理
    发表于 10-21 20:21 5次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>

    LINUX电源管理

    Linux的系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-07 19:36 8次下载
    <b class='flag-5'>LINUX</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>

    Linux电源管理研究笔记—动态电源管理 DPM

    Linux电源管理研究笔记—动态电源管理 DPM
    发表于 01-07 11:56 6次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>研究笔记—动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b> DPM

    Linux系统 电源管理的组成

    Linux 电源管理的组成 电源管理(Power Management)在 Linux Kern
    的头像 发表于 07-20 11:11 750次阅读
    <b class='flag-5'>Linux</b>系统 <b class='flag-5'>电源</b><b class='flag-5'>管理</b>的组成