日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216

發(fā)布時(shí)間:2023/12/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)核領(lǐng)域-功耗機(jī)型的續(xù)航基線優(yōu)化問(wèn)題-技術(shù)調(diào)研報(bào)告_20211216

一. 問(wèn)題

  • 軟硬件環(huán)境

設(shè)備: Loongson Loongson-LS3A5000-7A1000-1w-V0.1-CRB (Loongson_SKU) Notebook
操作系統(tǒng): UnionTech OS Desktop 20 Professional Linux version 4.19.0-loongson-3-desktop (uos@uos-PC) (Debian 8.3.0-6.lnd.vec.23) #4206 SMP Thu Nov 4 11:19:17 CST 2021
處理器: Loongson-3A5000M (四核 / 四邏輯處理器)
主板: Loongson-LS3A5000-7A1000-1w-V0.1-CRB
內(nèi)存: 8GB(SCC08GS03H3F1C-32AA DDR4 3200MHz (0.3ns))
顯示適配器: Oland [Radeon HD 8570 / R7 240/340 OEM]
音頻適配器: HDA (High Definition Audio) Controller/Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
存儲(chǔ)設(shè)備: Silicon Motion Disk (256 GB)
電池: 電池
藍(lán)牙: Intel Bluetooth Device
網(wǎng)絡(luò)適配器: Wireless 7265/RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
鼠標(biāo): ImPS/2 Generic Wheel Mouse (ImPS/2 Generic Wheel Mouse)
鍵盤: AT Translated Set 2 keyboard (AT Translated Set 2 keyboard)
顯示設(shè)備: LCD Monitor(13.9 英寸 (309x173 mm))
其他設(shè)備: FT9201Fingerprint.

  • 重現(xiàn)步驟

    各個(gè)模式下測(cè)試?yán)m(xù)航時(shí)間,當(dāng)前檢測(cè)儀器限制只能測(cè)試運(yùn)行狀態(tài)的續(xù)航時(shí)間。

  • 問(wèn)題現(xiàn)象

    目前所有筆記本電池供電續(xù)航時(shí)間短。

  • 期望結(jié)果

    筆記本電池供電延長(zhǎng)續(xù)航時(shí)間。

二. 現(xiàn)狀

??筆記本不使用外部電源供電時(shí),只使用內(nèi)部電池供電維持正常使用和待機(jī)、休眠等模式,由于很難去更換,那么低功耗就顯得尤為重要。目前筆記本功耗無(wú)基礎(chǔ)數(shù)據(jù)、無(wú)優(yōu)化方案,功耗相關(guān)的知識(shí)薄弱。

??Linux 作為一個(gè)偏重 server side 的操作系統(tǒng),它效仿的對(duì)象主要是傳統(tǒng)的 Unix。加上早期 Linus 等開(kāi)發(fā)者使用的電腦一般都比較老舊,因此 Linux 一開(kāi)始其目標(biāo)主機(jī)就不是普通用戶使用的臺(tái)式機(jī)或者筆電,對(duì)硬件的向后兼容性也比較重視,而對(duì)個(gè)人電腦硬件上的新特性則支持不是那么優(yōu)雅——當(dāng)然,這也和不少硬件廠商既不愿意為 Linux 自行開(kāi)發(fā)驅(qū)動(dòng)程序也不愿意為 Linux 開(kāi)發(fā)者提供足夠技術(shù)資料的做法有關(guān)。一個(gè)對(duì)于個(gè)人電腦用戶比較明顯的影響,就是 Linux 對(duì)計(jì)算機(jī)的電源管理支持一直都不如 Windows,即算是經(jīng)過(guò)個(gè)人電腦業(yè)中的老戰(zhàn)士 Apple 基于 BSD 改造出來(lái)的 OS X,在自家的 iBook/PowerBook 上,表現(xiàn)出來(lái)的電源管理能力也不如采用 Windows 的筆電(而例如 Panasonic 的筆電,甚至可以提供最長(zhǎng)15個(gè)小時(shí)的續(xù)航能力)。

三. 技術(shù)方案

3.1 功耗是怎么產(chǎn)生的?功耗大小與哪些因素有關(guān)?

??低功耗的目的就是提高電池供電的電子產(chǎn)品的使用時(shí)間,分析功耗前先認(rèn)識(shí)電量相關(guān)的基礎(chǔ)知識(shí)。功耗(Power)和能量(Energy)是兩個(gè)完全不同的概念,功耗是一個(gè)瞬時(shí)的概念,而能量是一個(gè)時(shí)間內(nèi)的消耗。

  • 能量=功耗*時(shí)間

??稍微分析一下就可以知道,比如PC筆電,能量越大(也就是電池越大),使用時(shí)間越長(zhǎng)。同時(shí)如果功率越小,就顯得越不耗電,使用時(shí)間就越長(zhǎng)。當(dāng)年高通驍龍820就是功耗沒(méi)做好,輸給了麒麟920,給了華為麒麟崛起的機(jī)會(huì)。現(xiàn)在華為手機(jī)電池耐用已經(jīng)深入人心了。同時(shí)隨著設(shè)備消耗能量,會(huì)產(chǎn)生熱量。功耗越大,產(chǎn)生熱量越快。如果不能及時(shí)散熱,那么設(shè)備溫度就會(huì)升高。溫度升高可能導(dǎo)致設(shè)備不能正常工作甚至損壞。所以有些芯片會(huì)在溫度升高時(shí)候,把頻率降低,本來(lái)能跑2GHz的CPU,溫度高了就只能跑1G,這個(gè)以前在用手機(jī)玩游戲的時(shí)候體驗(yàn)比較明顯。可以看到,低功耗技術(shù)直接決定商業(yè)競(jìng)爭(zhēng)的成敗!低功耗對(duì)芯片的影響還有很多方面。

??現(xiàn)在筆記本已經(jīng)非常普遍,人們?nèi)绾卧黾佑?jì)算機(jī)的續(xù)航已經(jīng)成 為一個(gè)難題,比如不同場(chǎng)景下筆記本的功耗是不同的,玩游戲比看電影更費(fèi)電,更多的是CPU功耗,對(duì)電池影響最大的是CPU的頻率。當(dāng)我插電時(shí),我想要全速,但是當(dāng)我拔掉插頭時(shí),我想要盡可能多的電池續(xù)航。其中CPU處理器的功耗過(guò)大時(shí)會(huì)產(chǎn)生大量的熱量,如果散熱條件跟不上,那就會(huì)因?yàn)闇囟冗^(guò)高而影響晶體管的穩(wěn)定性。

??在一個(gè)系統(tǒng)中,數(shù)量最多的是設(shè)備,耗電最多的也是設(shè)備,因此設(shè)備的電源管理是Linux電源管理的核心內(nèi)容。而設(shè)備電源管理最核心的操作就是:在合適的時(shí)機(jī)(如不再使用,如暫停使用),將設(shè)備置為合理的狀態(tài)(如關(guān)閉,如睡眠)。電源管理模型包括:系統(tǒng)S3S4S5模型和Runtime電源管理模型。

