在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

電源管理入門:PM QoS框架介紹

yzcdx ? 來源:OS與AUTOSAR研究 ? 2023-11-29 10:12 ? 次閱讀

QoS(Quality Of Service,服務質量),一般在網絡報文中,某個報文的優先級比較高優先傳輸,例如我們覺得微信聊天比看網頁更重要,我們就可以提高微信報文的等級即服務質量QoS,來提供好的網絡服務解決延遲、網絡阻塞等問題。

電源管理里面的策略就各種governor,例如什么時候進入cpuidle、什么時候DevFreq等,這些策略是很單一的,算法也都是很單調的,未考慮到消費者的實際需求,那怎么樣把用戶的需求也在電源管理里面生效呢?

答案就是在governor中引入QoS,在governor中會去查QoS的策略,綜合起來進行決策

1. 系統框架介紹

1.1 功耗控制可能影響用戶體驗的一些痛點

而且功耗管理會引入對性能的缺點,主要兩方面:

延時(latency)增加:時間的開銷,尤其是在恢復的過程中需要時間。比如,系統喚醒需要經過各驅動的恢復,power domain的上電過程也有時間開銷。

吞吐量(Throughput)減少:低功耗也會帶來算力的影響,會降低算力及網路的吞吐量。比如,cpu dvfs、cpu hotplug、cpu idle等會影響到cpu算力。

比如在usb傳輸的時候把dma給限制了,導致傳輸速率下降,這些是用戶不希望看到的。

又比如延時和性能開銷,影響到用戶的體驗,比如界面操作不流暢、卡頓,響應時間過長。

這就像蘋果手機很流暢優先響應用戶的需求,安卓可能更高效但是有點卡,用戶就覺得屏幕劃不動了。但是很明顯蘋果手機更有市場,用戶體驗才是王道

在面對用戶場景的情況下,我們需要在策略中考慮到用戶使用感受。在用戶眼里更多的看中應用服務,而且不是一味的強調功耗低,為了核心業務和用戶體驗是可以適當的犧牲功耗的,產品做出來最終還是要用戶用的,技術再好,功耗再低,不滿足用戶習慣就是0.

如果把Linux PM當做一種服務,那么他對其他模塊的影響就類比為服務的質量,要滿足其他指標不受到影響的情況下最大化的省電,這才是最終目標。那么這里PM QoS的作用就是定義一套框架,以滿足系統(如設備驅動等)對QoS的期望為終極目標,通俗的講:根據實際場景,這些期望可以描述為:xxx不大于某個值等等。

1.2 QoS框架

3a79fc10-8dda-11ee-939d-92fbcf53809c.png

PM QOS使用constraint(約束)作為指標,用于各模塊對PM的訴求及限制。當前系統的指標主要有兩類,分別對應兩個PM QOS framework。

系統級constraint:包括cpu&dma latency(5.4內核),它的實際意義是,當產生一個事件之后(如一個中斷),CPU或DMA的響應延遲。例如有些CPU的串口控制器,只有幾個byte的FIFO,當接收數據時,CPU或DMA必須在FIFO填滿前,將數據讀走,否則就可能丟失數據或者降低數據的傳輸速率。由PM QoS classes framework管理,定義在kernel/power/qos.c中。

設備級constraint:包括從低功耗狀態resume的latency、active狀態的latency和一些QoS flag(如是否允許power off)。由per-device PM QoS framework管理,定義在drivers/base/power/qos.c。

3a9ed076-8dda-11ee-939d-92fbcf53809c.png

整個PM QOS框架分為三部分:

需求方:各service、各driver。他們根據自己的功能需求,提出系統或某些功能的QOS約束,比如cpu&dma latency。

框架層:PM QOS framework,包含PM QOS classes、per device PM QOS。向需求方提供request的add、modify、remove等接口,用于管理QoS requests。對需求方的約束進行分類,計算出極值,比如cpu&dma latency不小于某個值。向執行方提供request value的查詢接口。PM QoS classes framework位于kernel/power/qos.c中,負責系統級別的PM QoS管理,通過misc設備(/dev/cpu_dma_latency),向用戶空間程序提供PM QoS的request、modify、remove功能,以便滿足各service對PM QoS的需求。per-device PM QoS framework位于drivers/base/power/qos.c中,負責per-device的PM QoS管理。

