关注+星号公众号,不容错过精彩
作者:HywelStar
1. 前言
嵌入式系统中的CPU控制涉及优化处理器的性能、功耗和响应时间。这些控制技术包括CPU工作模式,频率调节、核心管理等。
本实验在:i.mx8mm上测试。
本章节思维导图:
2. CPU Performance
CPU Performance
在Linux 内核中提供了一套对动态调整CPU的频率和电压,以实现性能和功耗之间的平衡。目前有以下常见的五种模式:
userspace
, conservative
, ondemand
, powersave
和 performance
。
关于五种模式的概念,特点,应用场景都概括在表格当中:
调控器模式 | 概述 | 特点 | 应用场景 |
---|---|---|---|
Userspace | 允许用户空间程序直接设置CPU频率 | 提供最大的灵活性,但需要用户空间守护进程进行管理 | 需要特定频率设置,由用户空间程序或脚本管理CPU频率时 |
Conservative | 逐步增加或减少CPU频率 | 平滑地调整频率,避免频繁的频率变化,比 ondemand 更注重功耗,但性能响应稍慢 | 需要平衡功耗和性能的场景,如笔记本电脑日常使用 |
Ondemand | 根据CPU负载快速调整频率 | 响应迅速,适合需要高性能和快速响应的场景,在性能和功耗之间提供了良好的平衡 | 适用于桌面和服务器环境,需要在高性能和低功耗之间快速切换 |
Powersave | 强制CPU运行在最低频率 | 最大限度地降低功耗,但牺牲了性能 | 适用于需要最大限度节省电力的场景,如长时间待机的嵌入式设备或节能模式 |
Performance | 强制CPU运行在最高频率 | 提供最大的性能,但增加了功耗 | 适用于对性能要求极高的任务,如实时系统、性能测试、高负载计算等 |
相关命令设置:
# 查看当前工作模式 CPU Performance
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
#以下为设置各种不同模式命令,关注公众号:“码思途远”
echo "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1300000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed # 设置为1300MHz
echo "conservative" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3. CPU 频率
3.1 CPU 频率查看
显示CPU0的频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
使用cpupower
工具查看
cpupower frequency-info
3.2 CPU 频率控制
在设置频率之前首选需要确定当前的模式,只有在userspace
模式下,设置的CPU频率才是有效的。
切换到userspace
模式
echo "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
设置具体的频率
echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
4. 多核CPU控制
这里提到的CPU控制,指的是启动和关闭,对于优化相关的内容应该算一个其他课题,有机会后续讲解;
查看核心的状态
cat /sys/devices/system/cpu/cpu0/online
关闭特定的CPU核
echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online
开启特定的CPU核
echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
5.常用命令集合
查看CPU信息
lscpu
# 查看CPU当前频率
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
# 查看CPU频率范围
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
# 查看CPU的调控模式
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 设置cpu0 评论1GHZ
echo userspace | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1000000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
# 查看在线核心数
cat /sys/devices/system/cpu/online
# 查看离线核心数
cat /sys/devices/system/cpu/offline