SoC嵌入式軟件架構設計之一:系統內存需求評估

    內存是SoC(System on Chip,片上系統)集成設計的重要模塊,是SoC中成本比重較大的部分。內存管理的軟硬件設計是SoC軟件架構設計的重要一環,架構設計師必須要在成本和效率中取得平衡,做到在節省內存的同時保證整個系統的性能。系統內存需求評估是對嵌入式軟件架構師的最基本要求,同時也是其最重要的技能之一。一般在SoC項目立項的時候,架構師就要完成系統內存需求評估。

    下面以一個多媒體電子解決方案中的SoC設計爲原型,說明大致的評估流程:

    1. 根據產品規格,對各個應用場景進行功能和性能分解

    產品規格一般會描述應用功能場景和性能。架構師要對各個場景進行功能和性能分解,分析各個場景在內存使用上的關係。包括:

    1)列出所有的應用場景,明確各個應用的生命週期,在什麼時候開始,什麼時候結束。

    2)系統是否要同時支持多個應用(多進程),例如聽歌曲的時候要瀏覽圖片,這意味中兩個應用是同時利用內存,不能進行應用內存分時複用;

    3)系統是否要同時支持多種介質,例如同時訪問卡設備和閃存設備,一般在單進程時都只是訪問單種存儲設備,除非是實現數據複製,但在多進程的時候,不同的進程訪問不同的存儲設備也很正常,同時訪問不同的存儲設備意味着兩種驅動是同時使用內存。

    4)系統是否要同時支持多種文件系統。不同的存儲設備可能部署不同的文件系統,其同樣存在2)中的問題。

    5)明確系統支持的編解碼格式,其表現爲算法內存需求。不同的編解碼格式對內存的要求不同的,同樣的算法時,不同的速率也導致不同的內存需求。

    6)系統性能要求,例如LCD刷屏,有大塊framebuffer自然會有更好的性能。 


    2. 對系統軟件進行分層,明確每一層模塊的組成     

    1)系統分啓動、驅動、操作系統、文件系統、中間件(算法、UI)、應用框架、應用等層次,一般的消費類電子產品,如多媒體設備、遊戲機等產品系統都會分成多個層次。每個層次又會有多個模塊組成,如驅動分字符設備驅動和塊設備驅動,一般按鍵屬於字符設備,存儲設備一般屬於塊設備;存儲設備裏可能支持nand flash、SD-MMC card、Uhost等;文件系統又有FAT32、exfat等等;應用層當然會包括很多個應用程序。

    2)明確每個應用實現所需要的軟件層次。有些應用可能要很多層,如音樂,從應用到應用框架(UI+按鍵)、API、中間件(解碼)、操作系統、驅動等層次,而設置應用是不需要解碼中間件的。

        3. 明確每個軟件層次中內存分時複用的模塊,找出最大內存需求的模塊

如《節省內存的軟件設計技巧》這篇文章提到,應用、驅動、中間件、數據段都存在着複用的需求。要在2)中的各個軟件層次中區分各個不同的組成模塊,明確各個模塊是否能夠進行分時複用。在複用的情況下,找出最大內存需求的模塊,如nand flash驅動要比card驅動複雜,那nand flash驅動的內存需求自然要高;而音樂應用自然要比設置或者FM等應用要複雜,其內存需求自然也要更多。

    4.對最大內存需求模塊的代碼進行分析,大致明確其常駐內存代碼和分塊(bank)管理的代碼。

    常駐代碼段一般是調用頻繁的、性能要求高的代碼段,如中斷管理、消息管理等。一般應用中大量的代碼是可以按需加載執行的,如音樂的音效管理和音量設置這些功能代碼並不要求很高的執行性能,其是可以分時加載到內存執行,能夠達到內存分時複用的目的。

    5.確定各個軟件層次的常駐代碼空間和分時複用內存的空間

    在成本的要求下儘可能減少常駐代碼空間,會導致代碼執行性能的降低,因爲bank代碼執行前要先進行加載,一般是從nand flash或者card中讀取;在成本的要求下我們也想盡可能減少bank代碼複用的內存空間,同樣會導致bank代碼切換頻繁而降低性能,因此也不能一味地減少內存,而是仔細分析各個子模塊的功能和性能對內存的大致要求。例如兩個子模塊的函數實現是8k和4k,那我們可以考慮2K的複用空間,即前者分成4個bank,後者2個bank,是否能夠達到性能;如果複用空間設置爲4K,效率會高一些,但成本會增加;如果設置爲1k,那前者就會有8個bank,切換次數過多。

    6.明確可以固化的代碼空間

    應用的常駐代碼是不能固化的,因爲不同的應用都需要常駐代碼,即其是變化的,而像操作系統的中斷管理、時間管理、任務調度管理等代碼一般是不變的,其可以固化到ROM中,這樣能達到節省內存的目的。

     7.考慮其他特殊的需求

    通過6,我們可以大致得到整個系統的內存需求。這時要考慮一些特殊的場景的內存需求,看之前制定的內存是否能夠滿足這個場景。例如啓動階段的內存需求分佈,OS引導初始化時的內存要求等。這些並不是產品的規格,同樣是架構設計師要考慮的。

     一般會對6中得到的內存再次評估,以進行細微的調整。


     請關注SoC嵌入式軟件架構設計(控制器SoC固件架構)系列博文:

SoC嵌入式軟件架構設計之一:系統內存需求評估 

SoC嵌入式軟件架構設計之二:沒有MMU的CPU實現虛擬內存管理的設計方法

SoC嵌入式軟件架構設計之三:代碼分塊(Bank)設計原則

SoC嵌入式軟件架構設計之四:內存空間規劃分配

SoC嵌入式軟件架構設計之五:可執行程序的重構

嵌入式:節省內存的軟件設計技巧




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章