首页 > 其他分享 >【RK3588】关于 devfreq 和 cpufreq 的记录

【RK3588】关于 devfreq 和 cpufreq 的记录

时间:2024-08-30 19:22:44浏览次数:13  
标签:Hz RK3588 cpufreq devfreq 频率 path freq CPU

前言

本文主要介绍了 /sys/class/devfreq/sys/devices/system/cpu/cpufreq 目录,以及如何手动管理和监控设备频率和 CPU 频率。同时提供了简单的 Python 脚本,用于打印设备和 CPU 的频率信息。

环境信息:

  • 硬件:Friendly NanoPi-R6S
  • 固件:rk3588-usb-debian-bullseye-minimal-6.1-arm64-20240131

部分内容由 Github Copilot 自动生成,仅供参考。

正文

/sys/class/devfreq 是什么目录?

/sys/class/devfreq 是 Linux 系统中的一个虚拟文件系统目录,用于管理和监控设备频率(Device Frequency)。devfreq 是 Linux 内核中的一个子系统,类似于 cpufreq,但它不仅限于 CPU,还可以用于其他设备,如 GPU、内存控制器等。

主要功能
  • 动态频率调整devfreq 子系统允许根据设备的负载动态调整设备的工作频率,以实现性能和功耗之间的平衡。
  • 监控设备频率:提供接口来监控设备的当前频率、最小和最大频率等信息。
目录结构

/sys/class/devfreq 目录下,每个受 devfreq 管理的设备都会有一个子目录。每个子目录中包含多个文件,用于配置和监控设备频率。例如:

  • cur_freq:当前设备频率。
  • min_freq:设备允许的最小频率。
  • max_freq:设备允许的最大频率。
  • available_governors:可用的频率调节策略(governors)。
  • governor:当前使用的频率调节策略。
查看设备信息

可以通过读取 /sys/class/devfreq 目录下的文件,来查看设备的频率信息。以下是一个简单的 Python 脚本,用于打印设备的频率信息。

import os

def read_file(file_path):
    try:
        with open(file_path, 'r') as file:
            return file.read().strip()
    except IOError:
        return None

def print_devfreq_info(devfreq_path):
    print(f"设备: {os.path.basename(devfreq_path)}")
    
    cur_freq = read_file(os.path.join(devfreq_path, 'cur_freq'))
    min_freq = read_file(os.path.join(devfreq_path, 'min_freq'))
    max_freq = read_file(os.path.join(devfreq_path, 'max_freq'))
    governor = read_file(os.path.join(devfreq_path, 'governor'))
    available_governors = read_file(os.path.join(devfreq_path, 'available_governors'))

    print(f"  当前频率: {cur_freq} Hz")
    print(f"  最小频率: {min_freq} Hz")
    print(f"  最大频率: {max_freq} Hz")
    print(f"  当前调节策略: {governor}")
    print(f"  可用调节策略: {available_governors}")
    print()

def main():
    devfreq_root = '/sys/class/devfreq'
    
    if not os.path.exists(devfreq_root):
        print(f"{devfreq_root} 目录不存在")
        return
    
    for device in os.listdir(devfreq_root):
        devfreq_path = os.path.join(devfreq_root, device)
        if os.path.isdir(devfreq_path):
            print_devfreq_info(devfreq_path)

if __name__ == "__main__":
    main()

运行该脚本,可以打印出设备的频率信息。例如:

设备: fdab0000.npu
  当前频率: 1000000000 Hz
  最小频率: 300000000 Hz
  最大频率: 1000000000 Hz
  当前调节策略: rknpu_ondemand
  可用调节策略: rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand

设备: fb000000.gpu
  当前频率: 300000000 Hz
  最小频率: 300000000 Hz
  最大频率: 1000000000 Hz
  当前调节策略: simple_ondemand
  可用调节策略: rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand

设备: dmc
  当前频率: 528000000 Hz
  最小频率: 528000000 Hz
  最大频率: 2112000000 Hz
  当前调节策略: dmc_ondemand
  可用调节策略: rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand
手动修改设备频率

手动设置 npu 频率

# 设置 governor 为 userspace
echo userspace > /sys/class/devfreq/fdab0000.npu/governor

# 设置频率为 1GHz
echo 1000000000 > /sys/class/devfreq/fdab0000.npu/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/fdab0000.npu/cur_freq

手动设置 gpu 频率

# 设置 governor 为 userspace
echo userspace > /sys/class/devfreq/fb000000.gpu/governor

# 设置频率为 500MHz
echo 400000000 > /sys/class/devfreq/fb000000.gpu/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/fb000000.gpu/cur_freq

手动设置 dmc 频率

