文章來源:深入瞭解樹莓派Zero 2 W的功耗 - CNX Software中文站
我之前完成對樹莓派Zero 2 W的評測時,提到過後續會測試主機板的功耗。花了一段時間測試後,我終於完成了這部分測試。並且我還透過來自 Qoitech 公司的Otii Arc和Otii 軟體生成了一些功耗圖表,以及一些能源消耗圖表。由於樹莓派基金會推薦使用 5V/2.5A 的電源,所以我就先嚐試用接近 2.5A的電源,然後使用一些小技巧將空閒功耗降低到了 75 mA/375 mW 以下。最後,我再檢查在不同CPU核心數和頻率下的能耗。
帶附件樹莓派Zero 2 W的負載功耗
我本次的測試是從最新的樹莓派OS Lite“Bullseye”映象開始的,接著我就將樹莓派 Zero 2 W 板連線到了 Qoitech Otii Arc 工具上,如下所示。Qoitech Otii Arc 工具之前的價格500美元左右,但現在更高了,起價是 699 美元。對於開發電池供電裝置的人來說,Qoitech Otii Arc 真的是一個很好的工具。雖然它的價格有點過高了,但就篇文章的目的來說,它真的很適合使用。
接下來,我開啟樹莓派,並使用我剛剛刷入且未經任何修改的映象來檢查空閒功耗的情況。
其功耗大約是 120 mA @ 5V、600 mW。如果你對之前樹莓派 Zero 2 W 的評測有印象的話,可能會記得看到過比這還低的功耗值。那其實是因為我使用的是樹莓派 OS Bullseye 映象而不是 Buster 映象,這一點我在本文後面會給大家詳細解釋。
樹莓派Zero 2 W(綠色)和樹莓派Zero(紅色)的空閒功耗
我還用了一個樹莓派Zero(沒有 WiFi),它使用的也是相同映象,空閒狀態下的功耗是108 mA。對了,Otii Arc 還有另一個巧妙的功能,就是將功率測量資料與序列控制檯同步。因此,我就連線了杜邦線用來訪問 Otii 程式中的序列控制檯。
我還在 config.txt 中啟用了 UART:
接著,我透過SSH在 microSD 卡上建立一個空的/boot/ssh檔案。這其實是因為 Otii 中的串列埠控制檯使用起來不是很方便、沒有歷史記錄,而且之後的測試中還需要執行vim 或 raspbi-config 之類的程式,所以我依舊透過 SSH 做很多工作。除非我需要匹配帶有 V/A 資料的序列控制檯輸出,我才會去改變。在這些都修改了之後,功耗就上升到了 125 mA。
我透過連線USB乙太網、WiFi、USB 硬碟驅動器和連線 HDMI 線等方式,查看了每個附件是如何影響功耗的。我將這些數值顯示與閒置的進行了對比,就可以得出每個專案大約的額外功耗(mA)。
增加值 |
評測 |
|
USB 乙太網加密狗 |
+104 mA |
沒有網路連線,只有一個 USB 乙太網加密狗插入 |
USB 乙太網加密狗 + link |
+180 mA |
插入乙太網電纜後 |
USB 乙太網加密狗 + iperf |
+244 mA |
平均值見下表瞭解詳情 |
2.4 GHz WiFi |
+11 mA |
連線到 2.4 GHz 接入點 |
2.4 GHz WiFi + iperf |
+187 mA |
平均值,詳情見下表 |
用於鍵盤/滑鼠的羅技 RF 加密狗 |
+29 mA |
|
希捷 USB 硬碟(空閒) |
+255 mA |
穩定的電流,在初始插入後達到峰值 1.06。詳情見下表 |
希捷 USB 硬碟(iozone) |
+554 mA |
平均值,詳情見下表 |
HDMI線 |
+7 mA |
請注意,這只是在插入電纜之後,而不是啟用/禁用 HDMI。詳情見下表 |
對比來看,WiFi比乙太網更節能,尤其是在空閒時的時候更加的明顯。硬碟驅動器在最初連線時會消耗很多電量,不過連線 HDMI 電纜對功耗產生的影響就很小。
Iperf(網路效能測試工具)中乙太網圖表顯示的電壓和電流一開始都是穩定的,但大約20秒後莫名其妙地波動了一點,我在想是不是因為一段時間後會發生資料包衝突。過程中,還有一個 516 mA 的短尖峰,這可能是與另一個程序有關的。
iperf上的乙太網功耗
不過,WiFi 的“噪音”要大得多,在資料傳輸期間電流會在 160 到 480 mA 之間快速振盪。總能量略低於乙太網,但傳輸的資料就較少。
連線 USB 硬碟驅動器可以得到一個漂亮的圖表,開始時電流消耗高達 1.06A,然後是掛載分割槽時的峰值。一段時間後,系統平均穩定到 386 mA。
由於iozone(檔案系統的benchmark工具)無法在樹莓派 OS 上使用 apt 安裝,我就使用了之前在樹莓派 4 評測中相同的步驟來構建 iozone 3.492。
我也很難檢視控制檯寫入方式的細節,但似乎寫入的功耗比讀取的更多。為了檢查負載下的功率和能耗,我使用了從 Otii 序列控制檯啟動Tomas Kaiser的SBC Bench指令碼。
我們可以清楚地看到右側多執行緒 7-zip 壓縮/解壓縮的測試,其功耗更高,峰值接近 600 mA。
如果我們在序列控制檯中選擇“tinybench”和“cpufreq OPP”之間的文字,就可以看到實際基準測試(不包括安裝和執行後)使用了 328 mWh 的能量,峰值是 624 mA,執行時間為14 分 17 秒。我們先將這些數值記下來,因為我們稍後會用到。
到目前為止,我們得到的峰值是 1.06 A,距離2.5A 的目標還很遠。因此,我要嘗試使用一下樹莓派 OS Desktop。
得到的結果是:平均值為 124 mA,與 Lite 影象大致相同,但在 300 mA 附近出現了許多尖峰。
如果我連線一個 HDMI 顯示器,平均電流會上升到 131 mA。這個想法其實就是透過 USB 集線器來連線 USB 乙太網、USB 硬體、鍵盤、滑鼠來對系統進行壓力測試,但我的 USB 集線器都不能與樹莓派樹莓派 Zero 2 W 配合使用:
所以這一部分我就放棄了,只是將 USB 驅動器連線到 USB OTG 埠和 WiFi 上。
我本來還計劃做一些播放 YouTube 影片、執行 3D 圖形的基準測試,比如 OpenArena,但這對於只有 512MB 的 RAM 來說似乎要求有點太多了。OpenArena 可以啟動,我也可以選擇“演示”,但是在載入演示時它毫無意外地崩潰了。因此,我改成了執行 es2gears(它似乎可以執行軟體渲染器),接著插入了硬碟,運行了 iozone和stress-ng(模擬系統負載升高的壓力測試工具)。這就意味著es2gears、iozone 和stress-ng 都在同時執行。
這樣操作之後,最大值達到了 1.35A,距離推薦使用的 5V/2.5A 電源仍有足夠的餘量。雖然我測試時間比上面的截圖更長,但我在 1.46A 處至少有一個峰值。如果我先執行stress-ng,然後插入USB 驅動器,我們的峰值可能會更高一些,我估計是1.7 或1.8A。我敢肯定,如果我從硬碟驅動器播放影片、執行 3D 圖形演示、且保證stress-ng執行,那麼此時電流硬就可以更接近 2.5A 了。不過,因為我沒有可用的 USB 集線器,也沒有藍芽鍵盤,因此完成這個測試還是很有挑戰性的。但不管怎麼說,這也就意味著在大多數情況下,使用較弱的電源(即使是 5V/1A)對樹莓派 Zero 2 W來說足夠了。我無法測試 MIPI CSI 攝像頭介面,因為我沒有。
降低樹莓派Zero 2 W功耗
現在我們回到樹莓派 OS Lite 映象,保證只啟用 UART 和 SSH,我們可以看到板子空閒且沒有執行其他任何東西時功耗為125 mA。我又嘗試了一些修改方法來降低功耗,主要是透過 raspi-config 實用程式和編輯 config.txt。我還將樹莓派 RP3A0 強制定為 600 MHz。
其實,我不指望空閒功耗會有所改進。而事實上,我也透過一些方式測試到了它有 127 mA的功耗。接著,我透過將記憶體設定為 16 來完全禁用 GPU:
空閒時平均的功耗仍是 127 mA。理論上我們是可以透過在 config.txt 中新增以下幾行來禁用 LED 的:
但是,無論我怎麼進行第二行設定都不起作用,無論是閉還是開啟。但我可以從命令列手動關閉 LED:
這項改動會將電流減少1mA,使之達到 126mA,或大約 5mW。還有一點非常奇怪,就是有時我必須執行以下命令才能關閉 LED:
現在我們在 config.txt 中嘗試禁用音訊、WiFi 和藍芽以及攝像頭/顯示器來自動檢測一下,如下所示:
這時功耗降到了 114 mA,而不是我們第一次在沒有修改的情況下執行映象的 125 mA。也就是預設設定,沒有 WiFi,但啟用了 SSH 和 UART。這幫助節省了 9 mA 的電流。
另一個技巧是使用以下命令來禁用 HDMI:
由於樹莓派 OS Bullseye 中有用於 3D 圖形新標準的 KMS 影片驅動程式,它顯然無法正常工作:
接下來,我們可以去raspi-config修改,也就是在“ Advanced options->GL driver ”裡面安裝一些包,然後可以選擇“ G1 Legacy ”。
它會將 config.txt 從:
到
現在終於有點感覺了!它的功耗下降到了 92.7mA,最低甚至能到 21mA,而且我還沒有禁用 HDMI 輸出:
禁用HDMI之後,功耗下降到了75.5 mA,最低約 17 mA。如果你想在啟動時自動禁用 HDMI,請將這一行新增到/etc/rc.local檔案中。這也是我最終關閉 LED 的地方(不要問我為什麼,我不需要執行該行,所以就將其設定為了 0 或 1),如下所示:
對了,我還有一個技巧,雖然可能不會大幅降低空閒功耗,但是 Jeff Geerling 提供了禁用 cores 的說明,所以我們還是嘗試一下,修改/boot/cmdline.txt以將核心數限制為 1,maxcpus=1:
事實證明,這項修改是有效的,因為現在我們只能在 /proc/cpuinfo 中看到一個核心:
那麼這時的功耗如何呢?是74.6 mA。因此,在空閒功耗方面,一個核心可能的好處會比較有限。現在我們試試禁用 SSH:
以及 UART,看看我們功耗是否可以達到 70 mA。
遺憾的是,它並沒有多大幫助,因為我在空閒時只能達到 74.5 mA。我想可能還有其他一些最佳化發放,因為我偶爾會看到 100 mA 的尖峰。某些處理器具有一些低功耗模式,其中所有應用程式核心和某些塊都可以根據需要關閉/開啟各種睡眠模式。但我找不到 Broadcom BCM2837 / BCM2710A 處理器的任何內容。
能耗使用
現在讓我們看看是否可以透過調整頻率和使用的核心數量來降低能耗。這對電池操作來說還是很有用的。我使用 WiFi、SSH 以及我們啟用的一些最佳化以預設頻率 (1.0 GHz) 重新執行帶有四個核心的 SBC bench,從而檢查它如何影響能耗使用。作為參考,此配置中的空閒功耗略低於 80mA。
SBC Bench樹莓派Zero 2W四核@ 1.2 GHz
完整的結果可以在http://ix.io/3HrM中找到。這其實挺奇怪的,因為 338mWh 使用的能量比我們第一次沒有最佳化狀態下執行(328 mWh)的略多,而且測試需要 16 分 49 秒才能完成(對比 14:17),其最大電流消耗是 635 mA。剛開始我以為我沒有儲存第一個結果,但幸運的是,我儲存了功率測量值。而且 Otii 保留了序列輸出,因此我可以恢復第一個結果@ http://ix.io/3H54。
快速檢查 7-Zip 來比較第一次的執行情況,如下所示:
第二個:
該測試展示了一些最小的效能差異。
我比較了 Meld 中的兩個輸出,除了啟用了 KMS 驅動程式之外,我看不出有太大區別。並且第一次執行時空閒百分比較高,第二次執行時 iowait 百分比略高。
無論如何,我們還是嘗試切換使用 600 Mhz 的四核,看看我們是否可以在執行相同任務的同時節省能耗並延長電池壽命。
完整的結果:http : //ix.io/3HrU。有趣的是,331mWh 使用的能耗幾乎是相同的(仍然少 7 mWh,但與第一次執行 @ 1.0 GHz 相似),測試時間與預期時間相似,即 23 分 18 秒。其最大功耗僅 449 mA,這意味著該板子可以透過具有此工作負載的路由器或計算機的 USB 埠安全地供電。
接下來,我們以 600 MHz 的單核配置來進行最後一次的測試。
完整結果:http : //ix.io/3Hsg。能耗高很多,為483 mWh。也許是因為7-zip在單核系統上處理“多核”壓縮/解壓的方式不同導致的區別,我暫時還不知道具體原因。不出所料,完成所有測試確實需要更長的時間,時間為 43 分 50 秒。所以,其唯一的潛在優勢應該就是最大電流消耗了,消耗僅為 349 mA。不過,由於三個核心被關閉了,該測試結果也是我們能預料到的。
後來,在評論區與讀者們進行討論後,我意識到了由於空閒電流消耗,我應該在相同的測試時間內對能耗進行測量。因此我就利用前兩個場景的 80 mA 空閒功耗,並將結果調整為了43分50秒,這樣就可以更好地比較差異:
- 4x 核心 @ 1,000 MHz:338 mWh (16:49) + 180 mWh (27:01) = 518 mWh
- 4x 核心 @ 600 MHz:331 mWh (23:18) + 137 mWh (20:32) = 468 mWh
- 1x 核心 @ 600 MHz:483 mWh
這其實就意味著我們在這裡模擬了一個工作負載,其中的sbc-bench約每44分鐘會在板上執行一次,當然這不包括安裝和後續的基準測試活動。所以,實際結果顯然還是取決於你特定的應用程式或者工作負載。
我暫時就測試了這些內容,如果你還需要我測試其他東西,可以隨時問我。因為我還沒把桌子上的試驗檯收起來,要進行相關的測試是很簡單的。
更多優質文章推薦:
1.CANBed樹莓派RP2040開發板,支援CAN匯流排、ODB-II協議 - CNX Software中文站
2.Armbian官方釋出了適用於樹莓派的測試映象DietPi 7.9 — CNX SOFTWARE中文站—嵌入式開發者的知識庫!
3.WPC-632-Pi CM4,一款隨附樹莓派CM4的5G IoT/AIoT工業閘道器 - CNX Software中文站