色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

電源管理入門(mén):PM QoS框架介紹

yzcdx ? 來(lái)源:OS與AUTOSAR研究 ? 2023-11-29 10:12 ? 次閱讀

QoS(Quality Of Service,服務(wù)質(zhì)量),一般在網(wǎng)絡(luò)報(bào)文中,某個(gè)報(bào)文的優(yōu)先級(jí)比較高優(yōu)先傳輸,例如我們覺(jué)得微信聊天比看網(wǎng)頁(yè)更重要,我們就可以提高微信報(bào)文的等級(jí)即服務(wù)質(zhì)量QoS,來(lái)提供好的網(wǎng)絡(luò)服務(wù)解決延遲、網(wǎng)絡(luò)阻塞等問(wèn)題。

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

答案就是在governor中引入QoS,在governor中會(huì)去查QoS的策略,綜合起來(lái)進(jìn)行決策

1. 系統(tǒng)框架介紹

1.1 功耗控制可能影響用戶體驗(yàn)的一些痛點(diǎn)

而且功耗管理會(huì)引入對(duì)性能的缺點(diǎn),主要兩方面:

延時(shí)(latency)增加:時(shí)間的開(kāi)銷,尤其是在恢復(fù)的過(guò)程中需要時(shí)間。比如,系統(tǒng)喚醒需要經(jīng)過(guò)各驅(qū)動(dòng)的恢復(fù),power domain的上電過(guò)程也有時(shí)間開(kāi)銷。

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

比如在usb傳輸?shù)臅r(shí)候把dma給限制了,導(dǎo)致傳輸速率下降,這些是用戶不希望看到的。

又比如延時(shí)和性能開(kāi)銷,影響到用戶的體驗(yàn),比如界面操作不流暢、卡頓,響應(yīng)時(shí)間過(guò)長(zhǎng)。

這就像蘋(píng)果手機(jī)很流暢優(yōu)先響應(yīng)用戶的需求,安卓可能更高效但是有點(diǎn)卡,用戶就覺(jué)得屏幕劃不動(dòng)了。但是很明顯蘋(píng)果手機(jī)更有市場(chǎng),用戶體驗(yàn)才是王道

在面對(duì)用戶場(chǎng)景的情況下,我們需要在策略中考慮到用戶使用感受。在用戶眼里更多的看中應(yīng)用服務(wù),而且不是一味的強(qiáng)調(diào)功耗低,為了核心業(yè)務(wù)和用戶體驗(yàn)是可以適當(dāng)?shù)臓奚牡模?a target="_blank">產(chǎn)品做出來(lái)最終還是要用戶用的,技術(shù)再好,功耗再低,不滿足用戶習(xí)慣就是0.

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

1.2 QoS框架

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

PM QOS使用constraint(約束)作為指標(biāo),用于各模塊對(duì)PM的訴求及限制。當(dāng)前系統(tǒng)的指標(biāo)主要有兩類,分別對(duì)應(yīng)兩個(gè)PM QOS framework。

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

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

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

整個(gè)PM QOS框架分為三部分:

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

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

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

2. 用戶空間操作流程

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

2.2 用戶空間數(shù)據(jù)結(jié)構(gòu)和API

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

struct pm_qos_object,在給每個(gè)class定義pm_qos_constraints結(jié)構(gòu)體的同時(shí)也為每個(gè)class定義了miscdev變量,用于給用戶空間提供接口。

這些接口主要實(shí)現(xiàn)各類PM QoS需求的匯總和計(jì)算極值的工作: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添加一個(gè)QoS請(qǐng)求,主要是根據(jù)指定的pm_qos_class,向pm_qos_class鏈表中插入一個(gè)新的pm_qos_request節(jié)點(diǎn),并且更新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的基礎(chǔ)上多出來(lái)一個(gè)定時(shí)器,用于特定需求的延遲更新

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

3) pm_qos_remove_request,如果對(duì)該class沒(méi)有需求,則可以調(diào)用該接口將請(qǐng)求移除。

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

5) pm_qos_add_notifier/ pm_qos_remove_notifier,有部分實(shí)體(如cpuidle,比較關(guān)注cpu_dma_latency的指標(biāo))會(huì)比較關(guān)注某一個(gè)pm qos class的target value的變化,kernel提供了這樣一個(gè)notifier的機(jī)制,該實(shí)體可以通過(guò)pm_qos_add_notifier接口添加一個(gè)notifier,這樣當(dāng)value變化時(shí),framework便會(huì)通過(guò)notifier的回調(diào)函數(shù),通知該實(shí)體。

