The gem5 Simulator
阿新 • • 發佈:2018-11-18
The gem5 Simulator
- 摘要:
- gem5結合了M5和GEMS兩者的最好的方面,M5提供了高度可配置的模擬框架,支援多種ISAs和CPU模型;GEMS補充了M5的特性,提供了詳細而靈活的記憶體系統,包括多種cache 一致性協議和互連模型
- gem5支援的商業ISAs:ARM, ALPHA, MIPS, POWER, SPARC, X86,並且支援在x86,ARM,ALPHA上啟動linux
- 貢獻單位:AMD, ARM, HP, MIPS, Princeton, MIT, Michigan大學,Texas大學,Wisconsin大學
- gem5的三個目標:靈活,可用性高,高度協作
- 靈活性:好的模擬器的基礎。gem5提供了許多的功能和元件,涵蓋了廣泛的速度和精度之間的權衡
- CPU模型:gem5提供了四種CPU模型,對應著不同等級的速度和精度。AtomicSimple是一個最小的IPC為1的CPU模型(單週期處理器);TimeingSimple類似於前者,但是增加了儲存訪問的延遲的模擬;InOrder是一個按序流水線CPU模型;O3是一個亂序流水線模型。後兩者都是execute-in-execute(指令的執行只在執行階段,此時所有的相關都已經被解決)的設計
- System模式:每個執行驅動的CPU模型都支援兩種模式。SE(系統呼叫模擬)模式通過模擬大部分的系統呼叫,避免了對外設和OS進行建模的需要;FS(全系統)模式對一個完整系統,包括OS和外設,進行了建模,支援執行使用者和核心指令
- 儲存系統:支援兩種儲存系統模型:classic和ruby。classic模型(M5)快速,配置簡單;ruby模型(gems)靈活,精確,支援cache一致性
- 可用性:gem5的許可證是基於BSD的,所以很友好
- 高度協作:gem5社群非常活躍,有很多協作技術可以促進gem5的使用和開發。
- 靈活性:好的模擬器的基礎。gem5提供了許多的功能和元件,涵蓋了廣泛的速度和精度之間的權衡
- gem5的設計特點
- 面對物件的設計:提供了非常好的靈活性
- 每個主要的模擬元件都是SimObjects,共享了配置、初始化、統計和序列化(檢查點)的公共行為
- SimObjects包括了具體的硬體元件,例如cores,caches,互連元素和外設,也包括了一些抽象實體,例如用於系統呼叫模擬的工作負載及其關聯的流程上下文
- 所有的SimObject物件都由兩種類表示,python類和c++類
- Python類的定義指定了SimObject的引數,並且可以在配置指令碼檔案中使用
- C++類包含了SimObject的狀態和其它行為,同時包括了關鍵效能的模擬模型
- 整合python:15%的python程式碼。python程式碼主要包括SimObjects的初始化,配置和模擬控制
- 模擬器在啟動時立即開始執行python程式碼
- 標準的main函式使用python編寫,所有的命令列處理和啟動程式碼都是python程式碼
- 特定領域的語言
- gem5提供了兩種特定領域的語言,一種用於描述ISA(M5),另一種用於描述cache的一致性協議(GEMS)
- ISA DSL:用於統一二進位制指令的解碼和它們的語義規範。gem5通過使用一個通用的C++基類來描述指令,從而實現了ISA的獨立。每種ISA會重新基類中繼承的方法,例如execute()。ISA描述語言允許使用者簡潔地指定所需的c++程式碼。
- cache coherence DSL:SLICC是一種DSL,用於靈活的實現cache一致性協議。SLICC將cache,mem,DMA控制器定義為單獨的per-memory-block的狀態機,這些狀態機組合稱為整個的協議。gem5中的SLICC將協議定義為一組狀態、事件、轉換和操作,同時將狀態機特定的邏輯和協議無關的元件(例如cache)繫結在一起。gem5的SLICC會自動生成python和c++檔案,同時也支援區域性變數,以簡化程式設計提高效能
- 標準的介面:埠介面和訊息緩衝介面
- 埠介面:連線記憶體物件,包括cpu和caches,caches到匯流排,匯流排到外設和記憶體。該介面支援三種機制來訪問資料,1) timing模式,用來建模帶有詳細時序的記憶體訪問,會有request和response的訊息機制;2) atomic模式,用來獲取時序資訊,但是沒有訊息機制,狀態會直接發生變化;3) 功能模式,儲存操作不會改變時序資訊
- 訊息緩衝介面:Ruby使用埠介面來連線cpu和外設,同時使用訊息緩衝介面連線Ruby內部物件。兩個介面非常類似
- 面對物件的設計:提供了非常好的靈活性
- gem5的模擬能力
- ISAs:支援多種ISAs,同時不需要為每一種ISAs設定一種專用的CPU模型和儲存模型
- 執行模式:SE/FS。
- SE模式中,當程式執行系統呼叫時,gem5會捕捉到,同時模擬呼叫,通常是傳遞給主機作業系統。SE模式下,沒有執行緒排程器,執行緒必須靜態的對映到cores,因此會限制多執行緒應用
- FS模式中,gem5提供了一個適合執行作業系統的裸機環境,包括中斷,異常等,並不是所有ISAs都支援此模式。FS相對於SE,精度更高,可以執行更多型別的負載。
- CPU模型:AtomicSimple,TimingSimple,InOrder,O3。前兩者是非流水線,一週期完成一條指令。在InOrder模式下,可以配置硬體支援的執行緒數量。在O3模式下,可以支援超標量結構和SMT。
- 快取一致性協議:支援多種型別的基於失效的一致性協議,從監聽到目錄協議,以及兩者之間的一些點
- cache的一致性邏輯和儲存系統中的其它部分是分開的
- 支援的一致性協議的基本單位是cache-block
- SLICC目前支援AMD Opteron的基於廣播的一致性協議和CMP的目錄協議
- 互連網路:Ruby記憶體模型支援大量的互連拓撲結構,同時包括兩種不同的網路模型。元件之間的連結使用一個簡單的python檔案宣告,然後通過最短路徑分析建立路由表。在確定連結和路由表後,根據不同的網路模型進行實現。兩種網路模型為:
- Simple網路模型只對連結,路由延遲和鏈路頻寬,並沒有對路由器資源爭用和流量控制建模
- Garnet網路模型對路由建立了詳細的模型,包括相關的資源競爭和流量控制
- 外設:包括簡單的定時器到複雜的網路介面控制器。通過使用基類來封裝公共裝置介面,以避免程式碼重複,簡化實現。
- 多系統建模:例如通過網路互連的系統,使用TCP/IP通訊。