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 的接口,就可以解决该问题。

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

    关注

    184

    文章

    17710

    浏览量

    250028
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10858

    浏览量

    211645
  • Linux
    +关注

    关注

    87

    文章

    11298

    浏览量

    209388
收藏 人收藏

    评论

    相关推荐

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

    本系列文章将分析Linux对于OMAP的电源管理功能,以AM33XX作为实例(目前的硬件平台先主要关注AM335xStarterKit开发板
    发表于 09-12 10:56 1615次阅读
    以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 2875次阅读
    <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电源管理/#more探究Linux电源管理模型,并为Tiny4412的LCD驱动添加
    发表于 10-29 06:04

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

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

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

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

    嵌入式Linux系统的动态电源管理威廉希尔官方网站

    嵌入式Linux系统的动态电源管理威廉希尔官方网站 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许
    发表于 12-23 10:54 841次阅读
    嵌入式<b class='flag-5'>Linux</b>系统的动态<b class='flag-5'>电源</b><b class='flag-5'>管理</b>威廉希尔官方网站

    Linux网络编程实例详解

    网络通讯教程学习之Linux网络编程实例详解
    发表于 09-01 14:55 0次下载

    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 710次阅读

    Linux系统 电源管理的组成

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