代碼運(yùn)行優(yōu)化策略和功耗優(yōu)化:基于存儲(chǔ)架構(gòu)的動(dòng)態(tài)執(zhí)行模型)
通過(guò)分析NOR/NAND Flash的物理特性與CPU-RAM的交互瓶頸整合XIP片內(nèi)執(zhí)行、完全加載Fully Shadowed和按需分頁(yè)Demand Paging三種模式的互補(bǔ)優(yōu)勢(shì)實(shí)現(xiàn)啟動(dòng)速度、內(nèi)存占用與實(shí)時(shí)性的平衡優(yōu)化。一、核心問(wèn)題分析1. 資源矛盾1.1. 空間限制嵌入式設(shè)備RAM通常僅KB~MB級(jí)如STM32F4系列僅192KB RAM。1.2. 性能需求實(shí)時(shí)系統(tǒng)要求μs級(jí)響應(yīng)但NAND Flash讀取延遲達(dá)ms級(jí)。1.3. 能耗約束動(dòng)態(tài)加載代碼增加30%功耗。2. 傳統(tǒng)模式瓶頸運(yùn)行方式典型缺陷優(yōu)化方向XIPNOR Flash成本高寫速度慢混合存儲(chǔ)架構(gòu)完全加載大程序加載延遲顯著分段加載策略按需分頁(yè)缺頁(yè)中斷破壞實(shí)時(shí)性預(yù)取算法優(yōu)化二. 動(dòng)態(tài)執(zhí)行優(yōu)化模型1. 分層存儲(chǔ)架構(gòu)設(shè)計(jì)1.1.高頻代碼固化將中斷服務(wù)程序ISR、核心算法等實(shí)時(shí)性要求高的代碼駐留NOR或Nand Flash、Sram/cache避免加載延遲。MDK Keil也支持將代碼永駐sram中系統(tǒng)啟動(dòng)時(shí)完全加載運(yùn)行。核心思想是如何讓代碼無(wú)限縮小加載時(shí)間、和指令存取時(shí)間。如放在永駐SRAM只需要啟動(dòng)時(shí)加載一次則沒有加載時(shí)間只有指令數(shù)據(jù)存取時(shí)間運(yùn)行效率大大增加時(shí)間大大減小芯片系統(tǒng)設(shè)計(jì)時(shí)注意sram功耗即可設(shè)計(jì)出非常優(yōu)秀的芯片如經(jīng)典藍(lán)牙芯片dialog DA14531。當(dāng)然他需要更大的sram更大的sram/cache意味著昂貴的價(jià)格。幾乎所有的芯片都可以通過(guò)把代碼永駐SRAM實(shí)現(xiàn)更低的功耗。MCU、移動(dòng)端SOC、x86都可以。1.2. 中頻代碼動(dòng)態(tài)加載將通信協(xié)議等采用改進(jìn)型MRUMost Recently Used預(yù)取算法減少缺頁(yè)中斷次數(shù)?;蛘卟捎肦OM的方式存儲(chǔ)不少藍(lán)牙、WiFi芯片采用此設(shè)計(jì)訪問(wèn)速度快、功耗低、成本低。缺點(diǎn)是如果代碼有BUG需要通過(guò)打補(bǔ)丁來(lái)修復(fù)。1.3. 低頻代碼一次性加載系統(tǒng)啟動(dòng)時(shí)批量載入配置模塊避免運(yùn)行時(shí)碎片化訪問(wèn)。這類代碼一般只再開機(jī)時(shí)運(yùn)行一次。2. 編譯器優(yōu)化2.1.代碼段重排技術(shù)2.1.1. 通過(guò)GCC鏈接腳本.ld文件調(diào)整代碼段布局將關(guān)聯(lián)函數(shù)物理鄰近存儲(chǔ)減少XIP模式下的跨區(qū)塊跳轉(zhuǎn)。核心思想順序扇區(qū)讀取或同一扇區(qū)讀取此時(shí)如果引入預(yù)取機(jī)制那么可以減少查詢次數(shù)和時(shí)間、減少讀操作次數(shù)和時(shí)間。因?yàn)槲覀冎浪械膕sd、Flash順序讀寫的性能都遠(yuǎn)遠(yuǎn)高于隨機(jī)讀寫性能。2.1.2.內(nèi)聯(lián)匯編加速對(duì)完全加載區(qū)的核心循環(huán)嵌入ARM匯編指令優(yōu)化流水線。提升執(zhí)行效率。3.運(yùn)行時(shí)內(nèi)存管理3.1. 雙緩沖機(jī)制Dual-Buffering為按需分頁(yè)區(qū)分配兩個(gè)物理頁(yè)框?qū)崿F(xiàn)后臺(tái)加載與前臺(tái)執(zhí)行并行。3.2.內(nèi)存池化技術(shù)預(yù)分配固定大小內(nèi)存塊如4KB消除完全加載模式下的堆碎片。4. 預(yù)取機(jī)制在某些MCU芯片中有ART加速器其內(nèi)部有Icache和DcacheART加速器主要用于加速內(nèi)核對(duì)存儲(chǔ)在Flash上的指令的訪問(wèn)速度以提升內(nèi)核對(duì)代碼的執(zhí)行效率。如stm32H系列stm32M7系列。在x86或者arm的PC或者大型計(jì)算機(jī)中加大cache結(jié)合預(yù)取器可以提高CPU所需的指令數(shù)據(jù)數(shù)據(jù)命中率避免頻繁訪問(wèn)Flash、ssd等外存儲(chǔ)器明顯提高性能和效率。如AMD 9950x3d。在ARM移動(dòng)端我們看到華為在預(yù)取機(jī)制的基礎(chǔ)上加大緩存cache同時(shí)結(jié)合LLM大模型分析用戶行為以提高性能這是有一定前瞻性的設(shè)計(jì)。Disclaimer / 免責(zé)聲明:本文僅代表作者在撰寫和修改時(shí)的個(gè)人觀點(diǎn)不代表當(dāng)前或未來(lái)立場(chǎng)。文中觀點(diǎn)和內(nèi)容未經(jīng)學(xué)術(shù)機(jī)構(gòu)或標(biāo)準(zhǔn)組織驗(yàn)證作者不對(duì)其準(zhǔn)確性、完整性或可靠性作任何保證。請(qǐng)讀者僅供參考并自行核實(shí)相關(guān)信息。本文旨在探索與經(jīng)驗(yàn)分享因篇幅及作者水平所限難免存在疏漏歡迎批評(píng)指正。如有問(wèn)題或交流建議請(qǐng)聯(lián)系flourishinggardenoutlook.com。copyright / 版權(quán)聲明:本文為作者原創(chuàng)。引用或轉(zhuǎn)載需注明“轉(zhuǎn)自或引用自 flourishinggardenoutlook.com”。 未經(jīng)注明來(lái)源的擅自使用、抄襲或傳播行為均被禁止。