執行方:power management的機制,比如cpuidle、cpu dvfs等。需要滿足由框架層根據需求方提供的約束計算的極值,才能執行相應的低功耗機制。

2. 用戶空間操作流程

3aaeaaaa-8dda-11ee-939d-92fbcf53809c.png

2.2 用戶空間數據結構和API

struct pm_qos_object {
struct pm_qos_constraints *constraints;
struct miscdevice pm_qos_power_miscdev;
char *name;
};

struct pm_qos_object,在給每個class定義pm_qos_constraints結構體的同時也為每個class定義了miscdev變量,用于給用戶空間提供接口。

這些接口主要實現各類PM QoS需求的匯總和計算極值的工作:add/update/remove等,并且提供接口給到用戶空間process,用于用戶空間的QoS需求,另外還提供了一些notifier API,用于跟蹤指定的PM QoS的變化。

主要API:

void pm_qos_add_request(struct pm_qos_request *req,int pm_qos_class, s32 value)

1)用于向PM QoS framework添加一個QoS請求,主要是根據指定的pm_qos_class,向pm_qos_class鏈表中插入一個新的pm_qos_request節點,并且更新target value。

3ada1758-8dda-11ee-939d-92fbcf53809c.png

void pm_qos_update_request(struct pm_qos_request *req,s32 new_value)

3af9eda8-8dda-11ee-939d-92fbcf53809c.png

void pm_qos_update_request_timeout(struct pm_qos_request *req, s32 new_value, unsigned long timeout_us)//在update的基礎上多出來一個定時器,用于特定需求的延遲更新

2) pm_qos_update_request/pm_qos_update_request_timeout,如果應用場景變化需要滿足不同的要求(比如串口波特率變大,相應的響應延遲需要變小),則需要調用該接口來更新相應的qos請求。函數體的主要部分pm_qos_update_target和Add相似,這里就不再介紹。

3) pm_qos_remove_request,如果對該class沒有需求,則可以調用該接口將請求移除。

4) 借助misc設備向用戶空間提供的接口(open/read/write等),調用的接口和上面提到的add/remove等類似,這里就不再贅述。

5) pm_qos_add_notifier/ pm_qos_remove_notifier,有部分實體(如cpuidle,比較關注cpu_dma_latency的指標)會比較關注某一個pm qos class的target value的變化,kernel提供了這樣一個notifier的機制,該實體可以通過pm_qos_add_notifier接口添加一個notifier,這樣當value變化時,framework便會通過notifier的回調函數,通知該實體。

需求方:

3b0e9438-8dda-11ee-939d-92fbcf53809c.png

執行方:

3b276e72-8dda-11ee-939d-92fbcf53809c.png

2.1 struct pm_qos_constraints

struct pm_qos_constraints {
struct plist_head list;
s32 target_value;/* Do not change to 64 bit */
s32 default_value;
s32 no_constraint_value;
enum pm_qos_type type;
struct blocking_notifier_head *notifiers;
};

struct pm_qos_request {
struct plist_node node;
int pm_qos_class;
struct delayed_work work; /* for pm_qos_update_request_timeout */
};

struct pm_qos_request用于request的add/update/remove等操作。

struct pm_qos_constraints,pm qos約束,用于抽象某一個特定的PM QoS class。

target_value、default_value,分別是該指標的目標值(滿足所有需求的value,可以是極大值或者極小值等,某一個指標關注的是極大值還是極小值在初始化的時候已經確定),默認值(該指標的默認值,通常是0,表示沒有限制)。

3. 初始化流程

3b3218c2-8dda-11ee-939d-92fbcf53809c.png

