天天看點

gem5與Armv8模拟器的設計原理指導與使用指導

1. 幾個非常重要的概念的了解:

Armv,x86,alpha等是體系結構,三者是屬于平級的東西,其他常見的體系結構還有mips,power,sparc等。

gem5與ARMv8之間的關系:

gem5是計算機體系結構模拟平台,如果非得找一個實體說它是什麼,那它應該是個将cpu記憶體,外設都以對象化形式表示并且希望用最精簡的子產品組合這些對象子產品以實作最理想最複雜功能的晶片,隻不過這個晶片是用軟體設計的,功能有點類似與七巧闆的拼圖,你想拼什麼圖,就去找什麼樣的闆,最終能夠友善快捷的用其支援的cpu模型,記憶體模型,系統模型對象快速組裝出一台用軟體實作的計算機,然後根據用軟體建構的這台虛拟機的運作二進制程式後的trace的内容,分析這個體系結構的指令的存儲過程,存儲内容,運作原理,以及tick周期。是以這個模拟平台通常都被計算機體系結構設計者和研究者廣泛使用。

至于ARMv8模拟器,剛開始學習的時候一直搞不明白ARMV8模拟器和ARMv8之間是什麼關系,總是把這兩個概念混為一談,後來聽了侯老師的講座和龍師兄的講解,查了一些資料,才明白,原來armv8的v不是指虛拟的意思,其本身作為一個獨立整體的計算機體系架構,是和體系結構式平級的,甚至可以這麼說armv8,x86,alpha,隻不過習慣上,業界喜歡将arm作為一個整體的體系架構,armv8是arm推出的一款最新的體系架構,其性能能已在侯老師講座那塊進行了一些簡要說明。

而ARMv8模拟器,其真正的位置應該是和gem5平級,兩者都是計算機體系結構模拟器,兩者的差別是armv8模拟器隻專注于模拟arm或者說armv8體系結構,而gem5模拟器支援的體系結構較多,也支援arm體系結構,隻是尚未實作對于armv8這個新arm架構的模拟。

但是在檢視gem5英文文檔和使用gem5.debug工具的過程中,

在configs/example/se.py 配置腳本中将se.py 變為fs.py的過程中,卻發現提示錯誤指令,而先前的armv8模拟器文檔裡也強調過,我們的armv8模拟器對系統模型的支援隻有se模式,即不支援作業系統運作模式,我不太确定是不是因為這個原因,如果是這個原因的話,gem5和armv8模拟器的關系就清楚了,宏觀上兩者的功能都是相同的,都是為了模拟計算機體系結構,兩者的最大差別就是前者支援的體系結構和系統模型都相對完整,後者實作了對于最新的armv8體系結構模拟,是以嚴格意義上,gem5應該稱為模拟平台,後者稱為模拟器。兩者之間的聯系是,armv8模拟器基于gem5平台開發,由于未實作fs模型支援,在其進行函數系統調用的時候,需借助于gem5平台的系統調用進行模拟。

對于為什麼要選擇gem5這個平台,我至今也不知道該怎麼回答,參考文檔裡面提到是因為結合了M5和gems的優點。而M5是一個優秀的開源的多處理機模拟器,gems則能對計算機體系的存儲層次進行詳細而靈活的模拟,包括對多種不同的chche一直性協定和互聯模型的支援,gem5是m5和gems的一個緊耦合版本,這可能就是對于cpu和記憶體處理資訊要求極為嚴格的計算機體系結構研究者選擇gem5模拟平台的主要原因吧。

      以上就是我對gem5和armv8模拟器這幾天學習和操作實踐的了解,是我自己的一點了解,有什麼了解上偏差,希望大家給我多指點指點,感覺自己學東西特别慢,好多東西也學得不到位,了解不正确,謝謝你們對我的耐心指導和幫助。

2. gem5 操作實踐學習:

gem5操作的指令格式為:<gem5 二進制執行檔案> [gem5  參數項] <模拟器python腳本.py> [python 腳本附加參數項 ]

        學習的時候主要是圍繞gem5 documentation 和243伺服器xshell操作gem.debug 二進制腳本檔案展開。 

 Gem5主要解決我概念上了解和細節上的操作偏差問題,現在主要表述下xshell 學習gem.debug 的過程:

   主要圍繞兩部分内容:

      ./build/ARMV8/gem5.debug -d . --debug-flags=Exec --trace-file=trace_for_test.txt  -h

便可以獲得gem 二進制執行檔案的參數配置資訊,即第一個重點學習的參數項,這一部分參數主要是指定需要trace的資訊,以及trace 檔案的輸出目錄和重定向,這部分操作已能獨立操作,隻是trace到的txt檔案的内容,該怎麼看,怎麼分析,還沒有開始這方面的工作;

./build/ARMV8/gem5.debug -d output/  --debug-flags=Exec,Register,-ExecSymbol  --trace-file=for_this_nice.txt configs/example/se.py -I 5 --maxtime=5 -c trace_hello  --cpu-type=timing -n 4  --caches  –h

便能獲得模拟器python腳本參數配置資訊,即第二個重點學習的參數項,這一部分主要是指定trace armv8 二進制執行檔案的時候應該用那些抽象的諸如cpu,記憶體,系統模式對象來元件系統結構,以運作 –c 後的armv8 二進制檔案。需要說明下的是,-c 後的二進制檔案必須經過aarch64-linux-gnu-ggc  –static  –g  -o [目标檔案] [源檔案] 指令進行靜态編譯生成。  

繼續閱讀