# 设置 governor 为 userspace
echo userspace > /sys/class/devfreq/dmc/governor

# 设置频率为 1GHz
echo 1000000000 > /sys/class/devfreq/dmc/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/dmc/cur_freq

/sys/devices/system/cpu/cpufreq 是什么目录?

/sys/devices/system/cpu/cpufreq 是 Linux 系统中的一个虚拟文件系统目录,用于管理和监控 CPU 频率(CPU Frequency)。cpufreq 是 Linux 内核中的一个子系统,专门用于动态调整 CPU 的工作频率,以实现性能和功耗之间的平衡。

主要功能
  • 动态频率调整cpufreq 子系统允许根据 CPU 的负载动态调整 CPU 的工作频率,以优化性能和功耗。
  • 监控 CPU 频率 :提供接口来监控 CPU 的当前频率、最小和最大频率等信息。
目录结构

/sys/devices/system/cpu/cpufreq 目录下,每个 CPU 都会有一个子目录。每个子目录中包含多个文件,用于配置和监控 CPU 频率。例如:

  • affected_cpus :列出受此策略影响的 CPU 核心。
  • related_cpus :列出与此策略相关的 CPU 核心。
  • scaling_cur_freq :当前 CPU 频率。
  • scaling_min_freq :CPU 允许的最小频率。
  • scaling_max_freq :CPU 允许的最大频率。
  • scaling_governor :当前使用的频率调节策略(governor)。
  • scaling_available_governors :可用的频率调节策略。
  • cpuinfo_cur_freq :当前 CPU 频率(从硬件读取)。
  • cpuinfo_min_freq :CPU 支持的最小频率。
  • cpuinfo_max_freq :CPU 支持的最大频率。
查看 CPU 信息

可以通过读取 /sys/devices/system/cpu/cpufreq 目录下的文件,来查看 CPU 的频率信息。以下是一个简单的 Python 脚本,用于打印 CPU 的频率信息。

import os

def read_file(file_path):
    try:
        with open(file_path, 'r') as file:
            return file.read().strip()
    except IOError:
        return None

def print_policy_info(policy_path):
    print(f"Policy: {os.path.basename(policy_path)}")
    
    affected_cpus = read_file(os.path.join(policy_path, 'affected_cpus'))
    related_cpus = read_file(os.path.join(policy_path, 'related_cpus'))
    cur_freq = read_file(os.path.join(policy_path, 'scaling_cur_freq'))
    min_freq = read_file(os.path.join(policy_path, 'scaling_min_freq'))
    max_freq = read_file(os.path.join(policy_path, 'scaling_max_freq'))
    governor = read_file(os.path.join(policy_path, 'scaling_governor'))
    available_governors = read_file(os.path.join(policy_path, 'scaling_available_governors'))

    print(f"  受影响的 CPU 核心: {affected_cpus}")
    print(f"  相关的 CPU 核心: {related_cpus}")
    print(f"  当前频率: {cur_freq} Hz")
    print(f"  最小频率: {min_freq} Hz")
    print(f"  最大频率: {max_freq} Hz")
    print(f"  当前调节策略: {governor}")
    print(f"  可用调节策略: {available_governors}")
    print()

def main():
    cpufreq_root = '/sys/devices/system/cpu/cpufreq'
    
    if not os.path.exists(cpufreq_root):
        print(f"{cpufreq_root} 目录不存在")
        return
    
    for policy in os.listdir(cpufreq_root):
        policy_path = os.path.join(cpufreq_root, policy)
        if os.path.isdir(policy_path):
            print_policy_info(policy_path)

if __name__ == "__main__":
    main()

运行该脚本,可以打印出 CPU 的频率信息。例如:

Policy: policy6
  受影响的 CPU 核心: 6 7
  相关的 CPU 核心: 6 7
  当前频率: 2304000 Hz
  最小频率: 408000 Hz
  最大频率: 2304000 Hz
  当前调节策略: ondemand
  可用调节策略: conservative ondemand userspace powersave performance schedutil

Policy: policy4
  受影响的 CPU 核心: 4 5
  相关的 CPU 核心: 4 5
  当前频率: 600000 Hz
  最小频率: 408000 Hz
  最大频率: 2304000 Hz
  当前调节策略: ondemand
  可用调节策略: conservative ondemand userspace powersave performance schedutil

Policy: policy0
  受影响的 CPU 核心: 0 1 2 3
  相关的 CPU 核心: 0 1 2 3
  当前频率: 1800000 Hz
  最小频率: 1800000 Hz
  最大频率: 1800000 Hz
  当前调节策略: performance
  可用调节策略: conservative ondemand userspace powersave performance schedutil
