Linux CPU 状态与控制

文摘   2024-06-18 18:53   广东  

关注+星号公众号,不容错过精彩

作者:HywelStar

1. 前言

嵌入式系统中的CPU控制涉及优化处理器的性能、功耗和响应时间。这些控制技术包括CPU工作模式,频率调节、核心管理等。

本实验在:i.mx8mm上测试。

本章节思维导图:

2. CPU Performance

CPU Performance在Linux 内核中提供了一套对动态调整CPU的频率和电压,以实现性能和功耗之间的平衡。目前有以下常见的五种模式:

userspaceconservativeondemandpowersave 和  performance

关于五种模式的概念,特点,应用场景都概括在表格当中:

调控器模式概述特点应用场景
Userspace允许用户空间程序直接设置CPU频率提供最大的灵活性,但需要用户空间守护进程进行管理需要特定频率设置,由用户空间程序或脚本管理CPU频率时
Conservative逐步增加或减少CPU频率平滑地调整频率,避免频繁的频率变化,比 ondemand 更注重功耗,但性能响应稍慢需要平衡功耗和性能的场景,如笔记本电脑日常使用
Ondemand根据CPU负载快速调整频率响应迅速,适合需要高性能和快速响应的场景,在性能和功耗之间提供了良好的平衡适用于桌面和服务器环境,需要在高性能和低功耗之间快速切换
Powersave强制CPU运行在最低频率最大限度地降低功耗,但牺牲了性能适用于需要最大限度节省电力的场景,如长时间待机的嵌入式设备或节能模式
Performance强制CPU运行在最高频率提供最大的性能,但增加了功耗适用于对性能要求极高的任务,如实时系统、性能测试、高负载计算等

相关命令设置:

# 查看当前工作模式 CPU Performancecat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
#以下为设置各种不同模式命令,关注公众号:“码思途远”echo "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorecho 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_freqcat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
# 查看CPU的调控模式cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 设置cpu0 评论1GHZecho userspace | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorecho 1000000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
# 查看在线核心数cat /sys/devices/system/cpu/online
# 查看离线核心数cat /sys/devices/system/cpu/offline

码思途远
一位码农的日常分享,探索软件技术知识与新闻的数字十字路口。