RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux電源管理實(shí)例分析

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-20 11:13 ? 次閱讀

實(shí)例分析

最近博主遇到 i2c 傳輸慢和中斷觸發(fā)慢的問題,一般這種【慢】的情況大都和【性能與功耗沖突】相關(guān),研究了 Qos 系統(tǒng),打了筆 patch 解決了。

中斷觸發(fā)慢:注冊(cè)的下降沿中斷,從下降沿打到芯片中,到跑到中斷處理函數(shù),快則 270us,慢則 2.7ms。由于所做功能對(duì)中斷處理時(shí)間有要求,因此要解決中斷處理慢的問題。

抓 trace 分析

使用上次博主發(fā)的腳本,可以抓到 ftrace,這個(gè)腳本中博主使能了 sched_switch、sched_wakeup、irq、irq_handler_entry、irq_handler_exit、cpu_idle、pm_qos_update_request 等 event。這些 event 可以記錄下 CPU 調(diào)度和中斷處理情況。

從抓到的 trace 分析,中斷處理慢并不是由于 CPU loading 重導(dǎo)致的處理不及時(shí),而是中斷來的時(shí)候,CPU0 處于 idle 狀態(tài),而 kernel-5.10 以后除了特定的 feature,所有的中斷都默認(rèn)發(fā)到 CPU0,這樣即便設(shè)置了中斷可以喚醒系統(tǒng),把 CPU0 從 idle 轉(zhuǎn)為 active 也要 1ms。

問題確定后,就是如何處理的問題了。找了低功耗的同事,確認(rèn) CPU 在沒事情做的時(shí)候就是會(huì)進(jìn)入 idle,即便在游戲場景,也不會(huì)禁止 CPU 進(jìn)入 idle。

研究了一下 Linux 電源管理子系統(tǒng),發(fā)現(xiàn) Qos 有接口可以使用:在某一段時(shí)間內(nèi)拉 Qos,可以讓 CPU 在這段時(shí)間不進(jìn)入 idle,使用完畢再去掉 Qos,讓 CPU 可以進(jìn)入 idle,這樣滿足了性能需求,帶來的功耗也不是特別高。

PM QoS classes framework 位于 kernel/power/qos.c 中,負(fù)責(zé)系統(tǒng)級(jí)別的 PM QoS 管理。per-device PM QoS framework 位于 drivers/base/power/qos.c 中,負(fù)責(zé) per-device 的 PM QoS 管理。Common header 位于 include/linux/pm_qos.h 中,負(fù)責(zé)通用數(shù)據(jù)結(jié)構(gòu)的抽象、函數(shù)聲明等工作。

在 kernel/power/qos.c 中,有 cpu_latency_qos_update_request 接口可以使用,通過該接口將 Qos 拉到 150,使用完畢再將 Qos 拉到 -1(關(guān)閉)。

使用方法:

1、文件開頭注冊(cè)自己的結(jié)構(gòu)體:struct pm_qos_request my_qos_request;

2、自己驅(qū)動(dòng)的 probe 函數(shù)加上: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 其實(shí)就是 -1

這樣在自己做事情期間,CPU 就不會(huì)進(jìn)入 idle,自己模塊的性能就會(huì)好很多。如果還要更好,可以在此期間調(diào)節(jié) CPU 頻率,但調(diào)頻帶來的功耗很高,需要自己評(píng)估。

該 patch 解決的問題:

1、中斷處理慢,可以在第一次中斷打進(jìn)來后,拉 Qos,這樣自己后面的幾次中斷處理一定會(huì)快,使用完畢后,去掉 Qos。

