摘要 目前,為了降低功耗,越來越多的芯片支持動態(tài)電壓與頻率調(diào)節(jié)DVFS(Dynamic Voltage and Frequency Scaling)。本文列舉了基于軟件和硬件的DVFS實現(xiàn),驗證了DVFS在降低功耗方面的巨大潛力,并分析了影響DVFS應(yīng)用的一些因素。
關(guān)鍵詞 電源管理 動態(tài)電壓與頻率調(diào)節(jié) CPU負(fù)載跟蹤 預(yù)測算法
1? DVFS的工作流程
現(xiàn)在,為了延長便攜式設(shè)備(如手機、MP3、多媒體播放器、筆記本電腦等)的電池壽命,芯片廠商們正在絞盡腦汁開發(fā)新的節(jié)電技術(shù)。簡單地說,這些節(jié)電技術(shù)可以分為兩類——動態(tài)技術(shù)和靜態(tài)技術(shù)。靜態(tài)技術(shù)包括不同的低功耗模式,芯片內(nèi)部不同組件的時鐘或電源的按需開關(guān)等。動態(tài)技術(shù)則是根據(jù)芯片所運行的應(yīng)用程序?qū)τ嬎隳芰Φ牟煌枰瑒討B(tài)調(diào)節(jié)芯片的運行頻率和電壓(對于同一芯片,頻率越高,需要的電壓也越高),從而達到節(jié)能的目的。該技術(shù)的理論依據(jù)是如下的公式:
從上面的公式可以看出,降低頻率可以降低功率,但是單純地降低頻率并不能節(jié)省能量。因為對于一個給定的任務(wù),F(xiàn)*t是一個常量,只有在降低頻率的同時降低電壓,才能真正地降低能量的消耗。
目前許多芯片支持DVFS,比如 Intel公司的芯片支持SpeedStep,ARM的支持IEM(Intelligent Energy Manager)和AVS(Adaptive Voltage Scaling)等。但是要讓DVFS發(fā)揮作用,真正地實現(xiàn)節(jié)能,只有芯片的支持還是不夠的,還需要軟件與硬件的綜合設(shè)計。
一個典型的DVFS系統(tǒng)的工作流程如下:
①? 采集與系統(tǒng)負(fù)載有關(guān)的信號,計算當(dāng)前的系統(tǒng)負(fù)載。這個過程可以用軟件實現(xiàn),也可以用硬件實現(xiàn)。軟件實現(xiàn)一般是在操作系統(tǒng)的核心調(diào)用中安放鉤子,特別是調(diào)度器,根據(jù)其調(diào)用的頻度來判斷系統(tǒng)的負(fù)載。硬件實現(xiàn)如Freescale的i.Mx31,通過采集一些核心信號中斷線、Cache、內(nèi)存總線的使用情況等[1],計算當(dāng)前的系統(tǒng)負(fù)載。
②? 根據(jù)系統(tǒng)的當(dāng)前負(fù)載,預(yù)測系統(tǒng)在下一時間段需要的性能。有多種預(yù)測算法可以選擇,要根據(jù)具體的應(yīng)用來決定。這種預(yù)測,既可由軟件實現(xiàn),也可由硬件實現(xiàn)。
③? 將預(yù)測的性能轉(zhuǎn)換成需要的頻率,從而調(diào)整芯片的時鐘設(shè)置。
④? 根據(jù)新的頻率計算相應(yīng)的電壓。通知電源管理模塊調(diào)整給CPU的電壓。這需要特別的電源管理芯片,比如Freescale公司的MC13783或者NS公司的支持PowerWise特性的系列電源管理芯片。它們能夠支持微小的電壓調(diào)整(25 mV)并且能在極短的時間內(nèi)(幾十μs)完成電壓的調(diào)整。
另外,在調(diào)整頻率和電壓時,要特別注意調(diào)整的順序。當(dāng)頻率由高到低調(diào)整時,應(yīng)該先降頻率,再降電壓;相反,當(dāng)升高頻率時,應(yīng)該先升電壓,再升頻率。
圖1演示了簡單的DVFS過程[2]。
2? 基于軟件的DVFS實現(xiàn)
在基于軟件的DVFS實現(xiàn)中,一般通過在操作系統(tǒng)的核心調(diào)用中安裝鉤子的辦法來收集系統(tǒng)調(diào)用的信息,判斷當(dāng)前的系統(tǒng)負(fù)載。其中最重要的是調(diào)度器,其他地方包括讀/寫接口、定時器等。例如,在Linux內(nèi)核中,一般在以下地方安裝鉤子。
◇ kernel/sched.c。修改__schedule(),在schedule()前和后插入語句,記錄一個任務(wù)的執(zhí)行時間。
◇ fs/read_write.c。修改sys_read()和sys_write(),記錄其被某任務(wù)調(diào)用的次數(shù)。
◇ kernel/timer.c。修改sys_nanosleep()和msleep(),記錄任務(wù)主動休息的時間。
◇ fs/ioctl.c。修改sys_ioctl(),記錄其被調(diào)用的次數(shù)。
◇ kernel/exit.c。修改do_exit(),記錄任務(wù)主動退出的時間。
◇ include/asm_xxx/system.h, arch/xxx/system.c。修改arch_idle(),計算cpu_idle()線程被調(diào)用的時間。
在預(yù)測下一時間段的系統(tǒng)負(fù)載時,需要利用采集到的前面幾個時間段的實際負(fù)載值,然后根據(jù)下面的公式進行預(yù)測:
根據(jù)h的不同,可以形成不同的預(yù)測算法,比如:
◇ 最簡單的先前值法(Previous Value,PV)
◇ 移動平均負(fù)載算法(Moving Average Workload,MAW)
◇ 指數(shù)加權(quán)平均法(Exponential Weighted Average,EWA)
◇ 最小均方法(Least Mean Square,LMS)
以上這些算法各有其優(yōu)缺點。例如LMS算法類似于自適應(yīng)濾波器,能夠自動調(diào)整參數(shù),但是面臨著收斂速度的問題。
ARM公司為了驗證其芯片的DVS(Dynamic Voltage Scaling,動態(tài)電壓調(diào)節(jié))特性,開發(fā)的軟件Vertigo[3]中,采用了UH(Utilization History)算法,有關(guān)的公式如下:
◇ 任務(wù)負(fù)載
◇ 負(fù)載估計
◇ 期限估計
◇ 性能估計
該算法對那些性能需求變化較慢的任務(wù)比較實用,比如MPEG解碼器。
在Vertigo的實現(xiàn)中,一旦預(yù)測器完成性能預(yù)測,它將會把新的性能需求提交給策略管理器,由策略管理器決定是否調(diào)整當(dāng)前的性能設(shè)置。Vertigo的架構(gòu)如圖2所示。
具體實現(xiàn)可以參閱文獻[3]。
3? 基于硬件的DVFS實現(xiàn)
正如前面所說的,CPU負(fù)載跟蹤與性能預(yù)測的工作都可以由硬件完成。這樣,一方面增強了負(fù)載計算的準(zhǔn)確性;另一方面減輕了CPU用于負(fù)載跟蹤與性能預(yù)測的負(fù)擔(dān)。當(dāng)然,這樣做也有一個弊端,就是無法靈活地選擇預(yù)測算法。但是,這個缺點可以通過設(shè)置不同的預(yù)測參數(shù)得到一定程度的彌補。
飛思卡爾的i.MX31就是這樣的一個例子。這是一款針對移動多媒體市場的應(yīng)用處理器,具有強大的音頻和視頻處理能力。該芯片內(nèi)部包含一個ARM11的CPU核,同時它也繼承了來自ARM的DVS技術(shù)并發(fā)展為DVFS。在該芯片中,CPU負(fù)載跟蹤和性能預(yù)測都是由硬件完成的,其負(fù)載跟蹤模塊框圖如圖3所示。
在圖3中,16路CPU活動信號被采集之后,經(jīng)過加權(quán),被送到負(fù)載疊加器,與另外采集的CPU空閑信號(經(jīng)過簡單平均)進行疊加。疊加器輸出的結(jié)果被送到EMA模塊,執(zhí)行指數(shù)移動平均(Exponential Moving Average)算法,進行性能預(yù)測。EMA模塊得到的結(jié)果與預(yù)先設(shè)置的門限值進行比較,如果預(yù)測的性能需求高于上限,則請求調(diào)高頻率;反之,如果預(yù)測的性能需求低于下限,則請求降低頻率。這種請求一般作為中斷,發(fā)送給CPU自身或外接的處理器,由它們在其中斷處理程序中設(shè)置相應(yīng)的頻率和電壓。圖4演示了整個處理流程。
在圖4中,CCM(Clock Control Module)為時鐘控制模塊,負(fù)責(zé)調(diào)節(jié)CPU的頻率。PMIC(Power Management IC)為電源管理芯片,負(fù)責(zé)提供CPU所需要的電壓。該芯片提供兩種接口給CPU:常規(guī)的SPI(Serial Programmable Interface)和專用于動態(tài)電壓調(diào)節(jié)的DVS接口。該接口由兩根線組成。兩根線的狀態(tài)00表示電壓無變化,01表示電壓降低一格,10表示電壓升高一格,11表示電壓升到最高值。
圖4中的DPTC(Dynamic Process and Temperature Control)指的是動態(tài)制程與溫度控制。該技術(shù)能夠根據(jù)該芯片的制程和當(dāng)前的溫度動態(tài)調(diào)節(jié)電源電壓,從而也可以有效地節(jié)省能量。這也是i.MX31的一項創(chuàng)新。
4? DVFS應(yīng)用的實際效果
為了驗證DVFS的實際效果,需要在CPU上運行相應(yīng)的應(yīng)用程序,并測量使用DVFS技術(shù)和不使用DVFS技術(shù)時CPU的功耗。這里,分別給出軟件實現(xiàn)的DVFS和硬件實現(xiàn)的DVFS在節(jié)省能量方面的實際測量數(shù)據(jù)。
Intrinsyc公司將ARM公司的IEM軟件移植到WinCE上[5],并測量了IEM使能或禁止時的CPU功耗。軟件運行在i.MX31的開發(fā)板上,但是因為它沒有使用i.MX31內(nèi)置的DVFS,因此可以將其看作軟件實現(xiàn)的DVFS。在計算CPU負(fù)載時,采用了簡單移動平均算法(即式(3)中的h恒為1/N);同時,它通過一個GPIO來指示系統(tǒng)是否已經(jīng)進入空閑狀態(tài)(cpu_idle()線程被調(diào)度)。如果Idle的比例越小,則表明CPU的利用率越高。表1和表2是實際的測量數(shù)據(jù)。
為了驗證硬件實現(xiàn)的DVFS的功效,作者在i.MX31的開發(fā)板上進行了測量。所使用的操作系統(tǒng)是Linux。表3給出了實際的測量數(shù)據(jù)。
表3? i.MX31內(nèi)置的DVFS打開或關(guān)閉時功耗對比
從表3中可以清楚地看出,無論軟件實現(xiàn)的DVFS還是硬件實現(xiàn)的DVFS,都可以有效地降低能量消耗。
5? 影響DVFS應(yīng)用的因素
動態(tài)電壓與頻率調(diào)節(jié)的技術(shù)提出很久了,在Linux上也有專門的開源項目cpufreq,但是這項技術(shù)并沒有得到廣泛的應(yīng)用。其中一個最關(guān)鍵的因素就是預(yù)測的可靠性。沒有一種預(yù)測算法是100%準(zhǔn)確的,也沒有一種算法可以應(yīng)用于所有的程序;而對于實時類的應(yīng)用(如音頻、視頻等),預(yù)測失敗的結(jié)果是不可接受的。因為實時類的應(yīng)用都有一個Deadline,錯過Deadline,就意味著程序的運行出了問題。比如音頻或視頻幀的播放時間錯過以后,用戶就能明顯地感覺到音頻或視頻的不連貫,這會極大地影響用戶的體驗,從而也會影響用戶對DVFS的信心。作者在進行DVFS的測試時,就碰到過這些問題。IEM測試中采用的簡單移動平均算法只對單一應(yīng)用程序有效。但是i.MX31內(nèi)置的移動指數(shù)平均算法EMA也不是萬能的。對于Pink Floyd的某些音樂,它就不能平滑地播放(也許通過修改一些加權(quán)參數(shù),可以播放)。
但是作者相信,隨著預(yù)測算法的進步,DVFS技術(shù)必將得到廣泛的應(yīng)用,因為它能夠節(jié)省很多能量。而節(jié)能對許多便攜式設(shè)備來說,常常是第一要求。
參考文獻
[1]? Freescale. i.MX31 Multimedia Application Processor Reference Manual. Rev 1. 2006-02.
[2]? Freescale. Boris Bobrov & Michael Priel, 6/2005, i.MX31Power Management White Paper. Rev 0.
[3]? Krisztian Flautner, et al. OSDI 2002, Vertigo: Automatic Performance-Setting for Linux. ARM.
[4]? Krisztian Flautner, et al. DesignConn 2003, A Combined Hardware-Software Approach for Low-Power SoCs: Applying Adaptive Voltage Scaling and Intelligent Energy Management Software.ARM.
[5]? Suji Velupillai,Ken Tough.? Intelligent Energy Manager (IEM) Benchmarking on a Freescale's i.MX31 Multimedia Processor. Intrinsyc,2006.
盧春鵬(工程師),主要研究方向為嵌入式系統(tǒng)、移動網(wǎng)絡(luò)、多媒體應(yīng)用。
(收修改稿日期:2007-01-15)
評論
查看更多