关注+星号公众号,不容错过精彩
作者:HywelStar
问题现象
日志如下:
关键在于
[ 6052.262130] ddrc freq set to low bus mode
[ 6052.451790] ddrc freq set to high bus mode
日志过一会打印,偶尔又跳出打印。
问题分析
问题:
为什么DDR 的时钟一会设置低一会设置高,是哪里出现了什么问题么,不稳定么?
追踪打印日志位置:
"./drivers/soc/imx/busfreq-imx8mq.c"
set_high_bus_freq
是设置高频模式接口,哪里会调用?
发现是bus_freq_pm_notify
调用, 这个函数处理系统进入和退出休眠时的总线频率调整。
set_high_bus_freq
函数的实现逻辑是:
enable 为 1 时:设置总线频率为高频模式,通常会涉及硬件寄存器设置、时钟频率调整等操作。 enable 为 0 时:恢复总线频率为低频模式,涉及恢复硬件寄存器和时钟频率等操作。
也就是说系统自动会进入休眠,造成ddr freq 设置成低模式情况。
结论
动态电压与频率调节 (DVFS):
节能策略:
负载变化:
POWERSAVE
,当CPU频率降低,DDR控制器可能也跟着降低,内核中的 DVFS(动态电压与频率调节)机制通常会协同工作,以在性能和功耗之间取得平衡。传送门:Linux CPU 状态与控制