2、i2c 傳輸慢,其中一種情況是 i2c 傳輸完畢返回時(shí),CPU0 進(jìn)入 idle,導(dǎo)致 i2c 中斷打不進(jìn)來,這種情況,我們?cè)谡{(diào)用 i2c_transfer 前后加上 cpu_latency_qos_update_request 的接口,就可以解決該問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電源
    +關(guān)注

    關(guān)注

    184

    文章

    17704

    瀏覽量

    249959
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211578
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209327
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    以AM33XX為實(shí)例的OMAP的電源管理功能

    本系列文章將分析Linux對(duì)于OMAP的電源管理功能,以AM33XX作為實(shí)例(目前的硬件平臺(tái)先主要關(guān)注AM335xStarterKit開發(fā)板
    發(fā)表于 09-12 10:56 ?1614次閱讀
    以AM33XX為<b class='flag-5'>實(shí)例</b>的OMAP的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>功能

    Linux下的動(dòng)態(tài)電源管理(DPM)技術(shù)分析

    就目前掌握的資料來看,用嵌入式Linux系統(tǒng)的動(dòng)態(tài)電源管理只有IBM奧斯汀實(shí)驗(yàn)室和MontaVista聯(lián)合開發(fā)的動(dòng)態(tài)電源管理(DPM)(ht
    發(fā)表于 09-14 12:51 ?2875次閱讀
    <b class='flag-5'>Linux</b>下的動(dòng)態(tài)<b class='flag-5'>電源</b><b class='flag-5'>管理</b>(DPM)技術(shù)<b class='flag-5'>分析</b>

    linux嵌入式socket編程原理及實(shí)例分析

    linux嵌入式socket編程原理及實(shí)例分析
    發(fā)表于 08-20 08:12

    嵌入式Linux驅(qū)動(dòng)開發(fā)實(shí)例分析

    嵌入式Linux驅(qū)動(dòng)開發(fā)實(shí)例分析
    發(fā)表于 08-20 09:59

    探究Linux電源管理模型

    Linux電源管理/#more探究Linux電源管理模型,并為Tiny4412的LCD驅(qū)動(dòng)添加
    發(fā)表于 10-29 06:04

    LINUX電源管理的相關(guān)資料分享

    Linux的系統(tǒng)suspend和resumeLinux內(nèi)核 runtime_PM 框架Linux內(nèi)核電源管理綜述
    發(fā)表于 11-15 07:10

    Linux電源管理的系統(tǒng)架構(gòu)和驅(qū)動(dòng)

    驅(qū)動(dòng)篇:inux 電源管理的系統(tǒng)架構(gòu)和驅(qū)動(dòng)(一)Linux 電源管理的全局架構(gòu)Linux 在消費(fèi)
    發(fā)表于 01-03 06:36

    嵌入式Linux系統(tǒng)的動(dòng)態(tài)電源管理技術(shù)

    嵌入式Linux系統(tǒng)的動(dòng)態(tài)電源管理技術(shù) 通過用戶層制定策略與內(nèi)核提供管理功能交互,實(shí)時(shí)調(diào)整電源參數(shù)而同時(shí)滿足系統(tǒng)實(shí)時(shí)應(yīng)用的需求,允許
    發(fā)表于 12-23 10:54 ?840次閱讀
    嵌入式<b class='flag-5'>Linux</b>系統(tǒng)的動(dòng)態(tài)<b class='flag-5'>電源</b><b class='flag-5'>管理</b>技術(shù)

    Linux網(wǎng)絡(luò)編程實(shí)例詳解

    網(wǎng)絡(luò)通訊教程學(xué)習(xí)之Linux網(wǎng)絡(luò)編程實(shí)例詳解
    發(fā)表于 09-01 14:55 ?0次下載

    Linux電源管理

    CSDN僅用于增加百度收錄權(quán)重,排版未優(yōu)化,日常不維護(hù)。請(qǐng)?jiān)L問:www.hceng.cn 查看、評(píng)論。本博文對(duì)應(yīng)地址: https://hceng.cn/2018/01/18/Linux電源管理
    發(fā)表于 10-21 20:21 ?5次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    LINUX電源管理

    Linux的系統(tǒng)suspend和resumeLinux內(nèi)核 runtime_PM 框架Linux內(nèi)核電源管理綜述
    發(fā)表于 11-07 19:36 ?8次下載
    <b class='flag-5'>LINUX</b><b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    Linux電源管理研究筆記—?jiǎng)討B(tài)電源管理 DPM

    Linux電源管理研究筆記—?jiǎng)討B(tài)電源管理 DPM
    發(fā)表于 01-07 11:56 ?6次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>電源</b><b class='flag-5'>管理</b>研究筆記—?jiǎng)討B(tài)<b class='flag-5'>電源</b><b class='flag-5'>管理</b> DPM

    linux系統(tǒng)磁盤管理分析必備命令

    今天浩道跟大家分享linux磁盤管理分析相關(guān)的硬核干貨,通過這些指令,可以讓你高效運(yùn)維!
    的頭像 發(fā)表于 02-09 09:54 ?709次閱讀

    Linux系統(tǒng) 電源管理的組成

    Linux 電源管理的組成 電源管理(Power Management)在 Linux Kern
    的頭像 發(fā)表于 07-20 11:11 ?774次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng) <b class='flag-5'>電源</b><b class='flag-5'>管理</b>的組成

    基于嵌入式Linux系統(tǒng)的電源管理軟件

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式Linux系統(tǒng)的電源管理軟件.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 10:33 ?1次下載
    基于嵌入式<b class='flag-5'>Linux</b>系統(tǒng)的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>軟件
    RM新时代网站-首页