Linux Systems, Kernels, and Applications Survey Report
Topic:
Fast Functional Simulation with Performance Monitoring by QEMU for Embedded
Heterogeneous Platform
組 員:R98922067 黃昱文
R98922112 梁福田
一、 摘要
近年來智慧型手機、MP3/MP4隨身聽或多媒體遊戲機等嵌入式異質多 核心系統的應用已成為市面上最熱門的3C商品之一,各大廠皆不斷推陳出 新來競爭這塊急速成長的市場。如何在硬體設計的初期同步開發其上的軟 體加速產品開發進而提升競爭力遂成為一項重要的課題,而虛擬平台 (Virtual Platform)便是一個很好的解決方案。
透過建置一個虛擬平台模擬一個目標嵌入式異質多核心系統,不僅可 以在實際硬體昂貴或稀少而不易取得的開發初期時,達到同步開發軟體並 驗證其功能的目的;甚至可以利用虛擬平台測試各種硬體設計的考量,來 決定最終產品應有的元件進而節省成本,以達成軟硬體共同開發設計的艱 鉅任務,縮短開發時程,提升市場競爭力。
然而傳統ESL的模擬速度太慢,無法用以執行許多網路多媒體應用,
以 Android 智 慧 型 手 機 為 例 , 軟 體 的 開 發 均 以 快 速 的 功 能 性 模 擬 器 (functional simulator)為主,例如Google的Android SDK即選用QEMU這個快 速且開源的模擬器模擬系統中的ARM中央處理器。但對於建置嵌入式異質 多核心平台,QEMU並未有任何支援,因此我們以工業技術研究院研發的 PAC DUO為案例,探討模擬異質多核心系統所面臨的問題。我們將PAC數 位訊號處理器之指令模擬器(PAC Instruction Set Simulator – PAC ISS) 整合 進QEMU之中,再加入自行設計的虛擬效能監控單元(Virtual Performance Monitoring Unit – VPMU),提供一個較傳統ESL模擬快速許多的異質多核 心環境,並提供效能分析和除錯功能,加速嵌入式系統軟硬體之開發時 程。
二、 功能與構想
隨著高效能多媒體程式的需求,各種硬體平台慢慢由單核心演變成多 核心(Multi-Core)的硬體架構,市面上所看到的更多是屬於異質性多核心
(Heterogeneous Multi-Core)的硬體架構,也就是同時具備有微處理器(MPU) 與數位訊號處理器(DSP)的平台。在更加複雜的異質多核心系統中,軟體 開發除錯遠比單核心系統困難,且傳統電子系統層級 (ESL, Electronic System Level)的模擬速度不盡理想,為此,我們希望利用QEMU這個開放 原始碼的高效能模擬器來開發一個快速並具有效能分析和除錯的虛擬平 台,期望能做為嵌入式系統軟硬體共同設計的絕佳環境。以下是系統基本 架構圖:
圖一、整體系統架構圖
此模擬環境整體功能:
1. 由於現今功能性(functional)模擬的虛擬平台缺少模擬異質多核心系統的 功能,我們希望以QEMU為基礎整合多個不同指令集的處理器核心,以 建構可支援異質多核心的虛擬平台。
2. 在多核心平台上運行的程式,效能分析是運用多核心的關鍵,因此我們 提供對其剖析(profiling)的相關功能,再虛擬平台中加入虛擬效能監控單 元(VPMU)來記錄分析效能資訊,讓使用者可以利用效能工具分析多核 心系統的利用率與程式執行狀況。
3. 功能性模擬的虛擬平台中,我們希望能提供程式預估時間以及耗電資訊,
因此VPMU底下,我們設計加入虛擬時間/電力估計元件(VTD/VPD)來達 成此一目的。
4. 擴展QEMU原有的監控功能以支援多核心系統,進一步將我們的PACISS 和VPMU之相關監控介面整合至其中,提供虛擬平台元件的完整控制和 程式除錯。
三、 系統軟硬體平台簡述與資源運用分析
此模擬環境以QEMU模擬器做為實做基礎的軟體平台,硬體對照方面 有工研院的PAC DUO開發平台(圖二),它包含1個MPU(ARM926EJs)和2個 DSPs(ITRI PAC V3X*2),以及128MB DDR2、128MB SDRAM、LCD觸控 螢幕和NOR Flash等周邊,提供強大的多媒體處理能力做為手機等嵌入式 系統的整合開發平台。
圖二、工研院PAC DUO開發板
資源運用方面,我們運用現有開放原始碼的自由軟體:QEMU系統模 擬器和Dinero IV快取(Cache)模擬器,QEMU具有跨平台的特性,它提供了
MPU(ARM, etc...)端的完整模擬(Full System Simulation),而Dinero IV可以 模擬各種不同類型快取的細部行為,使我們能夠得到快取的資訊。
PAC DSP指令模擬器(PAC ISS)為工研院為了驗證PACDSP程式所開 發的直譯式(interpreter)模擬器,他可以模擬PACDSP的各個管線 (pipeline stage)的行為,讓我們可以獲得在DSPs端較為精確的資訊。
我們將PACISS和DineroIV重新改寫並編譯為函式庫,在以主動式裝置 (Master Device)的身分和QEMU作連結,並分別執行在不同的執行緒(thread) 之上, 享受到本機端(host machine)多核心所帶來的優勢。QEMU在執行時 期所產生的記憶體存取紀錄,可以作為DineroIV的輸入,執行快取(Cache) 的模擬。而PACISS則直接以QEMU中所模擬的記憶體的內容,作為其執行 的程式。透過以上的方式,補足其各自不足之處,再加以整合,作為我們 日後開發的基礎。
四、 系統實作內容
QEMU 在 0.10.0 的 版 本 開 始 以 Tiny Code Generator(TCG) 來 實 做 Dynamic Binary Translation的技術,TCG可以說是一個即時的小型compiler,
它並定義了獨立於任何平台的TCG micro ops做為Guest instructions轉到 Host instructions之前的中間代碼(intermediate code)。
整體的指令轉譯過程大致上如圖三所示,首先,Guest instructions將 分組為一個一個的Translation blocks(TB),並會改寫成為TCG micro ops,
此時TCG再將其轉譯為Host instructions並讓host端執行,在這其中許多 compiler使用的最佳化技巧也可以應用在此,了解以後我們就可以在其中 穿插我們需要功能。
圖三、QEMU Dynamic Binary Translation示意圖
此模擬環境實作主要分為QEMU + PAC ISS、QEMU + VPMU和 QEMU Monitor增強三個部分:
QEMU + PAC ISS
我們首先將PAC ISS改寫並編譯為函式庫,在以主動式裝置(Master Device)的身分和QEMU作連結,將PAC ISS與QEMU分別執行在不同的執 行緒(thread)之上,整體架構如圖四所示。
QEMU會負責模擬MPU(ARM926EJs)、主記憶體、以及所有的周邊。
PAC ISS則只負責PACDSP的Instruction Set Simulation和PACDSP內部記憶 體(scratchpad memory)的模擬,PACDSP的control register則由QEMU來模擬,
作為兩者溝通的介面。
我們所以用QEMU內的qdev架構,將PAC ISS封裝成QEMU下的一個 裝置,這麼做的好處是,未來其他任何QEMU所模擬的客戶端機器(guest machine),都可以將PAC ISS掛載在其平台之上,這讓我們的成果在未來更
有擴充性。
將PAC ISS放在不同的執行緒(thread)上,除了可以享受到本機端(host machine)多核心所帶來的優勢外,亦可在不使用PAC ISS時,讓此執行緒/
裝置進入等待的狀態,只讓QEMU模擬的control register繼續發揮功效,直 到客戶端機器(guest machine)要求PACDSP開始執行特定程式才讓其脫離 等待狀態,進入執行狀態。這樣做可以不佔用額外的處理器時間(CPU Time),
降低本機機器(host machine)整體的系統負載。
圖四、QEMU+PAC ISS架構圖
QEMU + VPMU
圖五、VPMU功能示意圖
我 們 將 整 個 系 統 的 執 行 資 訊 , 以 虛 擬 效 能 監 測 單 元 (Virtual Performance Monitoring Unit)作為一個系統效能的處理中心,處理各個模 擬器之間的溝通以及同步,我們可以利用這個虛擬效能監測單元來達到三 個目的:
除錯 (Debugging):利用QEMU單步執行的功能,我們可以以指令為單位 來找出每一個指令執行前以及執行後的系統狀態 (例如:所有的暫存器狀 態、效能指標);另外也可以利用GDB連接上QEMU來進行核心除錯 (kernel debug)。
效能監測 (Performance Accessing):由於QEMU是非常快速的模擬器,我 們一方面修改了QEMU使它支援多種常見的效能資訊的監控 (例如:已執 行的指令數、已執行過的分支指令數等等),又因為它是功能性的模擬器 (functional emulator),另一方面我們藉由加入額外的模擬器來增加一些 QEMU原本沒有模擬的部分(例如:快取、分支模擬器),來達到整個系統 全面的監控。
預估時間/能耗 (Virtual Timing/Power Device):利用虛擬效能監測單元在 執行時期(runtime)所監測到的所有效能資訊,再進一步套用我們所發展的 時間估計方程式(timing formula)以及能耗的方程式(power formula),預測
程式在真實平台執行的時間以及能量的消耗。
圖六、在QEMU中使用效能工具perfctr存取VPMU之效能資訊
QEMU Monitor增強
在QEMU Monitor介面為其本來現有之監控介面,為了能監控我們加 入的PAC ISS和VPMU,我們加入了相關的指令(圖七、圖八),包含如控制 PAC ISS或VPMU執行停止,輸出兩者的狀態資訊,讀取即時效能資訊等,
再配合原有QEMU記憶體監控的功能,組成一個完整的系統資訊回報和除 錯介面。
圖七、QEMU Monitor中的PAC ISS控制介面
圖八、QEMU Monitor中的VPMU控制介面
五、 預期功能與目標
在QEMU的基礎上我們預計達成以下的幾項目標:
1. 整合QEMU和PAC ISS,使這個模擬環境成為等同於實際PAC DUO平台 的1個ARM + N個PAC DSP之對應虛擬平台,也就是提供調整PAC DSP 數量的功能,讓我們能夠模擬多個PAC DSP的執行,以探討未來多核心 系統架構的設計。
2. 在QEMU中提供虛擬效能分析工具(VPMU),包含效能數據回報和除錯 等整合性功能,透過上層之OS driver或library,提供使用者效能分析的 數據,並支援傳統效能分析工具,例如perfctr。
3. 能夠利用我們的時間/能耗方程式來預估出程式在真實平台的執行時間 或是能量的耗損數據。
4. 將我們所提供的各種監控或除錯能力與QEMU原本的QEMU Monitor監 控介面整合。
5. 利用現今快速的多核心桌上型電腦,加速我們多執行緒之虛擬平台的運 作,使模擬許多核心和周邊元件時的速度大幅增加。
六、 設計創意
將多種模擬器以多執行緒的方式整合,能利用現今多核心桌上型電腦的優 勢,達到Multi-Core on Multi-Core的快速模擬優勢。
在虛擬平台中提出一個和實際PAC DUO平台相同的程式執行環境,可以 在缺乏實際平台的情況下開發程式,節省開發成本。
虛擬平台具有一定的擴充性,能模擬1~8顆不等的DSP數量,可以在實體 平台不存在時,做早期的研究分析,縮短軟硬體研發時程。
加入自行開發的虛擬效能分析工具(VPMU),包含效能數據回報和除錯等 整合性功能,讓開發者能快速了解其程式行為。
VPMU底下的虛擬時間/電力估計元件(VTD/VPD),利用實體平台之量測 資料,能在虛擬平台中提供準確的執行時間/電力消耗估計數據。
利用QEMU現有的監控介面,整合PAC ISS執行和VPMU控制介面,使得
虛擬平台具完整的可操作性和可控制性,簡化系統軟體(如Linux Kernel) 之除錯程序。
利用QEMU的週邊裝置介面(qdev)來實做加入PAC ISS和VPMU等裝置,擁
有良好的擴展性,可以用相同模式實做其他的異質多核心系統之虛擬平 台。
七、 可能遭遇之困難點及解決方法
在開發之初,由於PAC DUO是非常新的平台,許多文件、軟體還在 持續開發修改中,因此了解平台特性並且隨時更新是很大的挑戰,我們透 過多與工研院聯繫、參加workshop的方式克服這個困難。
另外剛拿到的平台上只有基本的Android Linux,對於DSP部分的資源 幾乎沒有,因此只能透過平台所附的文件來自己開發一些可用的基礎設施,
例如:在ARM端的DSP驅動程式、程式載入器(Program Loader)或自行移植 Linux Kernel等等,另外對於PAC DSP的硬體上有一些限制,例如:DSP有
屬於自己的區域性記憶體(Local Memory,非快取),可以加速程式存取資 料的速度,但由於這塊記憶體只有64KB的容量,因此如何有效的利用便成 了一個重要的議題,這部分對我們建置虛擬平台和測試benchmark時,都是 必須要注意到的地方。
還有,我們在開發中所使用的軟體,PAC ISS,並非thread-safe,當我 們將這些軟體以多執行緒的方式執行多個實體,可能會發生race condition,
或者多個執行緒共用同一份由全域變數(global variable)所維護的文本 (context),造成執行結果的錯亂,所以我們必須重新修改這些軟體,以確 保其thread-safe。
此外,由於大家在發展的時期,一定會有許多的程式碼不斷修改,要 在這些修改之間達到快速整合且容易除錯,我門則採用自己架設版本控制 系統GIT,它也是目前QEMU官方使用的版本控制方法,不只能夠快速整 合,而且保留所有的版本變更記錄,如果有程式撰寫錯誤,很容易能夠找 出問題。
八、 結論
異質多核心平台架構近年來大量被應用在嵌入式系統上,由於硬體平 台設計日益複雜,其上的軟體開發也更加的有難度。因此若能設計並建構 出一個異質多核心的虛擬平台幫助軟體開發,再加上效能分析和除錯的功 能,必定能對產品的開發有所幫助。
此模擬環境即在QEMU中以多執行緒的方式整合了工研院之PAC ISS,
輔以QEMU原有的Dynamic Binary Translation技術,做為實體PAC DUO開 發板之對照的虛擬平台,能達到遠比ESL層級模擬還要快的執行速度,因 此可以確保網路多媒體手機應用之正常運作;再加上自行設計的虛擬效能 監控分析工具,其下包含除錯(Debugging)、效能數據紀錄(Performance accessing)和虛擬的時間/電力估計元件(VTD/VPD)的功能,能提供開發者
一個快速方便的絕佳虛擬平台,進而加速產品的軟硬體開發或整合測試,
提升其市場競爭力。
九、 參考資料:
• QEMU open source processor emulator - http://wiki.qemu.org/Main_Page
• QEMU wikipedia - http://en.wikipedia.org/wiki/QEMU
• F. Bellard, “QEMU, a fast and portable dynamic translator,” Proceedings of the annual conference on USENIX Annual Technical Conference, Anaheim, CA: USENIX Association, 2005
• Dong H. Ahn and Jeffrey S. Vetter. Scalable analysis techniques for microprocessor performance counter metrics. In Proceedings of the 2002 ACM/IEEE conference on Supercomputing, pages 1–16, Baltimore, Mary-land, 2002. IEEE Computer Society Press.
• Performance counter (perfctr) - http://dontaku.csce.kyushu-u.ac.jp/~satoshi/how_to_use_perfctr.htm
• Tay-Jyi Lin, Chun-Nan Liu, Shau-Yin Tseng, Yuan-Hua Chu, and An-Yeu Wu.
Overview of itri pac project - from vliw dsp processor to multicore computing platform. In VLSI Design, Automation and Test, 2008. VLSI-DAT 2008. IEEE International Symposium on, pages 188--191, April 2008.
• Zhe-Mao Hsu, I-Yao Chuang, Wen-Chien Su, Jen-Chieh Yeh, Jen-Kuei Yang, and Shau-Yin Tseng. System performance analyses on pac duo esl virtual platform. Intelligent Information Hiding and Multimedia Signal Processing, International Conference on, 0:406--409, 2009.