需求方:

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

執(zhí)行方:

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約束,用于抽象某一個(gè)特定的PM QoS class。

target_value、default_value,分別是該指標(biāo)的目標(biāo)值(滿足所有需求的value,可以是極大值或者極小值等,某一個(gè)指標(biāo)關(guān)注的是極大值還是極小值在初始化的時(shí)候已經(jīng)確定),默認(rèn)值(該指標(biāo)的默認(rèn)值,通常是0,表示沒(méi)有限制)。

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;
}
}

系統(tǒng)支持的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()會(huì)創(chuàng)建sysfs供用戶空間調(diào)用。

4. DMA舉例

例如啟動(dòng)攝像頭的時(shí)候,我們系統(tǒng)即便在省電的情況下,也需要cpu_dma允許的延遲時(shí)間不能超過(guò)50us,否則影響畫(huà)面質(zhì)量。

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

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

pm_qos_add_request:在啟動(dòng)camera的時(shí)候,這里請(qǐng)求了一個(gè)cpu_dma_latency的指標(biāo),為50us,即camera driver申請(qǐng)的cpu_dma允許的延遲時(shí)間不能超過(guò)50us

cpuidle初始化的時(shí)候會(huì)調(diào)用:

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變化的時(shí)候會(huì)通知cpuidle

在進(jìn)行cpuidle決策的時(shí)候,例如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()函數(shù)會(huì)獲取target_value,根據(jù)這個(gè)值來(lái)決定進(jìn)行什么級(jí)別的idle。

對(duì)于cpuidle idle來(lái)說(shuō),一般有C1~C3幾個(gè)等級(jí),在C3等級(jí)的退出延遲時(shí)間是57us(不同平臺(tái)會(huì)有差別),那么這里camera driver需求的50us容忍延遲就可以讓cpuidle退到C2 idle等級(jí)(即前面章節(jié)提到的執(zhí)行方需要確保自身的行為滿足這些pm qos的需求),就不會(huì)導(dǎo)致上面說(shuō)的DMA transfer gets corrupted的問(wèn)題了。

后記

內(nèi)核版本有時(shí)候差異也挺大的,一個(gè)機(jī)制,特別是小眾的可能會(huì)有更新,我們?cè)谡?a href="http://www.1cnz.cn/soft/special/" target="_blank">資料的時(shí)候,就需要注意這點(diǎn),找到合適的學(xué)習(xí)資料。不過(guò)主要的思想是不變的,變的就是結(jié)構(gòu)體定義,api函數(shù)的調(diào)用流程等。

審核編輯:湯梓紅

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

    關(guān)注

    115

    文章

    6177

    瀏覽量

    144447
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40278
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7553

    瀏覽量

    88731

原文標(biāo)題:電源管理入門(mén)-15 PM QoS