手动修改 CPU 频率

手动设置 CPU0 频率

# 设置 governor 为 userspace
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor

# 设置频率为 1.8GHz
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

# 查看当前频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq

其他 CPU 核心的设置方法类似,只需替换 policy0 为相应的目录名即可。

最后

通过以上步骤,我们可以手动调整 RK3588 平台上 CPU 的频率,以满足不同的性能需求。希望这篇指南对你有所帮助。如果有任何问题或建议,欢迎反馈。感谢阅读!

标签:Hz,RK3588,cpufreq,devfreq,频率,path,freq,CPU
From: https://blog.csdn.net/baidu_32631625/article/details/141651661

相关文章

  • RK3588!黑神话悟空,启动?-迅为电子RK3588开发板
    《黑神话:悟空》是一款西游背景的动作角色扮演游戏,故事取材自中国古典神话小说《西游记》。玩家将扮演“天命人”,为了探寻昔日传说的真相而踏上这条千难万险的西行之路。作为国内首款3A大作,在20号发布之后,就引起了全球范围内的广泛关注和热议。   《黑神话:悟空》的游戏画面......
  • RK3588 HDMI IN调试
    HDMIRX控制器配置:/*Shouldworkwithatleast128MBcmareservedabove.*/&hdmirx_ctrler{status="okay";/*EffectivelevelusedtotriggerHPD:0-low,1-high*/hpd-trigger-level=<1>;hdmir......
  • RK3588添加支持RS485收发
    RS485是在串口基础上利用电平转换芯片,将TTL电平转换成485的差分信号,电路图如下:RO: 接收器输出----接RXRE: 接收器输出使能(低电平-接收使能)DE: 驱动器输出使能(高电平-发送使能)DI: 驱动器输入----接TX在传输数据时候需要将RS485RE置高,发送使能,接收禁止;发送完数据以后需要将RS......
  • RK3588开发笔记-pdm接口ES7201音频采集调试记录
    目录​​​​​​​前言一、ES7201技术规格二、PDM接口说明RK3588的PDM接口特性三、原理图连接四、内核配置五、音频调试总结前言        在RK3588开发过程中,音频采集是一个常见的需求,而PDM(PulseDensityModulation)接口因其简单性和低成本广泛应用......
  • 探索巅峰性能 | 迅为RK3588开发板深度剖析
    探索巅峰性能|迅为RK3588开发板深度剖析 迅为RK3588作为瑞芯微公司旗下一款高端处理器的杰出代表,凭借卓越的性能与多样化的外设接口成为了众多开发和爱好者的首选。随着RK3588在市场上的广泛应用,大家不禁要提出疑问:RK3588究竟强在何处?在2022年,北京迅为电子推出了基于RK3588......
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【2.3】RK3588上使用C++启用多线程推理更多内容
    本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。B站配套视频:https://www.bilibili.com/video/BV1or421T74f基础背景对于国产化芯片来说,是采用NPU进......
  • RK3588安装rknn-toolkit-lite2
    RK3588安装rknn-toolkit-lite2一、下载rknn-toolkit2包:sudogitclonehttps://gitclone.com/github.com/airockchip/rknn-toolkit2二、安装进入到所在包的位置,然后解压:unziprknn-toolkit2-master.zip进入rknn-toolkit-lite2所在路径:cdrknn-toolkit2-master/rknn-t......
  • RK3588—安装Linux系统以及环境配置
    neardiRK3588—安装Linux系统一、安装linux系统由于买的是neardi的LPB3588开发板,直接找它的官方手册:http://wiki.neardi.com/wiki/LPB3588/zh_CN/ 二、其他问题(1)无法读取U盘sudochmod777/media/<username>/(这里是sudochmod777/media/neardi/)(2)pip3安装s......
  • Rockchip rk3588-Android tv-红外接收调试
    参考:https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6/zh#ADB.E7.9A.84.E4.BD.BF.E7.94.A8https://www.cnblogs.com/ningci/p/15256839.htmlhttps://wiki.t-firefly.com/zh_CN/Firefly-RK3288/driver_ir.html开发板:Nanopc-T6系统:Android12TV工具:Xshell7、开心电视......
  • YOLOv8n部署到RK3588开发板全流程(pt→onnx→rknn模型转换、板端后处理检测)
    YOLOv8n部署到RK3588开发板全流程文章目录前言一、模型训练二、配置用于pt模型转onnx模型的环境三、pt→onnx模型转换四、配置onnx转rknn模型的虚拟环境五、onnx转rknn模型六、RK3588板端部署前言小白博主,第一次写博客记录自己YOLOv8n部署RK3588开发板的全流程,记......