??我們所說(shuō)的筆記本續(xù)航,主要是總的耗電功率,功耗來(lái)源分析其包括以下主要設(shè)備的耗電功率:1.CPU,2.顯卡,3.硬盤,4.主板,5.光驅(qū),6.內(nèi)存,7.網(wǎng)卡,8.聲卡,9.電源的自身?yè)p耗,10.顯示器等。系統(tǒng)低功延長(zhǎng)續(xù)航時(shí)間的設(shè)計(jì)是在操作系統(tǒng)層實(shí)現(xiàn)。因?yàn)椴僮飨到y(tǒng)管理系統(tǒng)所有軟硬件資源,并獲取系統(tǒng)的各種狀態(tài)信息,控制硬件設(shè)備的狀態(tài)。以下是對(duì)各個(gè)設(shè)備功率的概述:

  • CPU:CPU是計(jì)算機(jī)的心臟,也是計(jì)算機(jī)的主要耗能大戶。CPU是SOC主控制器,工作時(shí)CPU一般都必須要打開(kāi),隨著CPU頻率越來(lái)越高,功耗也越來(lái)越大。所以現(xiàn)在的多核,大小核就比較流行,不同場(chǎng)景下用不同功耗的CPU核;現(xiàn)在INTEL的P4主流CPU功率最大不超過(guò)84W。對(duì)于影院等應(yīng)用程序來(lái)說(shuō),軟件解碼場(chǎng)景使用CPU滿負(fù)荷運(yùn)行,硬解碼使用GPU時(shí)CPU大部分時(shí)間在等待任務(wù)而且很少滿負(fù)荷運(yùn)行,CPU的使用率可以調(diào)頻減少功耗。AMD和龍芯(mips、loongarch)的CPU由于制程限制,一般情況下消耗的功率要大一些。然而計(jì)算機(jī)是不斷發(fā)展的,現(xiàn)在的最新型號(hào)的CPU使用環(huán)境的不同,處理任務(wù)的不同,相同型號(hào)的CPU功耗都不一樣。對(duì)于一般的辦公用計(jì)算機(jī),由于處理的任務(wù)并不重,CPU絕大部分時(shí)間使用在非滿負(fù)荷情況下,可調(diào)整部分較多續(xù)航優(yōu)化空間較大。而對(duì)于那些需要經(jīng)常做3D效果和喜愛(ài)打游戲的玩家,CPU需要在很高的負(fù)荷下運(yùn)行,功率消耗也大,而且那些電腦都是高頻電腦,很多人還愛(ài)超頻,續(xù)航優(yōu)化空間有線。
    ??考慮到以后發(fā)展的需要,盡量先調(diào)試出最大的續(xù)航時(shí)間,再根據(jù)使用環(huán)境的不同做適配。
  • 顯卡:顯卡是計(jì)算機(jī)的圖形處理中心,由于不同群體對(duì)顯卡的要求不一樣,所以顯卡的耗電量也有很大的不同,從集成顯卡到高端主流顯卡都在被廣泛應(yīng)用。但即使是相同型號(hào)的顯卡,使用環(huán)境不一樣,其功率也有巨大的差異,比如2D圖形和3D圖形。
    ??下面是引用香港網(wǎng)站HKEPC發(fā)布的GeForce6800Ultra的評(píng)測(cè):HKEPC采用的是普通的電流表進(jìn)行測(cè)試,之后對(duì)功率進(jìn)行大約計(jì)算。在2D模式下,5V的輸入電流為1.86A,約為9.3W,而12V的電流為1.97A,約23.64W,合共32.94W。而在3D模式下,電流的波幅十分大,這全看GPU的工作量和其畫(huà)面的復(fù)雜程度,我們利用3DMark03作測(cè)試,原來(lái)最復(fù)雜的工作并不是Game4的MotherNature,而是Fill-Rate(MutilTexture)。在這個(gè)測(cè)試項(xiàng)目中,5V的輸入電流為3.01A,約為15.05W,而12V的電流為4.50A,約54W,合共70W。從以上數(shù)據(jù)可以看出,相同型號(hào)的GPU其在處理2D圖形和3D圖形時(shí)的差距達(dá)到一倍多。對(duì)于我們一般的辦公用計(jì)算機(jī),由于大部分使用的是集成顯卡,功耗最大為十幾瓦,一般不會(huì)超過(guò)15W即使使用的是非集成顯卡,也是用的低端顯卡,功率也不會(huì)超過(guò)20W的,建議取20W。而對(duì)于游戲?yàn)橹鞯母呒?jí)網(wǎng)卡,以及需要頻繁做大量3D的計(jì)算機(jī),功耗差異更大。
    ??為了將來(lái)的發(fā)展需要,建議先驗(yàn)證主流機(jī)型的各款顯卡。
  • 硬盤,硬盤(機(jī)械、固態(tài)等)使用時(shí)功率并不大,尤其筆記本并不會(huì)頻繁地從硬盤中寫入和讀取數(shù)據(jù),服務(wù)器優(yōu)先性能不涉及功耗優(yōu)化,所以平時(shí)硬盤大部分時(shí)間工作在空負(fù)荷情況下,由于將來(lái)大硬盤是發(fā)展趨勢(shì),所以考慮到發(fā)展需要,硬盤功耗優(yōu)化過(guò)程中優(yōu)先保證文件系統(tǒng)穩(wěn)定。
  • 主板,主板自身消耗涉及電路設(shè)計(jì),需要修改固件,協(xié)調(diào)廠商獲取硬件相關(guān)資料(原理圖、PCB布線、datasheet等),逐個(gè)分析硬件設(shè)計(jì)方案是否有功耗優(yōu)化空間,比如在系統(tǒng)休眠前后,如何設(shè)置GPIO管腳狀態(tài)。考慮到將來(lái)的發(fā)展可聯(lián)系整機(jī)廠商聯(lián)調(diào)。
  • 光驅(qū),光驅(qū)的功率消耗,考慮到以后發(fā)展,筆記本計(jì)算機(jī)已經(jīng)很少裝有內(nèi)置光驅(qū),暫不考慮。
  • 內(nèi)存,網(wǎng)卡(有線、無(wú)線),聲卡的耗電量,由于缺乏具體芯片數(shù)據(jù),對(duì)于筆記本三者加起來(lái)功耗優(yōu)化空間也很大,比如無(wú)線網(wǎng)卡在電池供電狀態(tài)切換到節(jié)能模式以降低功耗,功耗不會(huì)下降太多,長(zhǎng)時(shí)間來(lái)看可延長(zhǎng)了設(shè)備的使用壽命。外置喇叭看電路設(shè)計(jì)可能也是耗電大戶。
  • 電源,電源是計(jì)算機(jī)運(yùn)行所需的最關(guān)鍵的設(shè)備,缺了它或者它運(yùn)行不正常時(shí)都會(huì)給電腦的運(yùn)行帶來(lái)不良影響甚至產(chǎn)生事故,也是我們重點(diǎn)關(guān)注的對(duì)象。電流在經(jīng)過(guò)前級(jí)整流濾波電路后兵分兩路。一路是常電,即輸出為+5V,它是一個(gè)待機(jī)電壓,供應(yīng)給主板,也就是電源沒(méi)有啟動(dòng)的時(shí)候輸出到主板的,用來(lái)負(fù)責(zé)網(wǎng)絡(luò)啟動(dòng)、鍵盤啟動(dòng)和軟啟動(dòng)等。但我們平時(shí)很少使用那些功能,所以一般也就幾乎不損耗功率。另一路是只有開(kāi)機(jī)才能供電的電路,負(fù)責(zé)供電給CPU等上面提到的各個(gè)設(shè)備。還有,由于電源內(nèi)部存在變壓器和整形濾波電路,所以,當(dāng)筆記本電腦工作的時(shí)候,只要電池電源接在電路上,就存在部分電能損耗。
    ??還有就是電腦電池電源的功率因素問(wèn)題,是我們關(guān)心的一個(gè)非常重要的方面。對(duì)于計(jì)算機(jī)和其它一切靠直流電壓工作的電子電路,離開(kāi)無(wú)功功率是根本無(wú)法工作的。為了讓計(jì)算機(jī)電路能正常工作,必須向其提供平滑了的直流電壓。這個(gè)“平滑”工作必須由接在計(jì)算機(jī)電源整流器后面的濾波電容器C來(lái)完成。這個(gè)濾波器就像一個(gè)水庫(kù),電容器里面必須儲(chǔ)存足夠數(shù)量的電荷,在整流半波之間的空白時(shí),使電路上的工作電壓仍不間斷,能保持正常電平。換句話說(shuō),即使在兩個(gè)脈動(dòng)半波之間無(wú)輸入電能時(shí),電壓電平也無(wú)顯著的變化,這個(gè)功能是靠電容器內(nèi)的儲(chǔ)能來(lái)實(shí)現(xiàn)的,儲(chǔ)存在電容器內(nèi)的這部分能量就是無(wú)功功率。所以說(shuō),計(jì)算機(jī)是靠無(wú)功功率的支持,才能保證電路正確運(yùn)用有功功率實(shí)現(xiàn)正常運(yùn)行的。
    ??因此可以說(shuō),筆記本電腦電池電源的電芯是功耗優(yōu)化的重點(diǎn)!
  • 屏幕顯示器:屏幕顯示器隨著以后的發(fā)展,高分屏顯示器會(huì)越來(lái)越普及,耗電量也會(huì)越高。
    此外,筆記本電腦的外設(shè)(usb hub、觸控板等)的功率雖然優(yōu)化空間小,但對(duì)最長(zhǎng)續(xù)航時(shí)間還是有影響。降低顯示器亮度,比如在做文字編輯時(shí),將背景調(diào)暗些,節(jié)能的同時(shí)還可以保護(hù)視力、減輕眼睛的疲勞強(qiáng)度。當(dāng)電腦在播放音樂(lè)、評(píng)書(shū)、小說(shuō)等單一音頻文件時(shí),可以徹底關(guān)閉顯示器等。
  • ??綜上所述,筆記本電腦的功率計(jì)算應(yīng)該按照不同場(chǎng)合和不同要求來(lái)分開(kāi)計(jì)算,不同情況的消耗功率是不同的,比如CPU是否全速運(yùn)行、屏幕的亮度等。對(duì)于一般辦公環(huán)境,電腦的功率大致為:CPU+顯卡+硬盤+主板+光驅(qū)+內(nèi)存等+電源+外設(shè)等+顯示器=功耗,在目前的狀況下辦公電腦不涉及大量計(jì)算和游戲,而且目前的很多屏幕顯示器,也支持節(jié)能功能。

    ??另外,電腦電源由于感性負(fù)荷較多,所以對(duì)外面設(shè)備產(chǎn)生感應(yīng)電流和漏電的可能比較大。我們?cè)诓痖_(kāi)電腦的時(shí)候,通常會(huì)先洗手以釋放身上的靜電,以免對(duì)設(shè)備造成危害,但由于洗手后,人皮膚的電阻會(huì)減小。所以我們每次接觸電腦的時(shí)候都會(huì)碰到強(qiáng)烈的漏電情況,而且漏電電流還比較大,手都會(huì)感到麻麻的感覺(jué),所以我覺(jué)得電腦插座應(yīng)該設(shè)置好保護(hù)線,最好還是安裝漏電保護(hù)裝置,尤其是對(duì)于那些小孩有可能接觸到電腦機(jī)身的場(chǎng)合,更應(yīng)該注意電腦的漏電保護(hù)。

    ??可參考Windows下續(xù)航優(yōu)化,比如Overclockulator功耗測(cè)試軟件。關(guān)機(jī)狀態(tài)的耗電理論上應(yīng)該為0W,耗電大小從小到大排序,S5關(guān)機(jī)<S4休眠<S3待機(jī)<runtime+電池供電+應(yīng)用程序。

    ??Linux 內(nèi)核的 PM 框架涉及眾多組件,弄清楚這些組件之間的依賴關(guān)系,在合適的著眼點(diǎn)上進(jìn)行優(yōu)化,采用正確的方法進(jìn)行 PM 的編程,對(duì)改善代碼的質(zhì)量、輔助功耗和性能測(cè)試都有極大的好處。 當(dāng)然,這些方法的前提永遠(yuǎn)是芯片的功能要滿足要求。功率再低,功能不滿足的芯片和板磚有什么區(qū)別。芯片的功能要滿足要求這個(gè)基礎(chǔ)就決定了這些方法有一些限制,比如不可能把電壓降到0,不可能讓信號(hào)永遠(yuǎn)不翻轉(zhuǎn)。這些都是前提。

    ??低功耗技術(shù)就是一系列的降低功耗的技術(shù)。在了解低功耗技術(shù)之前,我們必須先了解功耗的構(gòu)成。現(xiàn)在幾乎都從 PC 機(jī)換到了筆記本電腦了。但是使用筆記本有個(gè)問(wèn)題,我們希望電池耐用,我們可以使用到每一點(diǎn)電量。所以,我們需要知道電量都去哪里了,是不是浪費(fèi)了。

    • 一個(gè)設(shè)備的功耗由兩部分組成:動(dòng)態(tài)功耗和靜態(tài)功耗。
  • 動(dòng)態(tài)功耗是設(shè)備運(yùn)行時(shí)或者說(shuō)信號(hào)改變時(shí)所消耗的功耗;
  • 靜態(tài)功耗是設(shè)備上電但是信號(hào)沒(méi)有改變時(shí)所消耗的功耗;
  • ??這里要注意的是:在設(shè)備運(yùn)行時(shí),也需要消耗靜態(tài)功耗的,因?yàn)樵O(shè)備運(yùn)行時(shí)也是上電狀態(tài)。功耗分類把靜態(tài)功耗單獨(dú)拿出來(lái),只是為了理論分析方便。

    ??無(wú) AC 電源時(shí)達(dá)到硬件該有的性能和隨時(shí)獲得最長(zhǎng)電池使用時(shí)間是相互沖突的,需要進(jìn)行取舍。針對(duì)待機(jī)、休眠等模式,需要判斷各個(gè)設(shè)備的工作狀態(tài)以及電路板上是否還有其他的芯片在工作,可能它們?nèi)匀辉谙碾娏?#xff0c;所以我們?cè)谶M(jìn)入待機(jī)活或休眠前應(yīng)該要把其他芯片給關(guān)閉(可以通過(guò)特定的指令或者片選線)。條件允許的可以直接切斷它們的電源。

    ??進(jìn)入待機(jī)、休眠模式后,只是各個(gè)設(shè)備中最耗電的內(nèi)核部分被關(guān)了,而所有寄存器和內(nèi)存中的值是保持不變的,所以它的外設(shè)還在消耗電量,所以我們要在進(jìn)入待機(jī)、休眠模式之前把開(kāi)啟的外設(shè)給關(guān)了。這里要注意一點(diǎn):外設(shè)開(kāi)啟時(shí)是先開(kāi)時(shí)鐘再設(shè)置寄存器,關(guān)閉時(shí)先清除寄存器再關(guān)閉時(shí)鐘。理解為:操縱一個(gè)外設(shè)的寄存器肯定是需要時(shí)鐘的,如果我們先把時(shí)鐘給關(guān)了,那么還怎么操作寄存器呢,如果光關(guān)了時(shí)鐘,不清寄存器的相應(yīng)位,那么外設(shè)還處于“靜態(tài)耗電”的狀態(tài)。

    ??關(guān)于各個(gè)設(shè)備的IO口的電平,這個(gè)是非常重要的一點(diǎn),和之前提到的外設(shè)一樣,GPIO也是一種外設(shè),但是特殊的是,這個(gè)外設(shè)是和芯片外部直接打交道的,如果GPIO外部接了個(gè)上拉電阻,而你在進(jìn)入待機(jī)、休眠等模式之前設(shè)置的IO口是低電平的,那么電流不就通過(guò)電阻,流到IO口里來(lái)了,比如正常的說(shuō)接了個(gè)10k的上拉電阻,接到3.3v電壓上,那么電流就是330uA,這個(gè)值可不小呢,各個(gè)設(shè)備在進(jìn)入待機(jī)、休眠后極限最小電流好像能達(dá)到幾u(yù)A或者幾十uA。那么這個(gè)電路就是因?yàn)檫@個(gè)電阻,停機(jī)電流比別人大了將近幾十倍了,這還怎么比?所以IO口是絕對(duì)不能被忽視的。設(shè)備芯片復(fù)位以后所有引腳都是浮空輸入模式,理論上懸浮空輸入時(shí)IO口的狀態(tài)為高阻態(tài)是最省電的,那么我們只要把所有IO都DeInit就可以了。但是事實(shí)上不是,我把沒(méi)有用到的管腳全部推挽輸出高電平或低電平,不用的外部晶振的引腳要改為上拉輸入才省電,外部有上拉下拉電阻的引腳分別推挽輸出高電平和低電平,一般電路中上拉電阻比較多(比如IIC的總線外部都有上拉的)。和外部芯片相連的引腳都推挽輸出低電平,因?yàn)橥獠啃酒瑪嚯姾笏幸_都是高阻態(tài)或接地的吧,如果你弄個(gè)高電平,就可能會(huì)有電流流過(guò)去。另外,主板上是否帶有穩(wěn)壓相關(guān)的芯片,這類芯片一般進(jìn)入待機(jī)、休眠也會(huì)存在耗電。

    • 功耗的電量單位–電流單位,表明電流的大小

    A:安
    mA:毫安
    uA:微安
    1A=1000mA=1000*1000uA

    • 電池容量:電量的單位,常用來(lái)表明電池的容量,意即以多大的電流放電,能夠持續(xù)提供多長(zhǎng)時(shí)間的電流。

    18650電芯通常容量為2200mAh毫安時(shí).
    1號(hào)電池2.5Ah.
    2號(hào)電池1.5Ah.
    3號(hào)電池500mAh.
    7號(hào)電池200mAh.

    • 電池容量的計(jì)算方法:

    容量=放電電池(恒流)× 放電時(shí)間(小時(shí))
    反過(guò)來(lái): 放電時(shí)間T=容量/放電電流(恒流)
    比如一個(gè)電池用500MA(毫安)的恒定電流放了2 個(gè)小時(shí),那么這個(gè)電池的容量就等于500MA*2H=1000MAH=1AH。
    再如一個(gè)電池用5安的電流放了2個(gè)小時(shí),那么該電池的容量就是10AH。

    電腦主板紐扣電池CR2032:210mAh

    ??筆記本電池多數(shù)為鋰電池,鋰電池的電量大小,只看【mAh毫安時(shí)】并不夠的,還需要看到【W(wǎng)h瓦時(shí)】,這才是鋰電池真正的能量容量,后續(xù)按照鋰電池放電進(jìn)行功耗優(yōu)化。

    3.2 電源管理

    3.2.1 系統(tǒng)電源的組成和管理模型的四種狀態(tài)

    ??在計(jì)算機(jī)系統(tǒng)依靠電能運(yùn)行,Linux 系統(tǒng)中稱作電源管理(Power Management),電源管理的核心思想只在需要設(shè)備功能時(shí)才給它供電。Linux內(nèi)核提供了三種Suspend: Freeze、Standby和STR(Suspend to RAM),在用戶空間向”/sys/power/state”文件分別寫入”freeze”、”standby”和”mem”,即可觸發(fā)它們。Linux電源管理中,相當(dāng)多的部分是在處理Hibernate、Suspend、Runtime PM等功能。

    ??電源管理(Power Management)在Linux Kernel中,是一個(gè)比較龐大的子系統(tǒng),涉及到供電(Power Supply)、充電(Charger)、時(shí)鐘(Clock)、頻率(Frequency)、電壓(Voltage)、睡眠/喚醒(Suspend/Resume)等方方面面。內(nèi)核中,Suspend及Resume過(guò)程涉及到PM Core、Device PM、各個(gè)設(shè)備的驅(qū)動(dòng)、Platform dependent PM、CPU control等多個(gè)模塊,涉及了console switch、process freeze、CPU hotplug、wakeup處理等過(guò)個(gè)知識(shí)點(diǎn)。系統(tǒng)suspend/resume的過(guò)程,要求設(shè)備也同步suspend/resume。系統(tǒng)hibernate及恢復(fù)的過(guò)程,要求設(shè)備在suspend/resume的基礎(chǔ)上,增加poweroff的動(dòng)作。系統(tǒng)reboot的過(guò)程,包括halt、power off、restart等,要求設(shè)備進(jìn)入shutdown狀態(tài),以避免意外產(chǎn)生。

    ??傳統(tǒng)的suspend/resume已經(jīng)很明確了,無(wú)非是按照pm_domain—>device driver或者class—>device driver或者bus—>device driver的順序,調(diào)用相應(yīng)的回調(diào)函數(shù)。

    • 電源管理的核心思想
  • 如果設(shè)備有省電模式,盡量用起來(lái) – 聯(lián)系整機(jī)廠商協(xié)調(diào)硬件原理圖,確認(rèn)芯片的供電是否可單獨(dú)控制。芯片供電:需要指定機(jī)型的原理圖,比如清華同方和L71的硬件原理圖,分析芯片的供電是否可以單獨(dú)控制,以便系統(tǒng)各個(gè)場(chǎng)景下更好的實(shí)現(xiàn)節(jié)省功耗,比如:不使用音頻時(shí)卸載聲卡驅(qū)動(dòng)同時(shí)徹底關(guān)閉聲卡供電。
  • 實(shí)時(shí)的關(guān)閉暫時(shí)不使用的部分(可稱作“工作狀態(tài)到非工作狀態(tài)的轉(zhuǎn)移”)。例如人們使用PC在編輯excel時(shí),聲卡模塊就沒(méi)必要供電,硬件設(shè)計(jì)上聲卡芯片如果能夠關(guān)閉, 給它提供開(kāi)關(guān)(比如單獨(dú)供電)。
  • 當(dāng)需要重新使用那些已關(guān)閉部分時(shí)(可稱作“非工作狀態(tài)到工作狀態(tài)的轉(zhuǎn)移”),不能有太長(zhǎng)時(shí)間的等待,且轉(zhuǎn)移過(guò)程不能消耗太多的能量。
    • 系統(tǒng)電源管理模型的四種狀態(tài)
  • On – Working正常工作狀態(tài)
    Runtime電源管理模型:指的是在On狀態(tài)如何省電,包括:降低運(yùn)行時(shí)鐘、關(guān)閉無(wú)用的設(shè)備。linux內(nèi)核僅提供電源管理的功能:包括電源管理框架和具體設(shè)備的電源管理(驅(qū)動(dòng)),如何使用及合適使用由App決定(策略)。
  • Standby – 空閑模式(CPU和RAM是上電的但是不執(zhí)行程序了)
  • Suspend to RAM – S3待機(jī)模式(RAM是上電的,并且running content(運(yùn)行狀態(tài))是保存在RAM中)
  • Suspend to Disk – S4休眠模式(All content保存在Disk硬盤或者flash上)
    • 啟動(dòng)待機(jī)休眠

    啟動(dòng) suspend to ram:(睡眠)//suspend to disk(休眠),echo mem > /sys/power/state //啟動(dòng)休眠的方法就是往/sys/power/state 寫字符串,會(huì)調(diào)用state_store函數(shù)(還有個(gè)state_show是讀的時(shí)候被調(diào)用 )。

    3.2.2 S3S4S5電源管理模式功耗分析
    • S3S4S5電源管理模式功耗分析,驅(qū)動(dòng)需要支持休眠和喚醒,比如suspend函數(shù)和resume函數(shù)
  • 硬件更復(fù)雜:外接更多設(shè)備,這些設(shè)備也需要單獨(dú)供電,休眠前可能需要單獨(dú)設(shè)置
    休眠時(shí):1、暫停應(yīng)用程序(包括用戶程序、后臺(tái)服務(wù)、內(nèi)核線程)
        2、暫停各類設(shè)備
        3、停止CPU
    喚醒時(shí):1、啟動(dòng)CPU
        2、啟動(dòng)設(shè)備
        3、啟動(dòng)應(yīng)用程序
  • 軟件更復(fù)雜:需要有統(tǒng)一的框架,喚醒后可能需要重新初始化
  • 3.2.3 runtime電源管理模式(內(nèi)核文檔runtime_pm.txt有詳細(xì)描述)

    ??runtime是在系統(tǒng)正常工作的時(shí)候單獨(dú)控制某個(gè)設(shè)備休眠和喚醒,相比S3S4S5續(xù)航優(yōu)化,比如系統(tǒng)睡眠模型是讓整個(gè)系統(tǒng)休眠,runtime的場(chǎng)景更復(fù)雜也更難,需要在不影響使用設(shè)備功能的前提下盡可能讓它省電。runtime PM 框架不需要用戶程序的干涉,由Kernel統(tǒng)一調(diào)度,實(shí)時(shí)的關(guān)閉或打開(kāi)設(shè)備,以便在使用性能和省電性能之間找到最佳的平衡等。

    ??怎樣動(dòng)態(tài)地打開(kāi)或關(guān)閉設(shè)備的電源?最簡(jiǎn)單的方法,在驅(qū)動(dòng)程序的open函數(shù)中打開(kāi)電源,在close函數(shù)中關(guān)閉電源,上述方法有一個(gè)缺點(diǎn): 多個(gè)應(yīng)用同時(shí)訪問(wèn)設(shè)備時(shí)可能造成干擾。另外支持UEFI固件需要考慮固件參數(shù)的正確性。

    3.2.4 進(jìn)程凍結(jié)

    ??什么是進(jìn)程凍結(jié),進(jìn)程凍結(jié)技術(shù)(freezing of tasks)是指在系統(tǒng)hibernate或者suspend的時(shí)候,將用戶進(jìn)程和部分內(nèi)核線程置于“可控”的暫停狀態(tài)。

    • 為什么需要凍結(jié)技術(shù) – 假設(shè)沒(méi)有凍結(jié)技術(shù),進(jìn)程可以在任意可調(diào)度的點(diǎn)暫停,而且直到cpu_down才會(huì)暫停并遷移。這會(huì)給系統(tǒng)帶來(lái)很多問(wèn)題:
  • 有可能破壞文件系統(tǒng)。在系統(tǒng)創(chuàng)建hibernate image到cpu down之間,如果有進(jìn)程還在修改文件系統(tǒng)的內(nèi)容,這將會(huì)導(dǎo)致系統(tǒng)恢復(fù)之后無(wú)法完全恢復(fù)文件系統(tǒng)。
  • 有可能導(dǎo)致創(chuàng)建hibernation image失敗。創(chuàng)建hibernation image需要足夠的內(nèi)存空間,但是在這期間如果還有進(jìn)程在申請(qǐng)內(nèi)存,就可能導(dǎo)致創(chuàng)建失敗。
  • 有可能干擾設(shè)備的suspend和resume。在cpu down之前,device suspend期間,如果進(jìn)程還在訪問(wèn)設(shè)備,尤其是訪問(wèn)競(jìng)爭(zhēng)資源,就有可能引起設(shè)備suspend異常。
  • 有可能導(dǎo)致進(jìn)程感知系統(tǒng)休眠。系統(tǒng)休眠的理想狀態(tài)是所有任務(wù)對(duì)休眠過(guò)程無(wú)感知,睡醒之后全部自動(dòng)恢復(fù)工作,但是有些進(jìn)程,比如某個(gè)進(jìn)程需要所有cpu online才能正常工作,如果進(jìn)程不凍結(jié),那么在休眠過(guò)程中將會(huì)工作異常。
  • ??凍結(jié)的對(duì)象是內(nèi)核中可以被調(diào)度執(zhí)行的實(shí)體,包括用戶進(jìn)程、內(nèi)核線程和work_queue。用戶進(jìn)程默認(rèn)是可以被凍結(jié)的,借用信號(hào)處理機(jī)制實(shí)現(xiàn);內(nèi)核線程和work_queue默認(rèn)是不能被凍結(jié)的,少數(shù)內(nèi)核線程和work_queue在創(chuàng)建時(shí)指定了freezable標(biāo)志,這些任務(wù)需要對(duì)freeze狀態(tài)進(jìn)行判斷,當(dāng)系統(tǒng)進(jìn)入freezing時(shí),主動(dòng)暫停運(yùn)行。

    ??kernel threads可以通過(guò)調(diào)用kthread_freezable_should_stop來(lái)判斷freezing狀態(tài),并主動(dòng)調(diào)用__refrigerator進(jìn)入凍結(jié);work_queue通過(guò)判斷max_active屬性,如果max_active=0,則不能入隊(duì)新的work,所有work延后執(zhí)行。
    ??標(biāo)記系統(tǒng)freeze狀態(tài)的有三個(gè)重要的全局變量:pm_freezing、system_freezing_cnt和pm_nosig_freezing,如果全為0,表示系統(tǒng)未進(jìn)入凍結(jié);system_freezing_cnt>0表示系統(tǒng)進(jìn)入凍結(jié),pm_freezing=true表示凍結(jié)用戶進(jìn)程,pm_nosig_freezing=true表示凍結(jié)內(nèi)核線程和workqueue。它們會(huì)在freeze_processes和freeze_kernel_threads中置位,在thaw_processes和thaw_kernel_threads中清零。
    ??fake_signal_wake_up函數(shù)巧妙的利用了信號(hào)處理機(jī)制,只設(shè)置任務(wù)的TIF_SIGPENDING位,但不傳遞任何信號(hào),然后喚醒任務(wù);這樣任務(wù)在返回用戶態(tài)時(shí)會(huì)進(jìn)入信號(hào)處理流程,檢查系統(tǒng)的freeze狀態(tài),并做相應(yīng)處理。

    任務(wù)主動(dòng)調(diào)用try_to_freeze的代碼如下:

    static inline bool try_to_freeze_unsafe(void) {if (likely(!freezing(current))) //檢查系統(tǒng)是否處于freezing狀態(tài)return false;return __refrigerator(false); //主動(dòng)進(jìn)入凍結(jié) }static inline bool freezing(struct task_struct *p) {if (likely(!atomic_read(&system_freezing_cnt))) //系統(tǒng)總體進(jìn)入freezingreturn false;return freezing_slow_path(p); }bool freezing_slow_path(struct task_struct *p) {if (p->flags & PF_NOFREEZE) //當(dāng)前進(jìn)程是否允許凍結(jié)return false;if (pm_nosig_freezing || cgroup_freezing(p)) //系統(tǒng)凍結(jié)kernel threadsreturn true;if (pm_freezing && !(p->flags & PF_KTHREAD)) //系統(tǒng)凍結(jié)用戶進(jìn)程return true;return false; }

    進(jìn)入凍結(jié)狀態(tài)直到恢復(fù)的主要函數(shù):

    bool __refrigerator(bool check_kthr_stop) { ...for (;;) {set_current_state(TASK_UNINTERRUPTIBLE); //設(shè)置進(jìn)程為UNINTERRUPTIBLE狀態(tài)spin_lock_irq(&freezer_lock);current->flags |= PF_FROZEN; //設(shè)置已凍結(jié)狀態(tài)if (!freezing(current) ||(check_kthr_stop && kthread_should_stop())) //判斷系統(tǒng)是否還處于凍結(jié)current->flags &= ~PF_FROZEN; //如果系統(tǒng)已解凍,則取消凍結(jié)狀態(tài)spin_unlock_irq(&freezer_lock);if (!(current->flags & PF_FROZEN)) //如果已取消凍結(jié),跳出循環(huán),恢復(fù)執(zhí)行break;was_frozen = true;schedule();} ...... }
    3.2.5 電源管理有關(guān)的Source code

    ??電源管理有關(guān)的Source code包括傳統(tǒng)意義上的Power Management,如Power Off、Suspend to RAM、Suspend to Disk、Hibernate等,對(duì)I/O設(shè)備的運(yùn)行時(shí)電源管理(運(yùn)行時(shí)PM)的支持,以便在使用性能和省電性能之間找到最佳的平衡等。

    kernel/power/ *
    drivers/power/
    drivers/base/power/*
    drivers/cpuidle/*
    drivers/cpufreq/*
    drivers/devfreq/*
    include/linux/power_supply.h
    include/linux/cpuidle.h
    include/linux/cpufreq.h
    include/linux/cpu_pm.h
    include/linux/device.h
    include/linux/pm.h
    include/linux/pm_domain.h
    include/linux/pm_runtime.h
    include/linux/pm_wakeup.h
    include/linux/suspend.h
    Documentation/power/*.txt

    3.2.6 測(cè)試場(chǎng)景覆蓋:關(guān)機(jī),待機(jī),休眠,典型工作狀態(tài),極限場(chǎng)景

    ??暫時(shí)只考慮常溫25°,不進(jìn)行低溫和高溫測(cè)試。筆記本電池的充放點(diǎn)曲線。

    3.2.7 測(cè)量筆記本功耗

    ??筆記本不是額定功耗的電子產(chǎn)品,因?yàn)楣P記本有節(jié)能模式,比如處理器會(huì)動(dòng)態(tài)調(diào)節(jié)主頻,顯卡對(duì)功耗變化影響較大,硬盤等低功耗部件還有休眠功能。記錄所有支路的電流值和電壓值,整機(jī)功耗,計(jì)算出單板功耗和適配器效率。PC功耗是實(shí)時(shí)變化的,看視頻瀏覽網(wǎng)頁(yè)功耗都是不同的,功耗續(xù)航需要軟硬件一起調(diào)試。
    ??與筆記本廠商溝通確認(rèn)他們的測(cè)量功耗工具,【淘寶】https://m.tb.cn/h.fkcax28?sm=1a4148?tk=CfzR21PxsR9「ChargerLAB POWER-Z USB PD電壓電流紋波雙Type-C測(cè)試儀 KM001C」,公司采購(gòu)需要從京東購(gòu)買https://item.jd.com/31045469743.html,功耗測(cè)試步驟的詳細(xì)方法需要設(shè)備到了再驗(yàn)證。功耗工具補(bǔ)充,https://item.taobao.com/item.htm?spm=a230r.1.14.1.744961121eUhy4&id=574217991932&ns=1&abbucket=10#detail。
    ??需要協(xié)調(diào)筆記本整機(jī)的原理圖和PCB,分析整機(jī)的關(guān)機(jī)、待機(jī)、休眠、典型工作模式及極限工作模式,確認(rèn)硬件設(shè)計(jì)支持相應(yīng)的電源控制電路基礎(chǔ)上為后續(xù)的軟件功耗優(yōu)化提供解決方案,首先確認(rèn)整機(jī)采用了那些低功耗高效率的器件,比如在器件選型和硬件設(shè)計(jì)時(shí),器件是否支持低功耗模式和相應(yīng)的電源控制電路。散熱大的元件,如MCU,DDR,電源芯片等均勻分布,并遠(yuǎn)離熱敏元件。阻抗控制,合理的PCB布局,精確的阻抗控制,可以減小射頻路徑上的損耗。

    3.3 功耗優(yōu)化方案

    3.3.1 CPU功耗

    ??現(xiàn)代處理器上面有各種各樣的電源管理技術(shù),比較通行的一種辦法是將電源管理交由操作系統(tǒng)來(lái)負(fù)責(zé)。比如處理器廠商會(huì)為處理器定義多種電源狀態(tài),C-State和P-State就是兩種常見(jiàn)的用于描述處理器電源狀態(tài)的狀態(tài)值。其中C-State用于節(jié)能,P-State用于決定CPU在有負(fù)載情況下的電壓-頻率狀態(tài)。操作系統(tǒng)來(lái)根據(jù)當(dāng)前的負(fù)載情況來(lái)調(diào)整CPU的狀態(tài),這樣在檢測(cè)到有高負(fù)載任務(wù)時(shí),系統(tǒng)會(huì)將處理器調(diào)整到全速運(yùn)行狀態(tài);在輕負(fù)載時(shí),系統(tǒng)會(huì)讓處理器進(jìn)入低速狀態(tài),甚至將其部分關(guān)閉。

    ??另外處理器廠商還加入了很多軟硬件結(jié)合的節(jié)能技術(shù),像是Intel和AMD在很久以前就給CPU引入的SpeedStep/Cool’n’Quiet這些技術(shù)都可以讓CPU在不損失最大性能的同時(shí),盡可能的節(jié)約能耗。現(xiàn)在則是有Speed Shift和Turbo Cove這樣的技術(shù)接手了。

    ??CPU 功耗CPU 的耗電大體符合以下公式: 功率 = 電容率 × 電壓的平方 × 頻率功率代表能耗(Power),而電容率(Capacitance),與 CPU 的制程和工藝等相關(guān),在 CPU 出廠時(shí)就已經(jīng)確定下來(lái)。那么我們能改變的只有電壓與頻率,而頻率與電壓成正相關(guān)。所以當(dāng) CPU 在很高的頻率上運(yùn)行時(shí),效能很高但耗電量很大。如果我們能在 CPU 運(yùn)算量不大時(shí),讓它降頻運(yùn)行,這樣我們就可以減少功率,同時(shí)我們可以降低電壓,節(jié)約能源,并減少發(fā)熱與風(fēng)扇噪音。 Linux 下調(diào)整 CPU 的模塊叫 CPU 調(diào)速器(Governor),Android 等基于 Linux 的嵌入式平臺(tái)都會(huì)使用 CPU 調(diào)速器達(dá)到省電的效果,同樣,Linux也能。

    ??cpu調(diào)頻策略–最佳性能、偏重性能、偏重省電、最佳省, 變頻技術(shù)是指CPU硬件本身支持在不同的頻率下運(yùn)行,系統(tǒng)運(yùn)行過(guò)程中可以根據(jù)隨時(shí)可能發(fā)生的系統(tǒng)負(fù)載情況動(dòng)態(tài)在這些不同的運(yùn)行頻率之間進(jìn)行切換,從而達(dá)到對(duì)性能和功耗做到而這兼顧的目的。

    ??處理器負(fù)荷,處理器負(fù)荷較輕時(shí),降低處理器的時(shí)鐘速度;在處理器沒(méi)有負(fù)載的時(shí)候,自動(dòng)進(jìn)入IDLE模式;在處理器長(zhǎng)時(shí)間不用時(shí),進(jìn)入sleep模式,將處理器所不需要的模塊關(guān)閉。

    ??cpufreq policy負(fù)責(zé)設(shè)定cpu調(diào)頻的一個(gè)大致范圍,而cpu的具體運(yùn)行頻率,則需要由相應(yīng)的cufreq governor決定(比如自行調(diào)節(jié)頻率的CPU)。那到底什么是cpufreq governor?它的運(yùn)行機(jī)制是什么?Android 平臺(tái)的 CPU 調(diào)速器使用經(jīng)驗(yàn),請(qǐng)不要試著直接限制 CPU 的頻率,那是在 ARM 平臺(tái)上才有效的做法,在 X86 平臺(tái)下對(duì)減輕能耗幫助甚微,龍芯mips和loongarch架構(gòu)待驗(yàn)證。

    • 常用的 cpufreq governor – 為了管好CPU的功耗,CPU廠家也不斷為它引入新的電源管理特性
  • Performance – 性能優(yōu)先的governor,直接將cpu頻率設(shè)置為policy->{min,max}中的最大值。
  • Powersave – 功耗優(yōu)先的governor,直接將cpu頻率設(shè)置為policy->{min,max}中的最小值。
  • Userspace – 由用戶空間程序通過(guò)scaling_setspeed文件修改頻率。
  • Ondemand – 根據(jù)CPU的當(dāng)前使用率,動(dòng)態(tài)的調(diào)節(jié)CPU頻率。
  • Conservative --類似Ondemand,不過(guò)頻率調(diào)節(jié)的會(huì)平滑一下,不會(huì)忽然調(diào)整為最大值,又忽然調(diào)整為最小值。
  • watch grep “cpu MHz” /proc/cpuinfo – 通過(guò)/proc/cpuinfo 查看cpu頻率
  • 基于cpufreq governor的調(diào)頻思路(Documentation\cpu-freq\governors.txt)

  • 有兩種類型的cpu:一種只需要給定調(diào)頻范圍,cpu會(huì)在該范圍內(nèi)自行確定運(yùn)行頻率;另一種需要軟件指定具體的運(yùn)行頻率。
  • 對(duì)第一種cpu,cpufreq policy中會(huì)指定頻率范圍policy->{min, max},之后通過(guò)setpolicy接口,使其生效即可。
  • 對(duì)第二種cpu,cpufreq policy在指定頻率范圍的同時(shí),會(huì)指明使用的governor。governor在啟動(dòng)后,會(huì)動(dòng)態(tài)的(例如啟動(dòng)一個(gè)timer,監(jiān)測(cè)系統(tǒng)運(yùn)行情況,并根據(jù)負(fù)荷調(diào)整頻率),或者靜態(tài)的(直接設(shè)置為某一個(gè)合適的頻率值),設(shè)定cpu運(yùn)行頻率。
  • 3.3.1.1 CPU 電壓下探

    對(duì)處理器的電壓進(jìn)行最大限度的下探,在挖掘 CPU 體質(zhì)的極限的同時(shí),起到既能降低發(fā)熱,又能最大限度保持性能的效果。
    如果正常操作,降低電壓一般不會(huì)損害 CPU,一般建議從 50 毫伏進(jìn)行嘗試,每次降壓嘗試多增加 10 毫伏。只要確保在降低電壓前,系統(tǒng)中任務(wù)均被正確保存即可。

    3.3.2 GPU功耗
    • GPU功耗 - GPU是并行處理單元,由于其算力主要來(lái)自多個(gè)模塊并行計(jì)算,為了正常工作,通常需要很多模塊同時(shí)運(yùn)算,功耗也很大,所以很多雙顯卡默認(rèn)關(guān)掉獨(dú)顯。
  • 查看整機(jī)背光 – ls /sys/class/backlight/。
  • 關(guān)閉屏幕背光 – xset dpms force off ,dpms設(shè)置顯示器的背光,筆記本EC芯片也可以調(diào)節(jié)顯示器背光,筆記本屏幕背光會(huì)占用很大的功耗,比如EC芯片調(diào)節(jié)背光和顯卡調(diào)節(jié)背光同時(shí)加載會(huì)占用很大的功耗。
  • 筆電鍵盤背光 – Keyboard backlight,鍵盤背光只消耗很小的功耗,但是關(guān)閉它是很容易的。
  • 查看顯卡狀態(tài) – tlp-stat -g。
  • 雙顯卡切換方案 – bbswitch或者禁用獨(dú)顯。
  • 桌面環(huán)境和電源管理相關(guān)–Gnome和KDE續(xù)航就比Xfce少一些。
  • 顯卡功耗相關(guān)信息 – sudo cat /sys/kernel/debug/dri/0/radeon_pm_info
  • 顯卡動(dòng)態(tài)功耗 – echo parameter > /sys/class/drm/card0/device/power_dpm_state
    Where “parameter” can be:
    battery (a set of performance levels targeted for optimal operation on battery)
    balanced (a set of performance levels targeted for optimal every day use)
    performance (a set of performance levels targeted for the highest GPU performance)
  • 3.3.3 硬盤功耗

    ??熱量控制,減少硬件發(fā)熱、降低電腦溫度。在AC模式下,硬盤處于高性能狀態(tài),磁頭不歸位,硬盤不減速,所以溫度比在XP下要高點(diǎn)。但是在用電池時(shí),硬盤為了減速節(jié)電,磁頭就會(huì)平凡歸位,溫度自然也會(huì)降下來(lái)了,但是磁頭歸位值就會(huì)像WIN7和XP系統(tǒng)下一樣非常高,對(duì)硬盤的壽命有一定的影響(a tradeoff)。

    3.3.4 主板

    ??主板功耗需要整機(jī)的原理圖。

    3.3.5 光驅(qū)

    ??筆記本計(jì)算機(jī)已經(jīng)很少裝有內(nèi)置光驅(qū),暫不考慮。

    3.3.6 內(nèi)存

    ??內(nèi)存作為系統(tǒng)主存也需要時(shí)刻使用,也是功耗消耗的大戶。內(nèi)存泄露,檢測(cè)耗電高的程序是否存在內(nèi)存泄露。

    3.3.7 網(wǎng)卡
    • 有線網(wǎng)絡(luò)和無(wú)線網(wǎng)絡(luò)管理
  • 查看驅(qū)動(dòng)信息 – modinfo iwlwifi | grep -v alias
  • 查看節(jié)能選項(xiàng) – modinfo iwlwifi | grep power_save
  • 查看無(wú)線網(wǎng)絡(luò)狀態(tài) – iwconfig,Power Management:on即節(jié)能模式是開(kāi)啟的
  • 臨時(shí)關(guān)閉節(jié)能模式eth0:iwconfig eth0 power off
  • 禁用網(wǎng)卡eth0 – sudo ifconfig eth0 down
  • 啟用網(wǎng)卡eth0 – sudo ifconfig eth0 up
  • 3.3.8 聲卡

    ??系統(tǒng)在未使用聲卡時(shí)可以暫時(shí)關(guān)閉聲卡功能以減少功耗。

    3.3.9 電源管理
    • 電池管理 – 電池自身在反復(fù)使用過(guò)程中存在損耗,修復(fù)電池的方法有多種也是功耗測(cè)試的前提,在此推薦一個(gè)比較有好的手動(dòng)修復(fù)方法,操作步驟如下:
  • 關(guān)機(jī),插上電源適配器給電池充滿電。若電池已是滿格狀態(tài),可直接進(jìn)行下一步。
  • 拔下電源適配器,開(kāi)機(jī),讓電池自動(dòng)放電,直到電腦自動(dòng)關(guān)機(jī)。期間,最好不做任何電腦操作。
  • 插上電池適配器,將電池充滿電,此過(guò)程開(kāi)不開(kāi)機(jī)都OK。
  • 上述步驟為一循環(huán),每每做上2~3次,效果會(huì)更佳。
    • 系統(tǒng)平臺(tái)級(jí)電源管理策略 APM電源管理策略 vs ACPI電源管理策略
  • APM電源管理策略,APM的全稱是AdvancedPowerManagement(高級(jí)電源管理),它是一種基于BIOS的系統(tǒng)電源管理方案,它提供CPU和外設(shè)電源并通過(guò)設(shè)備工作超時(shí)設(shè)定來(lái)決定何時(shí)將設(shè)備切換到低功耗模式。
  • ACPI電源管理策略,ACPI全稱AdvancedConfigurationPowerInterface(高級(jí)配置電源接口),ACPI將現(xiàn)有的電源管理BIOS代碼、APM應(yīng)用編程接口、PNPBIOS應(yīng)用編程接口、多處理器規(guī)范表格等集合成一種新的電源管理和配置接口規(guī)范,ACPI允許操作系統(tǒng)(不是BIOS)控制電源管理。
  • 選擇,Linux所支持的APM和ACPI針對(duì)APM和ACPI兩種不同的標(biāo)準(zhǔn),linux內(nèi)核提供提供了兩個(gè)不同的模塊來(lái)實(shí)現(xiàn)電源管理功能,這就是apm和acpi.需要注意,apm和acpi是互相沖突的兩個(gè)模塊,用戶在同一時(shí)間內(nèi)只能加載其中之一,如果當(dāng)他們?cè)诩虞d的時(shí)候發(fā)現(xiàn)二者之一已經(jīng)加載,就會(huì)自動(dòng)退出。在官方發(fā)布的內(nèi)核中APM是較為成熟的電源管理方式,可以完成在Windows下ACPI所能完成的大部分功能。由于官方內(nèi)核中ACPI的功能比較有限,目前還處于開(kāi)發(fā)版狀態(tài)。所以當(dāng)前的大多數(shù)distribution,如紅帽子默認(rèn)就使用了apm作為電源管理方式。如在ARM體系結(jié)構(gòu)下,有功耗管理模塊的平臺(tái),有些沒(méi)有配置管理策略,有的都會(huì)采用APM功耗管理,并不會(huì)采用ACPI。mips架構(gòu)不支持ACPI電源管理策略,loongarch架構(gòu)支持電源管理策略。
  • 各個(gè)芯片設(shè)備的電源管理(涉及內(nèi)核、固件)及ACPI
    利用Linux驅(qū)動(dòng)系統(tǒng)層面的共同特性,補(bǔ)充電源管理函數(shù),實(shí)現(xiàn)暫停,繼續(xù)等功能;利用各個(gè)驅(qū)動(dòng)所獨(dú)有的特性進(jìn)行優(yōu)化。利用Linux內(nèi)核的APM和ACPI機(jī)制,實(shí)現(xiàn)系統(tǒng)的掛起。
    • 休眠喚醒時(shí)設(shè)備的notifier通知
  • 在凍結(jié)應(yīng)用程序之前,使用pm_notifier_call_chain(PM_SUSPEND_PREPARE)來(lái)通知驅(qū)動(dòng)程序,在重啟應(yīng)用程序之后,使用pm_notifier_call_chain(PM_POST_SUSPEND)來(lái)通知驅(qū)動(dòng)程序。如果驅(qū)動(dòng)程序有事情在上述時(shí)機(jī)要處理,可以使用register_pm_notifier注冊(cè)一個(gè)notifier
  • 添加suspend, resume函數(shù)(驅(qū)動(dòng)休眠必須發(fā)生在APP凍結(jié)之后,否則如果驅(qū)動(dòng)休眠了,APP使用驅(qū)動(dòng)就會(huì)出錯(cuò),所有驅(qū)動(dòng)休眠放在suspend中)
  • ??一些特殊設(shè)備驅(qū)動(dòng)的suspend和resume函數(shù)需要仔細(xì)商榷,如UART進(jìn)入待機(jī)后關(guān)閉電源在喚醒會(huì)丟失串口調(diào)試信息等。

    • 查看 acpi 相關(guān)信息
  • acpidump -o acpidump.out
    • 查看筆記本laptop電源管理芯片(不同整機(jī)廠商) – drivers/platform/mips/
  • dmesg | grep laptop
  • sudo evtest
  • ??acpi-call,sudo apt install acpi-call-dkms安裝對(duì)應(yīng)的acpi-call模塊,其中/usr/src/acpi-call-版本號(hào)/是你放置acpi_call源碼的位置),需要分析ACPI 電源管理是否有導(dǎo)致 CPU loadavg 負(fù)載虛高的現(xiàn)象。其中查找資料提到,每次通過(guò)apt-get dist-upgrade升級(jí)內(nèi)核后都需要重新編譯acpi_call,具體原因Kaijia會(huì)繼續(xù)研究,大家每次更新內(nèi)核后別忘了重新編譯模塊,待確認(rèn)。

    3.3.10 顯示器

    ??系統(tǒng)處于運(yùn)行狀態(tài)并且屏幕顯示器打開(kāi)時(shí)的功耗和休眠時(shí)的功耗是有很大差異的。

    3.3.11 外設(shè)(觸控板等)、GPIO、中斷等

    ??大多外設(shè)是usb接口,需要使USB模塊進(jìn)入待機(jī)休眠模式等。
    ??設(shè)置設(shè)備的喚醒源: 配置GPIO引腳工作于中斷功能, 設(shè)置它的觸發(fā)方式。有些中斷可以將系統(tǒng)從睡眠狀態(tài)中喚醒,我們稱之“可以喚醒系統(tǒng)的中斷”,當(dāng)然,“可以喚醒系統(tǒng)的中斷”需要配置才能啟動(dòng)喚醒系統(tǒng)這樣的功能。這樣的中斷一般在工作狀態(tài)的時(shí)候就是作為普通I/O interrupt出現(xiàn),只要在準(zhǔn)備使能喚醒系統(tǒng)功能的時(shí)候,才會(huì)發(fā)起一些特別的配置和設(shè)定。如何suspend設(shè)備中斷(IRQ)?在從休眠中喚醒的過(guò)程中,如何resume設(shè)備IRQ?

    ??風(fēng)扇調(diào)速包含主板風(fēng)扇和顯卡風(fēng)扇等。
    ??時(shí)鐘樹(shù)功耗:時(shí)鐘樹(shù)的功耗通常占整個(gè)SOC功耗的40%左右,這是因?yàn)闀r(shí)鐘是一直在翻轉(zhuǎn)的信號(hào),所以動(dòng)態(tài)功耗特別大。所以門控時(shí)鐘技術(shù)就特別重要。

    • 零、驅(qū)動(dòng)直接編譯進(jìn)內(nèi)核(靜態(tài)加載) vs. 編譯為模塊(動(dòng)態(tài)加載) – cat /proc/modules

    手動(dòng)調(diào)試過(guò)程 – cat /etc/modprobe.d/blacklist.conf,將對(duì)應(yīng)模塊添加到黑名單
    blacklist acer_wmi
    blacklist btusb
    blacklist bluetooth
    blacklist uvcvideo
    blacklist nvidia
    blacklist nouveau

    3.4 筆記本電源管理軟件

    ??在 Linux 上有很多功耗相關(guān)的實(shí)用工具,可以在命令行使用或者圖形。同時(shí),我們也可以查看電池模組名稱、電源、廠商以及電池規(guī)格等。電源管理是在不使用時(shí)關(guān)閉電源或者切換系統(tǒng)的組件到低耗模式的一種功能。

    • 功耗相關(guān)工具
  • upower:是一個(gè)命令行工具,其提供了羅列系統(tǒng)中電源的接口。
  • acpi:顯示來(lái)自 /proc 或者 /sys 文件系統(tǒng)中的一些信息,例如電池狀態(tài)或者熱量信息。
  • batstat:是一個(gè)為 Linux 打印電池狀態(tài)的命令行工具。
  • class file:這個(gè) sysfs 文件系統(tǒng)是一個(gè)提供了內(nèi)核數(shù)據(jù)結(jié)構(gòu)接口的偽文件系統(tǒng)。
  • tlp:可以為你帶來(lái)更高級(jí)的電源管理,而無(wú)需修改任何配置。
  • Laptop Mode Tools 是一個(gè) Linux 系統(tǒng)下的筆記本電源管理軟件。
  • PowerTOP 是一個(gè) Linux 工具,用于診斷電量消耗和電源管理的問(wèn)題。
  • s-tui:Linux下監(jiān)控CPU溫度、頻率、功耗的工具。
  • 3.4.1 TLP 筆記本電源管理軟件
    • TLP是什么?
      ??TLP 是一個(gè)一款免費(fèi)的、開(kāi)源的、功能豐富的 Linux 實(shí)用工具,適用于運(yùn)行Ubuntu和其他Linux發(fā)行版的筆記本電腦上的電池使用優(yōu)化,無(wú)需深入研究技術(shù)細(xì)節(jié)就能節(jié)省筆記本電池電量。有CLI和GUI版本,TLP 是高度可定制的,以滿足你的具體要求以方便使用。 TLP附帶一個(gè)默認(rèn)配置,可以為您的操作系統(tǒng)和底層機(jī)器進(jìn)行完美調(diào)整,TLP 的默認(rèn)設(shè)置已經(jīng)針對(duì)電池壽命進(jìn)行了優(yōu)化,所以你可以直接安裝并忘記它。您需要做的就是安裝并啟用該實(shí)用程序,您就可以開(kāi)始使用了。該實(shí)用程序的工作原理是在筆記本電腦使用電池運(yùn)行時(shí)優(yōu)化硬件設(shè)備使用的電量,而不是AC

    • TLP的工作原理?
      ??TLP 的基本工作原理是調(diào)整影響功耗的內(nèi)核設(shè)置(kernel settings)。
      什么是 kernel settings,首先內(nèi)核設(shè)置(kernel settings)是不穩(wěn)定的。它們的狀態(tài)在運(yùn)行時(shí)被保存在 RAM 中,內(nèi)核沒(méi)有為它們提供持久性。在啟動(dòng)時(shí),內(nèi)核創(chuàng)建了一個(gè)默認(rèn)的狀態(tài),每次啟動(dòng)時(shí)都必須通過(guò)用戶空間的工具重新應(yīng)用這些改變。TLP 就是這樣一個(gè)用戶空間的工具。

    ??在長(zhǎng)時(shí)間不操作的情況下,電腦進(jìn)入屏保,如果你設(shè)置了開(kāi)機(jī)密碼,好吧,每次看電影的時(shí)候你每隔個(gè)5分鐘就要?jiǎng)右幌码娔X,搞不好還要一直輸入開(kāi)機(jī)密碼,煩不煩。所以,需要簡(jiǎn)單地去改一下配置。TLp的配置文件位于/etc/default/tlp,需要Root權(quán)限

    • TLP電池管理軟件,如果想要關(guān)閉TLP,vi /etc/default/tlp 將其中的"TLP_ENABLE=1"改為"TLP_ENABLE=0"即可。如果想要定制更多的東西,也可以去配置這個(gè)文件。
  • 安裝TLP命令行界面 – sudo apt install tlp
  • 開(kāi)始使用 – sudo tlp start,啟動(dòng)TLP 在第一次安裝后,如果不想重啟,就可以使用這個(gè)命令啟動(dòng)TLP
  • 只顯示電池信息 – sudo tlp start -b
  • 檢查狀態(tài) – sudo tlp stat 或者 tlp-stat 查看 tlp 相關(guān)信息
  • usb設(shè)備狀態(tài) – tlp-usblist
  • pci設(shè)備狀態(tài) – tlp-pcilist
  • 只顯示配置信息 – sudo tlp stat -c 相當(dāng)于 sudo tlp-stat --config
  • 顯示無(wú)線設(shè)備的狀態(tài)信息 – sudo tlp stat -r 相當(dāng)于 sudo tlp-stat -rfkill
  • 只顯示溫度和風(fēng)扇轉(zhuǎn)速 – sudo tlp stat -t 相當(dāng)于 sudo tlp-stat --temp
  • 顯示debug信息 – sudo tlp stat -T (/var/log/debug)
  • 卸載TLP – sudo apt-get remove --autoremove tlp
  • 開(kāi)啟交流電源模式 – sudo tlp ac 類似于windows中的性能模式) 相當(dāng)于sudo tlp false
  • 開(kāi)啟電池模式(節(jié)能模式) – sudo tlp bat 相當(dāng)于 sudo tlp true
  • 將連接的USB設(shè)備空閑時(shí)自動(dòng)掛起或關(guān)閉 – sudo tlp usb
  • 查看磁盤的id型號(hào) – sudo tlp diskid
  • 安裝TLP用戶界面實(shí)用程序 – sudo apt-get install tlpui,對(duì)于更多進(jìn)入U(xiǎn)I的人來(lái)說(shuō),TLP實(shí)用程序有一個(gè)用戶界面,配置”選項(xiàng)卡允許您查看和編輯TLP設(shè)置,“統(tǒng)計(jì)”選項(xiàng)卡可讓您查看系統(tǒng)和電池使用統(tǒng)計(jì)信息,這里最重要的按鈕是TLP_ENABLE滑塊On和Off按鈕。通過(guò)此按鈕,您可以根據(jù)您的配置通過(guò)TLP啟用/禁用電池優(yōu)化。當(dāng)前系統(tǒng)中并沒(méi)有這個(gè)軟件包。
  • 查看tlp狀態(tài)信息 – tlp-stat -h
    Usage: tlp-stat [ -b | --battery | -c | --config |
    -d | --disk | -e | --pcie |
    -g | --graphics | -p | --processor |
    -r | --rfkill | -s | --system |
    -t | --temp | -u | --usb |
    -w | --warn | -v | --verbose |
    -P | --pev | | --psup |
    -T | --trace ]
    • tlp-stat -p – 查看CPU處理器相關(guān)信息
    uos@uos-PC:~$ sudo tlp-stat -p --- TLP 1.1 --------------------------------------------+++ Processor CPU model = Loongson-3A5000M/sys/devices/system/cpu/cpufreq/boost = (not available)x86_energy_perf_policy: program not installed./sys/module/workqueue/parameters/power_efficient = N /proc/sys/kernel/nmi_watchdog = (not available)+++ Undervolting PHC kernel not available.

    /etc/default/tlp 分析tlp相關(guān)配置項(xiàng)含義

    • CPU頻率

    具體的配置文件在直流電源與電池供電情況下都使用 powersave 調(diào)速器。X86 平臺(tái)的 powersave 調(diào)速器不會(huì)限制你的最高頻率,只是更加謹(jǐn)慎地增加頻率,并在負(fù)載下降時(shí)更加積極的回到低頻率。TLP 的開(kāi)發(fā)者并不建議更改為其他調(diào)速器。
    CPU_SCALING_GOVERNOR_ON_AC=powersave
    CPU_SCALING_GOVERNOR_ON_BAT=powersave以下兩項(xiàng)配置決定了 CPU 的能源策略,在電池模式下省電,而在外部電源供電模式下偏向性能。
    CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
    CPU_ENERGY_PERF_POLICY_ON_BAT=power
    使用以下兩項(xiàng)配置在電池供電時(shí)禁用自動(dòng)超頻,也就是關(guān)閉睿頻。
    CPU_BOOST_ON_AC=1
    CPU_BOOST_ON_BAT=0以下兩項(xiàng)配置會(huì)在電池模式下根據(jù)負(fù)載自動(dòng)縮減 CPU 核心數(shù)。 SCHED_POWERSAVE_ON_AC=0
    SCHED_POWERSAVE_ON_BAT=1 AMD 與舊款 IntelAMD 與舊款 Intel 使用 acpi-cpufreq 驅(qū)動(dòng),故部分設(shè)置與 Intel 不同。這里僅僅貼出配置文件內(nèi)容,建議閱讀 TLP 官方文檔以了解配置內(nèi)容含義。

    • cpu配置

    /etc/tlp.d/01-cpu.conf
    CPU_SCALING_GOVERNOR_ON_AC=ondemand
    CPU_SCALING_GOVERNOR_ON_BAT=ondemand
    CPU_BOOST_ON_AC=1
    CPU_BOOST_ON_BAT=0
    SCHED_POWERSAVE_ON_AC=0
    SCHED_POWERSAVE_ON_BAT=1

    • USB 自動(dòng)掛起設(shè)備TLP 利用內(nèi)核設(shè)置,自動(dòng)將不使用的 USB 設(shè)備掛起以節(jié)電。

    /etc/tlp.d/02-usb.conf 中USB_AUTOSUSPEND=1;ACPI 高級(jí)電池管理基于內(nèi)核的 natacpi 模塊,部分筆記本(如部分 ThinkPad 系列與部分 Dell)電腦可以手動(dòng)管理電池充電百分比。無(wú)需安裝額外的 ACPI 模塊。 /etc/tlp.d/03-battery.conf

    • 充放電閾值

    START_CHARGE_THRESH_BAT0=80
    開(kāi)始充電閾值
    STOP_CHARGE_THRESH_BAT0=85
    停止充電閾值

    • TLP服務(wù)配置

    啟動(dòng)服務(wù): sudo systemctl start tlp
    檢查服務(wù)狀態(tài): sudo systemctl status tlp讓 TLP
    開(kāi)機(jī)自啟動(dòng): sudo systemctl enable tlp
    檢查是否成功: sudo systemctl is-enabled tlp

    3.4.2 LMT筆記本電源管理軟件

    ??Laptop Mode Tools 是一個(gè) Linux 系統(tǒng)下的筆記本電源管理軟件。它是讓內(nèi)核開(kāi)啟筆記本電腦模式功能的主要方法,能讓硬盤降速、保護(hù)硬盤等。另外,它允許你通過(guò)一個(gè)簡(jiǎn)單的配置文件調(diào)整一些其他的節(jié)能相關(guān)的設(shè)置使你的筆電更省點(diǎn)。

    ??與 acpid 和 CPU frequency scaling 結(jié)合使用,LMT 提供給了大多數(shù)用戶一個(gè)完整的筆記本電腦電源管理方案。有關(guān)于 Laptop Mode 的詳細(xì)情況,可以用 man 命令查看 laptop_mode 和 laptop-mode.conf,其中包含了二者的詳細(xì)參數(shù)說(shuō)明。

    • laptop_mode模式有何好處呢?

    laptop方面專家能為你解釋關(guān)于laptop方面的電路和電源管理方面的硬件設(shè)計(jì)原理。當(dāng)前只能確認(rèn)進(jìn)入 laptop_mode模式后,系統(tǒng)會(huì)根據(jù)當(dāng)前系統(tǒng)負(fù)荷和電源使用情況來(lái)為系統(tǒng)作一些調(diào)整,如調(diào)整CPU運(yùn)行頻率,CPU風(fēng)扇運(yùn)行速度,硬盤驅(qū)動(dòng)器運(yùn)行狀態(tài)(state:active/idle/standby),閉合或開(kāi)啟LCD所執(zhí)行的命今,移到辦公時(shí)切換網(wǎng)絡(luò)環(huán)境時(shí)網(wǎng)卡自適應(yīng)性(此部分功能了解 laptop_netconf工具包),和一些其它硬件的ACPI控制(比如:光驅(qū)可在不用時(shí)就處于standby狀態(tài))等,最簡(jiǎn)單的講法就是動(dòng)態(tài)使用系統(tǒng)資源,盡可能的增長(zhǎng)電池的使用時(shí)間(你可能在想你的laptop時(shí)時(shí)刻刻都在用電源適配器供電,電池只當(dāng)UPS用而已,laptop_mode對(duì)你沒(méi)什么作用,這樣想可能是你忘記啦,laptop_mode可以根據(jù)當(dāng)前系統(tǒng)負(fù)何來(lái)動(dòng)態(tài)使用系統(tǒng)資源,你不想讓你的laptop壽命更長(zhǎng)些嗎?)。

    • 要使用laptop_mode的必備條件是什么?

    絕對(duì)要用系統(tǒng)支持ACPI,如果你的laptop只支持APM那就不要考慮啦,當(dāng)然必不可少laptop_mode_tools工具包,然后啟動(dòng)laptop_mode模式。

    • LMT電池管理軟件
  • 確認(rèn)是否安裝 – which laptop_mode
  • 安裝 – sudo apt install laptop-mode-tools
  • 驗(yàn)證筆電LMT狀態(tài) – cat /proc/sys/vm/laptop_mode
    驗(yàn)證筆電是否確實(shí)進(jìn)入 Laptop Mode,如果返回值為0的話,表示系統(tǒng)還未進(jìn)入 Laptop Mode,如果返回的是其他正數(shù)值則表示系統(tǒng)成功進(jìn)入 Laptop Mode。
  • 查看 laptop_mode 報(bào)告的詳細(xì)狀態(tài) – sudo laptop_mode status
  • 停用laptop_mode模式? – sudo laptop_mode stop
  • 重啟laptop_mode模式? – sudo laptop_mode restart
    • LMT電池管理軟件調(diào)試
  • laptop_mode啟動(dòng)后都作了什么?怎樣查看laptop_mode信息? – 強(qiáng)列建意你打開(kāi)兩個(gè)Gnome Terminal,一個(gè)Terminal在啟用laptop_mode信息前,鍵入sudo laptop_mode status
    ,另一個(gè)在sudo laptop_mode start后鍵入sudo laptop_mode status,看看在laptop_mode可以控制那些資源,資源使用情況有何不同。
  • 怎樣進(jìn)一步微調(diào)laptop_mode對(duì)系統(tǒng)資源的使用? – 安裝laptop_mode工具包的默認(rèn)配置文件為/etc/laptop-mode/laptop-mode.conf,強(qiáng)烈建意你在對(duì)其文件作了改動(dòng)前,先保留一個(gè)原件副本。 因?yàn)閘aptop-mode.conf很多設(shè)置和系統(tǒng)硬件相關(guān),如果你不太熟悉自已系統(tǒng)的硬件和其ACPI支持情況就請(qǐng)用默認(rèn)配置吧。
    • LMT方案相關(guān)問(wèn)題
  • Debian啟用Laptop Mode Tools鼠標(biāo)開(kāi)機(jī)斷電問(wèn)題解決
  • 3.4.3 PowerTOP
    • 什么是 PowerTOP

    PowerTOP PowerTOP 是一款開(kāi)源的命令行工具,用于診斷的功耗問(wèn)題,查看系統(tǒng)中軟件應(yīng)用的活躍程度。此外,它提供了用于試驗(yàn)的各種電源管理設(shè)置的交互方式,用于診斷電量消耗和電源管理的問(wèn)題。它是由 Intel 開(kāi)發(fā)的,可以在內(nèi)核、用戶空間和硬件中啟用各種節(jié)電模式。除了作為一個(gè)一個(gè)診斷工具之外,PowweTop 還有一個(gè)交互模式,可以讓你實(shí)驗(yàn) Linux 發(fā)行版沒(méi)有啟用的各種電源管理設(shè)置。它也能監(jiān)控進(jìn)程,并展示其中哪個(gè)正在使用 CPU,以及從休眠狀態(tài)頁(yè)將其喚醒,也可以找出電量消耗特別高的應(yīng)用程序。你可以使用 PowerTOP 工具來(lái)查看沒(méi)有接入電源線時(shí)電量都用在了何處。你需要在終端中使用超級(jí)用戶權(quán)限來(lái)運(yùn)行 PowerTOP 工具。它可以訪問(wèn)該電池硬件并測(cè)量電量使用情況。

    • PowerTOP電池管理軟件
  • 安裝 – sudo apt install powertop,對(duì)于 Debian/Ubuntu 系統(tǒng),使用 APT-GET 命令 或 APT 命令 來(lái)安裝 PowerTOP。
  • 使用 – sudo powertop,PowerTOP 需要超級(jí)用戶權(quán)限,所以在 Linux 系統(tǒng)中以 root 身份運(yùn)行 PowerTOP 工具。默認(rèn)情況下其顯示 “概覽” 頁(yè),在這里我們可以看到所有設(shè)備的電量消耗情況,也可以看到系統(tǒng)的喚醒秒數(shù)。在你的機(jī)器上由于硬件不同會(huì)稍有不同。它的顯示有很多頁(yè),你可以使用 Tab 和 Shift+Tab 在它們之間切換。
  • 空閑狀態(tài)頁(yè) – 它會(huì)顯示處理器的各種信息。
  • 頻率狀態(tài)頁(yè) – 它會(huì)顯示 CPU 的主頻。
  • 設(shè)備狀態(tài)頁(yè) – 它僅針對(duì)設(shè)備顯示其電量使用信息。
  • 可調(diào)整狀態(tài)頁(yè) – 這個(gè)頁(yè)面是個(gè)重要區(qū)域,可以為你的筆記本電池優(yōu)化提供建議。
  • 生成 PowerTop 的 HTML 報(bào)告 – sudo powertop --html=powertop.html。
  • 自動(dòng)調(diào)整模式 – 這個(gè)功能可以將所有可調(diào)整選項(xiàng)從 BAD 設(shè)置為 GOOD,這可以提升 Linux 中的筆記本電池壽命。
  • 卸載 – sudo apt-get remove powertop
  • ??powertop工具可以顯示特定進(jìn)程與設(shè)備的耗電量。用 tab 在不同的標(biāo)簽頁(yè)中切換。不過(guò) 不要 聽(tīng)從 PowerTOP 關(guān)于省電的建議,也不要在 systemd 上啟用他—— TLP 做的比他更好。同時(shí) tlp-stat 命令也會(huì)輸出有用的信息。

    3.4.4 s-tui

    ??s-tui 是一個(gè)用于監(jiān)控計(jì)算機(jī)的終端 UI,監(jiān)控CPU溫度、頻率、功耗的工具。s-tui 可以在終端以圖形方式監(jiān)控 CPU 溫度、頻率、功率和使用率。此外,它還顯示由發(fā)熱量限制引起的性能下降,它需要很少的資源并且不需要 X 服務(wù)器。它是用 Python 編寫的,需要 root 權(quán)限才能使用它。s-tui 是一個(gè)獨(dú)立的程序,可以開(kāi)箱即用,并且不需要配置文件就可以使用其基本功能。s-tui 使用 psutil 來(lái)探測(cè)你的一些硬件信息。如果不支持你的一些硬件,你可能看不到所有信息。

    ??以 root 身份運(yùn)行 s-tui 時(shí),當(dāng)壓測(cè)所有 CPU 核心時(shí),可以將 CPU 發(fā)揮到最大睿頻頻率。它在后臺(tái)使用 Stress 壓力測(cè)試工具,通過(guò)對(duì)系統(tǒng)施加某些類型的計(jì)算壓力來(lái)檢查其組件的溫度是否超過(guò)其可接受的范圍。只要計(jì)算機(jī)穩(wěn)定并且其組件的溫度不超過(guò)其可接受的范圍,PC 超頻就沒(méi)問(wèn)題。有幾個(gè)程序可以通過(guò)壓力測(cè)試得到系統(tǒng)的穩(wěn)定性,從而評(píng)估超頻水平。

    • s-tui 管理軟件
  • 安裝 – sudo apt install s-tui,對(duì)于 Debian/Ubuntu 系統(tǒng),使用 APT-GET 命令 或 APT 命令 來(lái)安裝 PowerTOP。
  • 使用 – sudo s-tui,需要 root 權(quán)限才能從系統(tǒng)獲取所有信息。
  • Stress 選項(xiàng) – 啟用硬件監(jiān)控并選擇 “Stress” 選項(xiàng)以對(duì)系統(tǒng)執(zhí)行壓力測(cè)試。
  • 要查看其他選項(xiàng),請(qǐng)到幫助頁(yè)面查看 – s-tui --help。
  • 四.實(shí)驗(yàn)驗(yàn)證 – 機(jī)器數(shù)量和檢測(cè)儀器

    4.1 電腦耗電量測(cè)試 – 判斷當(dāng)前獲取的電池放電相關(guān)信息是否正確

    ??放電時(shí)間的公式:毫安時(shí)(mAh)乘以工作電壓(V)再除以1000換算出瓦時(shí)(Wh)

    mAh*V/1000=Wh 即 mAh=Wh*1000/V

    ??通過(guò)放電公式計(jì)算毫安時(shí)mAh,和當(dāng)前的放電電流和剩余時(shí)間換算的毫安時(shí)進(jìn)行對(duì)比,如果兩個(gè)值只有微小偏差則證明當(dāng)前獲取的電池信息正確,進(jìn)行下一步工作。
    注:電池放電為模擬放電過(guò)程,各個(gè)值存在微小偏差。

    ex: current_now=1734mA time to empty=0.5小時(shí) 毫安時(shí):1734mA*0.5h=867mAh energy=12.6392Wh V=14.589V 毫安時(shí):12.6392*1000/14.589=866.35mAh 說(shuō)明獲取電池信息正確,進(jìn)行下一步工作。

    ??通過(guò)相關(guān)工具或者系統(tǒng)節(jié)點(diǎn)查看筆記本電池狀態(tài)和等級(jí),同時(shí)記錄放電過(guò)程中的時(shí)間、電流、電量、電壓。目前編寫腳本能夠記錄放電電流、電量百分比、電壓的變化,充放電狀態(tài)更新概率性異常,具體的還需要分析,先要證明當(dāng)前獲取電池放電的數(shù)據(jù)是正確的,再進(jìn)行下一步工作。

    • 電池電量信息需要每分鐘記錄一次
    通過(guò) sysfs 文件系統(tǒng)獲取當(dāng)前的放電電流 current_now(mA->uA) uos@uos-PC:~$ cat /sys/class/power_supply/BAT0/current_now 1657000
    • 通過(guò) upower 命令行工具,獲取當(dāng)前的放電信息,包括工作電壓V、剩余電量Wh、剩余工作時(shí)間等
    #current_time=`date +"%Y-%m-%d %H:%M:%S"` #upower --dump | grep --color=never -E "state|to\ full|to\ empty|percentage" #battery=`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -i "state\|percentage\|time to empty"` battery=`upower -i /org/freedesktop/UPower/devices/battery_BAT0` echo "F00160 $battery \n" echo "F00160 $battery \n" >> time.log F00160 native-path: BAT0vendor: ZYmodel: LoongsonMpower supply: yesupdated: 2021年11月24日 星期三 15時(shí)31分18秒 (5 seconds ago)has history: yeshas statistics: yesbatterypresent: yesrechargeable: yesstate: fully-charged `充放電狀態(tài)更新:dischanging、charging、fully-charged`warning-level: noneenergy: 76.3994 Wh ``energy-empty: 0 Whenergy-full: 76.3994 Wh `不變`energy-full-design: 70.994 Wh `不變`energy-rate: 22.5764 W ``voltage: 17.121 V ``percentage: 100% ``capacity: 100% `不變`technology: lithium-ionicon-name: 'battery-full-charged-symbolic'
    • 功耗檢測(cè)工具
  • s-tui檢測(cè)的功耗和powertop檢測(cè)的功耗有差異,以哪個(gè)為準(zhǔn),如何判斷。
  • powertop檢測(cè)有2個(gè)Display backlight,是否都需要。

    /sys/class/backlight/
    ├── loongson_laptop -> …/…/devices/virtual/backlight/loongson_laptop
    └── radeon_bl0 -> …/…/devices/pci0000:00/0000:00:13.0/0000:06:00.0/drm/card0/card0-eDP-1/radeon_bl0
  • 使用無(wú)線網(wǎng)卡時(shí)禁用有線網(wǎng)卡 – 判斷功耗是否降低
    禁用網(wǎng)卡eth0 – sudo ifconfig eth0 down
    啟用網(wǎng)卡eth0 – sudo ifconfig eth0 up
  • 4.2 屏幕功耗

    ??當(dāng)屏幕關(guān)閉狀態(tài)(關(guān)閉屏幕背光 – xset dpms force off),對(duì)于主機(jī)的耗電量幾乎沒(méi)有影響,耗電量會(huì)小幅降低,但是這個(gè)數(shù)值低到可以忽略。同樣環(huán)境下,若主機(jī)休眠,猜測(cè)屏幕與主機(jī)耗電量應(yīng)該會(huì)降到幾W,稍大于關(guān)機(jī)的耗電量,具體需要硬件儀器測(cè)量。

    4.3 內(nèi)核模塊

    ??系統(tǒng)每次休眠喚醒后需要從新加載內(nèi)核模塊,確認(rèn)那些是有用的模塊,涉及具體的硬件。內(nèi)核模塊–make menuconfig all 后編譯。重啟 通過(guò)lsmod | awk ‘{if($3>0) print $_ }’ 找出used 大于0的驅(qū)動(dòng)模塊,并認(rèn)為是有用的模塊。

    4.3 TLP電源管理軟件

    ??使用706筆記本測(cè)試TLP電池管理工具,其默認(rèn)配置提供了開(kāi)箱即用的優(yōu)化的節(jié)能設(shè)置,目前測(cè)試待機(jī)時(shí)長(zhǎng)沒(méi)有改善,默認(rèn)配置中需要acpi對(duì)相關(guān)耗電設(shè)備進(jìn)行控制,分析缺少相關(guān)模塊,比如電源管理模塊。

    – dmesg報(bào)錯(cuò)

    1225.942252] do_page_fault(): sending SIGSEGV to dde-lowpower for invalid read access from 000000000002cc20 [ 1225.951876] epc = 000000000002cc20 in dde-lowpower[120000000+10000] [ 1225.958113] ra = 000000fff08c92f4 in libdtkgui.so.5.4.6[fff0888000+78000]
    4.4 cpu-powersave模式
  • Powersave – 功耗優(yōu)先的governor,直接將cpu頻率設(shè)置為policy->{min,max}中的最小值;CPU會(huì)固定工作在其支持的最低頻率上,以追求最低的功耗。
    • cpu頻率問(wèn)題
  • 清華同方筆電沒(méi)有/sys/devices/system/cpu/cpufreq/目錄內(nèi)容是空的,不支持動(dòng)態(tài)調(diào)頻,需要更新固件支持。
  • 706筆電
    root@uos-PC:/sys/devices/system/cpu/cpufreq# tree -L 2
    .
    ├── boost
    ├── policy0
    │ ├── affected_cpus
    │ ├── cpuinfo_max_freq
    │ ├── cpuinfo_min_freq
    │ ├── cpuinfo_transition_latency
    │ ├── related_cpus
    │ ├── scaling_available_frequencies
    │ ├── scaling_available_governors
    │ ├── scaling_boost_frequencies
    │ ├── scaling_cur_freq
    │ ├── scaling_driver
    │ ├── scaling_governor
    │ ├── scaling_max_freq
    │ ├── scaling_min_freq
    │ └── scaling_setspeed
    ├── policy1
    │ ├── affected_cpus
    │ ├── cpuinfo_max_freq
    │ ├── cpuinfo_min_freq
    │ ├── cpuinfo_transition_latency
    │ ├── related_cpus
    │ ├── scaling_available_frequencies
    │ ├── scaling_available_governors
    │ ├── scaling_boost_frequencies
    │ ├── scaling_cur_freq
    │ ├── scaling_driver
    │ ├── scaling_governor
    │ ├── scaling_max_freq
    │ ├── scaling_min_freq
    │ └── scaling_setspeed
    ├── policy2
    │ ├── affected_cpus
    │ ├── cpuinfo_max_freq
    │ ├── cpuinfo_min_freq
    │ ├── cpuinfo_transition_latency
    │ ├── related_cpus
    │ ├── scaling_available_frequencies
    │ ├── scaling_available_governors
    │ ├── scaling_boost_frequencies
    │ ├── scaling_cur_freq
    │ ├── scaling_driver
    │ ├── scaling_governor
    │ ├── scaling_max_freq
    │ ├── scaling_min_freq
    │ └── scaling_setspeed
    └── policy3
    ├── affected_cpus
    ├── cpuinfo_max_freq
    ├── cpuinfo_min_freq
    ├── cpuinfo_transition_latency
    ├── related_cpus
    ├── scaling_available_frequencies
    ├── scaling_available_governors
    ├── scaling_boost_frequencies
    ├── scaling_cur_freq
    ├── scaling_driver
    ├── scaling_governor
    ├── scaling_max_freq
    ├── scaling_min_freq
    └── scaling_setspeed
    4 directories, 57 files
  • 4.5 cpu支持調(diào)頻和不支持調(diào)頻模式下的功耗差異

    ??AIDA64 is not available for Linux but there are plenty of alternatives that runs on Linux with similar functionality. The best Linux alternative is s-tui, which is both free and Open Source.
    ??AIDA64不支持linux平臺(tái),在5000機(jī)器上使用s-tui工具,功耗項(xiàng)無(wú)法使用,分析中。
    ??分別使用支持調(diào)頻的固件和不支持調(diào)頻的固件,powertop軟件查看功耗狀態(tài)變化走勢(shì),測(cè)試場(chǎng)景:開(kāi)機(jī)3分鐘穩(wěn)定后的powertop功耗值。

    • cpu頻率
  • 4.1是沒(méi)有調(diào)頻的
  • 4.3是調(diào)頻的
  • sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq VS cat /proc/cpuinfo | grep “cpu MHz”
  • 五.小結(jié)

    限制與測(cè)試設(shè)備數(shù)量和檢測(cè)儀器,S3S4S5暫時(shí)無(wú)法測(cè)試,運(yùn)行時(shí)的續(xù)航時(shí)間,之前使用一臺(tái)706筆記本測(cè)試暫未發(fā)現(xiàn)改善,后續(xù)使用規(guī)定筆記本機(jī)型驗(yàn)證。
    功耗續(xù)航是電池放電的過(guò)程,同時(shí)需要關(guān)注關(guān)機(jī)、開(kāi)機(jī)狀態(tài)下的快速充電。

    六.參考資料

    TLP:一個(gè)可以延長(zhǎng) Linux 筆記本電池壽命的高級(jí)電源管理工具
    干電池放電曲線分析
    Linux下Power Management開(kāi)發(fā)總結(jié)
    shell中記錄運(yùn)行時(shí)間的一種方法
    使用腳本記錄 macbook 電池容量
    從 Linux 終端查看筆記本電池狀態(tài)和等級(jí)的 5 個(gè)方法
    https://01.org/linux-acpi/documentation/overriding-dsdt
    鋰電池的電量單位 mAh Wh
    淺談stm8l系列單片機(jī)的低功耗機(jī)制
    手工編譯linux桌面內(nèi)核(一)——內(nèi)核總體設(shè)置和性能調(diào)優(yōu)
    手工編譯linux桌面內(nèi)核(二)——硬件驅(qū)動(dòng)的配置 上篇
    手工編譯linux桌面內(nèi)核(二)——硬件驅(qū)動(dòng)的配置 下篇
    手工編譯linux桌面內(nèi)核(三)——網(wǎng)絡(luò)的配置
    手工編譯linux桌面內(nèi)核(四)——電源的配置
    https://pms.uniontech.com/zentao/bug-view-91428.html
    安裝acpi-call-dkms時(shí)出現(xiàn)此錯(cuò)誤
    ACPI 電源管理導(dǎo)致的 CPU loadavg 負(fù)載虛高
    Laptop Mode Tools (簡(jiǎn)體中文)
    用 Laptop Mode Tools 配置 Linux 下的電源管理屬性
    Linux電源管理
    [ZZ]Ubuntu電源管理問(wèn)題的說(shuō)明和解決方案
    Ubuntu的啟動(dòng)與優(yōu)化
    Ubuntu硬盤優(yōu)化,降低硬盤溫度(Acer V5 親測(cè)成功 )
    TLP (簡(jiǎn)體中文)
    PowerTOP – Monitors power usage and improve Laptop’s battery life in Linux
    Improving Battery Life in Ubuntu with TLP
    芯片設(shè)計(jì)進(jìn)階之路——低功耗深入理解(一)
    powertop
    [SOLVED] Display backlight consumes too much battery power
    http://www.wowotech.net/linux_kenrel/suspend_and_resume.html
    http://www.wowotech.net/linux_kenrel/std_str_func.html
    kenrel document: freezing-of-tasks.txt
    高通—GPU&CPU頻率和工作模式的獲取設(shè)置
    PCIe功耗控制–ASPM
    How to enable the Radeon dynamic power management feature?
    硬件工程師必看 | 功耗測(cè)試思路與步驟詳解
    測(cè)量誤區(qū),你真的會(huì)測(cè)待機(jī)功耗么?

    總結(jié)

    以上是生活随笔為你收集整理的内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 蜜乳av一区二区 | 欧美中文字幕一区 | 91丨porny丨首页| 中文在线播放 | 污视频网站免费在线观看 | 国产女人18毛片18精品 | 国产aa视频| 做视频 | 亚洲色图 在线视频 | 高清不卡一区二区 | 成人天堂网 | 无码人妻aⅴ一区二区三区69岛 | 欧美岛国国产 | 黄色国产一级片 | 台湾男男gay做爽爽的视频 | 欧美黑人添添高潮a片www | 欧美69av| 永久免费精品视频 | 久久国产精品偷 | 国产免费福利 | 一级特黄av | 夜夜躁狠狠躁日日躁 | 超碰在线天天 | 亚洲精品av中文字幕在线在线 | 欧美久久久久久久久 | 久久99国产精品 | 国产亚洲午夜 | 午夜中出 | 欧美天天爽| 91网在线看 | 欧美成人怡红院 | 国产香蕉在线视频 | 无码日韩人妻精品久久蜜桃 | a√在线视频 | 国产欧美另类 | 少妇人妻偷人精品视频蜜桃 | 色站av| 国产模特av私拍大尺度 | 奇米色婷婷| 日本精品在线 | 九色在线观看 | 婷婷激情综合网 | 四川操bbb| 国产精品丝袜黑色高跟鞋的设计特点 | 欧美精品久久久久久久久久 | 调教亲女小嫩苞h文小说 | 亚洲天堂不卡 | av片免费播放| 免费黄色在线播放 | 美女扒开粉嫩的尿囗给男生桶 | 国产 欧美 日韩 一区 | 伊人夜夜| 欧美中字 | 国产吃瓜在线 | 激情偷乱人成视频在线观看 | 欧美黑人疯狂性受xxxxx野外 | 欧美性受xxxx黒人xyx性爽 | 国产成人av一区二区三区在线观看 | 国产亚洲精品久久久久丝瓜 | 91精品国产综合久久久久 | 国模婷婷 | 亚洲日日操 | 99久久综合 | 狠狠ri| 日本乱淫视频 | 亚洲日本精品 | 永久免费在线视频 | 日日爱夜夜操 | 99国产精品久久久久久久成人 | 国内精品亚洲 | 伊人久久免费 | av老司机在线观看 | 污片在线免费观看 | 国产精品视频免费 | 日韩精品福利视频 | 都市激情校园春色亚洲 | 精品一区二区三区视频在线观看 | 午夜影院在线观看免费 | 啪啪自拍 | 精品久久中文 | 99午夜视频 | 亚洲福利网址 | 亚洲久久天堂 | 乐播av一区二区三区 | 在线视频欧美一区 | 国产又黄又爽 | 男生裸体视频 | 中文字幕在线2021 | 亚洲欧美日韩国产成人精品影院 | av天天射 | 日韩黄片一区二区三区 | 国产又色又爽无遮挡免费动态图 | 色五夜| 免费视频亚洲 | 国产黄色一级片视频 | 欧美激情视频在线播放 | 97在线超碰 | 禁久久精品乱码 | 麻豆视频免费网站 |