static int __init pm_qos_power_init(void)
{
for (i = PM_QOS_CPU_DMA_LATENCY; i < PM_QOS_NUM_CLASSES; i++) {
ret = register_pm_qos_misc(pm_qos_array[i], d);
if (ret < 0) {
printk(KERN_ERR "pm_qos_param: %s setup failed
",
       pm_qos_array[i]->name);
return ret;
}
}

系統支持的QOS類型:

enum {
PM_QOS_RESERVED = 0,
PM_QOS_CPU_DMA_LATENCY,
PM_QOS_NETWORK_LATENCY,
PM_QOS_NETWORK_THROUGHPUT,
PM_QOS_MEMORY_BANDWIDTH,

/* insert new class ID */
PM_QOS_NUM_CLASSES,
};

debugfs_create_file()會創建sysfs供用戶空間調用。

4. DMA舉例

例如啟動攝像頭的時候,我們系統即便在省電的情況下,也需要cpu_dma允許的延遲時間不能超過50us,否則影響畫面質量。

drivers/media/platform/via-camera.c中

3b423c70-8dda-11ee-939d-92fbcf53809c.png

pm_qos_add_request:在啟動camera的時候,這里請求了一個cpu_dma_latency的指標,為50us,即camera driver申請的cpu_dma允許的延遲時間不能超過50us

cpuidle初始化的時候會調用:

static inline void latency_notifier_init(struct notifier_block *n)
{
pm_qos_add_notifier(PM_QOS_CPU_DMA_LATENCY, n);
}

PM_QOS_CPU_DMA_LATENCY變化的時候會通知cpuidle

在進行cpuidle決策的時候,例如ladder governor中,

static int ladder_select_state(struct cpuidle_driver *drv,
struct cpuidle_device *dev)
{
struct ladder_device *ldev = this_cpu_ptr(&ladder_devices);
struct ladder_device_state *last_state;
int last_residency, last_idx = ldev->last_state_idx;
int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY);

pm_qos_request()函數會獲取target_value,根據這個值來決定進行什么級別的idle。

對于cpuidle idle來說,一般有C1~C3幾個等級,在C3等級的退出延遲時間是57us(不同平臺會有差別),那么這里camera driver需求的50us容忍延遲就可以讓cpuidle退到C2 idle等級(即前面章節提到的執行方需要確保自身的行為滿足這些pm qos的需求),就不會導致上面說的DMA transfer gets corrupted的問題了。

后記

內核版本有時候差異也挺大的,一個機制,特別是小眾的可能會有更新,我們在找資料的時候,就需要注意這點,找到合適的學習資料。不過主要的思想是不變的,變的就是結構體定義,api函數的調用流程等。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電源管理
    +關注

    關注

    115

    文章

    6183

    瀏覽量

    144506
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40290
  • 網絡
    +關注

    關注

    14

    文章

    7565

    瀏覽量

    88788

原文標題:電源管理入門-15 PM QoS

文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    電源管理入門:驅動Runtime PM管理

    Runtime PM管理也就是設備驅動里面的電源管理,即設備驅動結構體里面的struct dev_pm_ops,只控制設備自己的
    的頭像 發表于 11-29 10:13 ?3114次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:驅動Runtime <b class='flag-5'>PM</b><b class='flag-5'>管理</b>

    電源管理入門:Power Domain管理

    SoC中通常有很多IP,按邏輯可以把幾個相關功能的IP劃為一個電源域。一個電源域內的IP,通常按相同的方式由同一個硬件模塊PMIC供電,電壓一樣并且電源管理例如休眠喚醒一致。
    的頭像 發表于 11-29 10:16 ?3431次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Power Domain<b class='flag-5'>管理</b>

    電源管理入門-芯片設計中的電源管理介紹

    SCP直接控制SoC的電源和時鐘,而AP通過硬件和軟件接口協同管理
    的頭像 發表于 12-06 09:16 ?3304次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-芯片設計中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b><b class='flag-5'>介紹</b>

    電源管理入門:Hypervisor中的電源管理

    很多時候聽說Hypervisor,但是對底層軟件技術不了解的人感覺挺神秘。本篇文章簡單介紹下Hypervisor的基本概念,另外介紹電源管理在Hypervisor之上多OS間怎么應用
    的頭像 發表于 12-06 09:27 ?1457次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Hypervisor中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    LINUX電源管理的相關資料分享

    Linux的系統suspend和resumeLinux內核 runtime_PM 框架Linux內核電源管理綜述
    發表于 11-15 07:10

    嵌入式低功耗電源管理框架的設計資料分享

    概述目標本篇的目標是介紹低功耗電源管理框架設計的概念理解低功耗管理的重要性理解如何開發適合的低功耗管理
    發表于 12-21 07:39

    什么是PM QoS

    (requester)。PM QoS framework針對兩種對象分別提供了電源管理的基礎框架和接口。 那么在
    發表于 12-27 06:38

    RT-Thread PM2.0管理使用指南

    前言本篇主要對RT-Thread PM2.0(2021更新版)做個使用指南,介紹PM管理的新API的使用PM
    發表于 08-09 10:34

    RT-Thread PM框架怎么用?PM框架的作用是什么?

    ?RT-Thread PM框架 建議使用最新版本,使用最新的管理方法,【被動睡眠】,PM管理模塊化,也就是MCU是等大家都空閑了再去睡眠,而
    發表于 10-08 15:13

    一種新的Ad Hoc網絡QoS框架

    提出一種新的Ad Hoc網絡QoS保障框架。該框架能夠區分不同優先級的業務和不同QoS要求的業務。能夠保障在網絡可用資源不足的情況下,高優先級的業務通過“搶占”的方式接入網絡
    發表于 04-14 09:43 ?20次下載

    防火墻原理入門

    防火墻原理入門 防火墻能增強機構內部網絡的安全性。防火墻系統決定了哪些內部服務可以被外界訪問;外界的哪些人可以訪問內部的服務以及哪
    發表于 08-01 10:21 ?1023次閱讀
    防火墻原<b class='flag-5'>理入門</b>

    數字信號處理入門指南

    數字信號處理入門指南什么是DSP? 數字信號處理器(DSP)采集已被數字化的現實世界的聲音、音頻、視頻、溫度、壓力或位置等信號,并從數學的角度對其進
    發表于 09-15 08:55 ?1346次閱讀
    數字信號處<b class='flag-5'>理入門</b>指南

    新的AdHoc網絡QoS源路由框架

    框架采用模塊化思想進行設計,由可用寬帶計算、接入控制、資源預留等功能模塊組成,提出了新的AdHoc網絡QoS源路由框架設計
    發表于 05-26 15:44 ?32次下載
    新的AdHoc網絡<b class='flag-5'>QoS</b>源路由<b class='flag-5'>框架</b>

    LINUX電源管理

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

    Linux電源管理--PM QoS

    (requester)。PM QoS framework針對兩種對象分別提供了電源管理的基礎框架和接口。 那么在
    發表于 01-05 14:37 ?1次下載
    Linux<b class='flag-5'>電源</b><b class='flag-5'>管理</b>--<b class='flag-5'>PM</b> <b class='flag-5'>QoS</b>
    主站蜘蛛池模板: 丁香五月缴情在线| 69久久夜色精品国产69| 天天操天天谢| 中文字幕亚洲一区| 色综合天天网| 妇少香港三日本三级视频| vip影院在线观看| 性午夜影院| 日韩精品视频免费在线观看| 在线天堂在线| 69日本xxxxxxxxx内谢| 日韩美aaa特级毛片| 天天干天天做天天射| 欧美美女一区二区三区| 免费爱爱网址| 黄色录像大全| 婷婷激情亚洲| 九九九精品| 国产精品夜夜春夜夜爽久久| 亚洲成在线| brazzers在线播放| 国产理论最新国产精品视频| 亚洲人成电影在线播放| bt磁力在线搜索| 亚洲一区二区免费看| 欧美 在线播放| 狠狠干狠狠插| 天堂电影免费在线资源| 五月天婷婷网站| 4455亚洲| 六月婷婷七月丁香| 91一级片| 欧美一级片在线视频| 窝窝午夜看片免费视频| 国产一区二区在线视频播放| 欧美色a电影精品aaaa| 久久久久女人精品毛片| 四虎永久在线日韩精品观看| 国产三级日产三级韩国三级| 狼狼鲁狼狼色| 色91在线|