文章出處:【微信號(hào):OS與AUTOSAR研究,微信公眾號(hào):OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電源管理入門(mén):驅(qū)動(dòng)Runtime PM管理

    Runtime PM管理也就是設(shè)備驅(qū)動(dòng)里面的電源管理,即設(shè)備驅(qū)動(dòng)結(jié)構(gòu)體里面的struct dev_pm_ops,只控制設(shè)備自己的
    的頭像 發(fā)表于 11-29 10:13 ?3024次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門(mén)</b>:驅(qū)動(dòng)Runtime <b class='flag-5'>PM</b><b class='flag-5'>管理</b>

    電源管理入門(mén):Power Domain管理

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

    電源管理入門(mén)-芯片設(shè)計(jì)中的電源管理介紹

    SCP直接控制SoC的電源和時(shí)鐘,而AP通過(guò)硬件和軟件接口協(xié)同管理
    的頭像 發(fā)表于 12-06 09:16 ?3261次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門(mén)</b>-芯片設(shè)計(jì)中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b><b class='flag-5'>介紹</b>

    電源管理入門(mén):Hypervisor中的電源管理

    很多時(shí)候聽(tīng)說(shuō)Hypervisor,但是對(duì)底層軟件技術(shù)不了解的人感覺(jué)挺神秘。本篇文章簡(jiǎn)單介紹下Hypervisor的基本概念,另外介紹電源管理在Hypervisor之上多OS間怎么應(yīng)用
    的頭像 發(fā)表于 12-06 09:27 ?1447次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門(mén)</b>:Hypervisor中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>

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

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

    嵌入式低功耗電源管理框架的設(shè)計(jì)資料分享

    概述目標(biāo)本篇的目標(biāo)是介紹低功耗電源管理框架設(shè)計(jì)的概念理解低功耗管理的重要性理解如何開(kāi)發(fā)適合的低功耗管理
    發(fā)表于 12-21 07:39

    什么是PM QoS

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

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

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

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

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

    一種新的Ad Hoc網(wǎng)絡(luò)QoS框架

    提出一種新的Ad Hoc網(wǎng)絡(luò)QoS保障框架。該框架能夠區(qū)分不同優(yōu)先級(jí)的業(yè)務(wù)和不同QoS要求的業(yè)務(wù)。能夠保障在網(wǎng)絡(luò)可用資源不足的情況下,高優(yōu)先級(jí)的業(yè)務(wù)通過(guò)“搶占”的方式接入網(wǎng)絡(luò)
    發(fā)表于 04-14 09:43 ?20次下載

    防火墻原理入門(mén)

    防火墻原理入門(mén) 防火墻能增強(qiáng)機(jī)構(gòu)內(nèi)部網(wǎng)絡(luò)的安全性。防火墻系統(tǒng)決定了哪些內(nèi)部服務(wù)可以被外界訪問(wèn);外界的哪些人可以訪問(wèn)內(nèi)部的服務(wù)以及哪
    發(fā)表于 08-01 10:21 ?1022次閱讀
    防火墻原<b class='flag-5'>理入門(mén)</b>

    數(shù)字信號(hào)處理入門(mén)指南

    數(shù)字信號(hào)處理入門(mén)指南什么是DSP? 數(shù)字信號(hào)處理器(DSP)采集已被數(shù)字化的現(xiàn)實(shí)世界的聲音、音頻、視頻、溫度、壓力或位置等信號(hào),并從數(shù)學(xué)的角度對(duì)其進(jìn)
    發(fā)表于 09-15 08:55 ?1345次閱讀
    數(shù)字信號(hào)處<b class='flag-5'>理入門(mén)</b>指南

    新的AdHoc網(wǎng)絡(luò)QoS源路由框架

    框架采用模塊化思想進(jìn)行設(shè)計(jì),由可用寬帶計(jì)算、接入控制、資源預(yù)留等功能模塊組成,提出了新的AdHoc網(wǎng)絡(luò)QoS源路由框架設(shè)計(jì)
    發(fā)表于 05-26 15:44 ?32次下載
    新的AdHoc網(wǎng)絡(luò)<b class='flag-5'>QoS</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次下載
    LINUX<b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    Linux電源管理--PM QoS

    (requester)。PM QoS framework針對(duì)兩種對(duì)象分別提供了電源管理的基礎(chǔ)框架和接口。 那么在
    發(fā)表于 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>
    主站蜘蛛池模板: 国产毛片女人18水多| 久草免费视频在线观看| 青青草原在线免费| 1819sextub欧美中国| 狠狠射首页| 亚州视频一区| 国产传媒麻豆剧精品AV| 欧美最猛12teevideos| 538prom国产在线视频一区| 久久久无码精品亚洲欧美| 亚洲人成在线播放网站岛国| 国产精品色无码AV在线观看| 三级成年网站在线观看| 爱穿丝袜的麻麻3d漫画免费| 捏揉舔水插按摩师| 最近中文字幕在线看免费完整版| 极品少妇伦理一区二区| 亚洲精品第一页中文字幕| 国产精品久久久久久免费播放| 肉动漫无修3D在线观看| 被肉日常np快穿高h| 青青青草国产| 成人免费在线| 三级黄色a| 国产精品外围在线观看| 无套内射纹身女视频| 国产精品99久久久久久宅男AV| 丝瓜涩涩屋黄瓜香蕉丝瓜| 国产产乱码一二三区别免费| 色欲久久99精品久久久久久AV| 国产99对白在线播放| 四虎影院2022| 国产人成无码视频在线观看| 亚洲.日韩.欧美另类| 黑人特黄AA完整性大片| 亚洲无吗在线视频| 台湾18成人影院| 扒开 浓密 毛| 亚洲欧美一区二区成人片| 巨胸美女狂喷奶水www网麻豆| 亚洲精品国产自在在线观看|