0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux电源管理实例分析

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-20 11:13 次阅读

实例分析

最近博主遇到 i2c 传输慢和中断触发慢的问题,一般这种【慢】的情况大都和【性能与功耗冲突】相关,研究了 Qos 系统,打了笔 patch 解决了。

中断触发慢:注册的下降沿中断,从下降沿打到芯片中,到跑到中断处理函数,快则 270us,慢则 2.7ms。由于所做功能对中断处理时间有要求,因此要解决中断处理慢的问题。

抓 trace 分析

使用上次博主发的脚本,可以抓到 ftrace,这个脚本中博主使能了 sched_switch、sched_wakeup、irq、irq_handler_entry、irq_handler_exit、cpu_idle、pm_qos_update_request 等 event。这些 event 可以记录下 CPU 调度和中断处理情况。

从抓到的 trace 分析,中断处理慢并不是由于 CPU loading 重导致的处理不及时,而是中断来的时候,CPU0 处于 idle 状态,而 kernel-5.10 以后除了特定的 feature,所有的中断都默认发到 CPU0,这样即便设置了中断可以唤醒系统,把 CPU0 从 idle 转为 active 也要 1ms。

问题确定后,就是如何处理的问题了。找了低功耗的同事,确认 CPU 在没事情做的时候就是会进入 idle,即便在游戏场景,也不会禁止 CPU 进入 idle。

研究了一下 Linux 电源管理子系统,发现 Qos 有接口可以使用:在某一段时间内拉 Qos,可以让 CPU 在这段时间不进入 idle,使用完毕再去掉 Qos,让 CPU 可以进入 idle,这样满足了性能需求,带来的功耗也不是特别高。

PM QoS classes framework 位于 kernel/power/qos.c 中,负责系统级别的 PM QoS 管理。per-device PM QoS framework 位于 drivers/base/power/qos.c 中,负责 per-device 的 PM QoS 管理。Common header 位于 include/linux/pm_qos.h 中,负责通用数据结构的抽象、函数声明等工作。

在 kernel/power/qos.c 中,有 cpu_latency_qos_update_request 接口可以使用,通过该接口将 Qos 拉到 150,使用完毕再将 Qos 拉到 -1(关闭)。

使用方法:

1、文件开头注册自己的结构体:struct pm_qos_request my_qos_request;

2、自己驱动的 probe 函数加上:cpu_latency_qos_add_request(my_qos_request, PM_QOS_DEFAULT_VALUE);

3、在做事情前加上:cpu_latency_qos_update_request(my_qos_request, 150);

4、在做事情后加上:cpu_latency_qos_update_request(my_qos_request, PM_QOS_DEFAULT_VALUE);PM_QOS_DEFAULT_VALUE 其实就是 -1

这样在自己做事情期间,CPU 就不会进入 idle,自己模块的性能就会好很多。如果还要更好,可以在此期间调节 CPU 频率,但调频带来的功耗很高,需要自己评估。

该 patch 解决的问题:

1、中断处理慢,可以在第一次中断打进来后,拉 Qos,这样自己后面的几次中断处理一定会快,使用完毕后,去掉 Qos。

2、i2c 传输慢,其中一种情况是 i2c 传输完毕返回时,CPU0 进入 idle,导致 i2c 中断打不进来,这种情况,我们在调用 i2c_transfer 前后加上 cpu_latency_qos_update_request 的接口,就可以解决该问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    182

    文章

    16561

    浏览量

    244908
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10456

    浏览量

    206617
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206772
收藏 人收藏

    评论

    相关推荐

    以AM33XX为实例的OMAP的电源管理功能

    本系列文章将分析Linux对于OMAP的电源管理功能,以AM33XX作为实例(目前的硬件平台先主要关注AM335xStarterKit开发板
    发表于 09-12 10:56 1312次阅读
    以AM33XX为<b class='flag-5'>实例</b>的OMAP的<b class='flag-5'>电源</b><b class='flag-5'>管理</b>功能

    Linux下的动态电源管理(DPM)技术分析

    就目前掌握的资料来看,用嵌入式Linux系统的动态电源管理只有IBM奥斯汀实验室和MontaVista联合开发的动态电源管理(DPM)(ht
    发表于 09-14 12:51 2448次阅读
    <b class='flag-5'>Linux</b>下的动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b>(DPM)技术<b class='flag-5'>分析</b>

    linux嵌入式socket编程原理及实例分析

    linux嵌入式socket编程原理及实例分析
    发表于 08-20 08:12

    嵌入式Linux驱动开发实例分析

    嵌入式Linux驱动开发实例分析
    发表于 08-20 09:59

    Linux内核电源管理的整体架构介绍

    Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理
    发表于 07-05 07:00

    探究Linux电源管理模型

    Linux电源管理/#more探究Linux电源管理模型,并为Tiny4412的LCD驱动添加
    发表于 10-29 06:04

    LINUX电源管理的相关资料分享

    Linux的系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-15 07:10

    基于Linux的动态电源管理的相关资料分享

    基于Linux的动态电源管理:使嵌入式设备更节能 为了在产品众多、竞争激烈的市场上使产品与众不同,手持设备的制造商们往往把电池寿命和电源管理
    发表于 12-21 06:11

    Linux电源管理的系统架构和驱动

    驱动篇:inux 电源管理的系统架构和驱动(一)Linux 电源管理的全局架构Linux 在消费
    发表于 01-03 06:36

    Linux下的lib文件故障解决实例

    Linux下的lib文件故障解决实例
    发表于 09-11 08:48 4次下载
    <b class='flag-5'>Linux</b>下的lib文件故障解决<b class='flag-5'>实例</b>

    Linux电源管理

    CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。本博文对应地址: https://hceng.cn/2018/01/18/Linux电源管理
    发表于 10-21 20:21 5次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>

    LINUX电源管理

    Linux的系统suspend和resumeLinux内核 runtime_PM 框架Linux内核电源管理综述
    发表于 11-07 19:36 8次下载
    <b class='flag-5'>LINUX</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>

    Linux电源管理研究笔记—动态电源管理 DPM

    Linux电源管理研究笔记—动态电源管理 DPM
    发表于 01-07 11:56 6次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>研究笔记—动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b> DPM

    linux系统磁盘管理分析必备命令

    今天浩道跟大家分享linux磁盘管理分析相关的硬核干货,通过这些指令,可以让你高效运维!
    的头像 发表于 02-09 09:54 519次阅读

    Linux系统 电源管理的组成

    Linux 电源管理的组成 电源管理(Power Management)在 Linux Kern
    的头像 发表于 07-20 11:11 543次阅读
    <b class='flag-5'>Linux</b>系统 <b class='flag-5'>电源</b><b class='flag-5'>管理</b>的组成