Linux下如何修改CPU 电源工作模式

最近处理一起历史遗留问题,感觉很爽。

现象:

     背景:设备采用ARM,即rk3568处理器,采用Linux系统;主要用于视觉后端处理

     现象:当软件运行一段时间,大概1个小时(也不是很固定),CPU使用率会变成原先一倍,这个到不影响软件使用流畅,但采集卡的驱动会出现异常,也开始丢帧了(甚至不出流),算是很严重的bug。

        作为资深软件开发人员,首先怀疑程序有问题,或某个线程挂掉了。但实际产生现象后,软件流畅度还是有所保证的,非视频相关一些操作都很正常。后来在跟采集卡厂家沟通过程中,发现采集卡驱动在CPU调频的时候会出现异常,需要重启驱动才可以恢复。

        

        然后,当然怀疑是CPU是否降频了,如果降频一半,的确会导致CPU占用率比较高。那么问题来了,怎么让CPU不主动降频呢?猜测应该是电源管理相关,特别是ARM这些嵌入式,的确默认会存在降频的可能。考虑本设备不用考虑节能的问题,所以针对此猜测,最好的解决办法就是CPU不降频。

  • 如何查看当前电源管理模式?

在设备端:

cd   /sys/devices/system/cpu/cpu0/cpufreq

如果没有该目录,说明该系统不支持电源管理模式(或系统裁剪掉了)

通过 ls 可以看到如下:

affected_cpus               related_cpus                   scaling_governor
cpuinfo_cur_freq            scaling_available_frequencies  scaling_max_freq
cpuinfo_max_freq            scaling_available_governors    scaling_min_freq
cpuinfo_min_freq            scaling_cur_freq               scaling_setspeed

其中 scaling_governor 就是当前电源管理模式,cat下就可以看到了

scaling_available_governors就是支持哪些管理模式(一般来说,都是至少支持以下5种)

①、Performance,最高性能,直接用最高频率,不考虑耗电。

②、Interactive,一开始直接用最高频率,然后根据 CPU 负载慢慢降低。

③、Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个!

④、Userspace,可以在用户空间手动调节频率。

⑤、Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率,这样省电,负载高的时候提高 CPU 频率,增加性能。

我的设备默认是 Interactive,现在需要改成 Performance

接下去的操作,无非是两种:

1. 在启动时候修改模式,注意要把每个CPU都修改了

2. 修改内核,默认改成 performance

下面是启动时候或者过程中(未验证过是否可行)修改模式

for i in $(seq 0 1 15)
do
	echo "performance" > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor
done
  • 如何在内核里修改默认performance?

进入kernel目录,输入make menuconfig ARCH=arm64

然后加载使用的config

选择 CPU power management  然后 选择 CPU Frequency scaling  (可能不同版本略有不同)

进入之后,如下图,选择默认的模式(其他地方不要修改,也不要直接把这个功能去掉)

Linux下如何修改CPU 电源工作模式_第1张图片

然后save,重新build kernel ,更新kernel到板子上即可

你可能感兴趣的:(Linux,移植与安装,linux,电源管理,电源模式,降频)