沈凡凡,徐 超,張 軍,何炎祥
(1. 南京審計大學 信息工程學院,江蘇 南京 211815;2. 東華理工大學 軟件學院,江西 南昌 330013;3. 武漢大學 計算機學院,湖北 武漢 430072)
在計算機體系結構課程實驗教學中,緩存體系結構設計采用計算機硬件實驗平臺、實驗箱、開發(fā)板,通過簡單的模擬實驗完成。然而,因為在硬件平臺無法修改已有硬件體系結構,所以要從深層次理解緩存存儲體系結構及其實現(xiàn)原理,僅利用硬件平臺進行實驗是遠遠不夠的,需要借助模擬仿真器進行實驗。
Gem5 是一款優(yōu)秀的計算機系統(tǒng)結構模擬器。為了方便學生快速掌握該模擬器的使用方法,本文在分析Gem5 模擬器緩存存儲體系結構和原理的基礎上,提出多組利用Gem5 模擬器構建緩存存儲體系結構的實驗方法[1-2]。
Gem5 模擬器是一款高度可配置、集成多種指令集和多種CPU 模型的體系結構模擬器[3],它是集M5模擬器[4]和 GEMS 模擬器[5]中最優(yōu)秀的部分而形成的。M5 模擬器是美國密西根大學開發(fā)的模擬架構,主要用于多種指令集和多種CPU 模型的模擬;GEMS模擬器由美國威斯康星大學開發(fā)的,能夠靈活、詳細地模擬存儲器的層次結構,包括緩存一致性協(xié)議和片上網(wǎng)絡等。
Gem5 目前支持多種指令集架構,并能在Alpha、ARM、SPARC 和X86 上進行全系統(tǒng)模擬。Gem5 可以加載操作系統(tǒng),具備模擬亂序執(zhí)行、分支預測、多核多線程、存儲體系結構和片上網(wǎng)絡等多種微體系結構[6-8],支持 classic 和 Ruby 存儲模型,支持 Atomic Simple、Timing Simple、InOrder 和 O3 CPU 模型,可以在全系統(tǒng)模式(full system,F(xiàn)S)和系統(tǒng)調用模式(syscall emulation,SE)下執(zhí)行,如圖1 所示。
圖1 CPU 模型和存儲模型
Gem5 的源代碼遵循BSD 開源協(xié)議,用戶可以修改和重新發(fā)布代碼。Gem5 擁有友好的使用文檔和社區(qū)支持,非常有利于高校學生學習和使用[9]。
圖2 為Gem5 模擬器源代碼結構。build_opts 定義了 ARM、X86 和 RISCV 等體系結構的默認設置。configs 包含一系類模擬器配置腳本文件,主要用Python 編寫,是修改模擬器配置文件參數(shù)的關鍵部分,會經常用到。ext 依賴于Gem5 但不是Gem5 的一部分,一般很少用到。src 是Gem5 源代碼的關鍵部分,包含計算機體系結構各部分的詳細代碼,其中$GEM5_DIR/src/mem/cache 是本文緩存存儲體系實驗所必須掌握的部分,也是需要重點關注的部分。system 描述模擬系統(tǒng)的固件和引導信息。tests 包含回歸測試程序。util 包含常用腳本和一些輔助程序[7,10]。
圖2 Gem5 模擬器源代碼結構
Gem5 編譯安裝成功后,會生成 build 和 m5out文件夾。模擬器運行的測試結果和配置信息將記錄在m5out 文件夾中。
要使用Gem5 模擬器,首先必須理解Gem5 的工作原理和執(zhí)行流程,其次是根據(jù)需要修改對應的模塊。Gem5 初始化函數(shù)調用過程[11]如圖 3 所示。當在模擬器中運行 hello 程序($GEM5_DIR/build/ARM/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/arm/linux/hello)時,Gem5 模擬器執(zhí)行的入口函數(shù)在$GEM5_DIR/src/sim/main.cc 文件中;然后依次調用m5Main 函數(shù)進行初始化,調用PyRun_String 函數(shù)傳入SE 模式和二進制文件;在SE 模式下運行二進制文件,其中涉及 System 函數(shù)和 Simulation.run 函數(shù):System 函數(shù)初始化硬件配置信息,Simulation.run 啟動模擬過程。最后初始化C++構造函數(shù)。
圖3 Gem5 初始化函數(shù)調用過程
若要深入學習和修改某個模塊時,如CPU 或存儲模塊,需要閱讀該模塊代碼,理解其執(zhí)行和訪問流程,根據(jù)需要修改相關代碼完成模擬實驗。
為探討緩存存儲系統(tǒng)的實驗方法,需要重點關注Gem5 模擬器中的$GEM5_DIR/src/mem/cache 文件夾中的文件,包括 tags、replacement_policies、prefetch等描述信息。tags 中描述了組相連的信息;replacement_policies 中描述了緩存替換策略,包括LRU、FIFO 和BIP 等算法;prefetch 描述了緩存數(shù)據(jù)預期的方法。
在緩存模塊中,首先分析cache_blk.hh 文件,理解緩存的組織結構;然后分析base.cc 文件,理解緩存的訪問控制流程;最后分析lru_rp.cc 文件,理解緩存的替換策略的實現(xiàn)方式。在實驗過程中,可以根據(jù)需要修改緩存體系結構以及緩存訪問控制方法。
在Gem5 中,通過參數(shù)命令可以指定CPU 的配置,例如配置 2 核 1 GHz、4 核 2 GHz 的 CPU,涉及-n 和--cpu-clock 選項。
(1)配置 2 核 CPU:$GEM5_DIR/build/ARM/gem5.opt$GEM5_DIR/configs/example/se.py -n 2 --cpu-clock=1 GHz
(2)配置 4 核 CPU:$GEM5_DIR/build/ARM/gem5.opt$GEM5_DIR/configs/example/se.py -n 4 --cpu-clock=2 GHz
在Gem5 中,有2 種方法可以配置緩存:一是在配置文件中直接修改對應的參數(shù)值$GEM5_DIR/configs/common/Caches.py,這種方法比較直觀;二是通過參數(shù)命令指定,比如配置二級緩存的容量和組相聯(lián)度,可通過--l2_size 和--l2_assoc 選項指定,具體如下:
(1)128 KB、8 路組相連。
$GEM5_DIR/build/ARM/gem5.opt$GEM5_DIR/co nfigs/example/se.py--caches --l1d_size=32kB --l1d_assoc=2 --l1i_size=32kB --l1i_assoc=2--l2cache --l2_size=128kB --l2_assoc=8
(2)256 KB、16 路組相連。
$GEM5_DIR/build/ARM/gem5.opt$GEM5_DIR/co nfigs/example/se.py--caches --l1d_size=32kB --l1d_assoc=2 --l1i_size=32kB --l1i_assoc=2 --l2cache --l2_size=256kB --l2_assoc=16
在Gem5 中,可以配置不同的基準測試程序,用于評價實驗的效果。例如采用PARSEC 測試集[12]中的streamcluster,可以采用如下腳本命令實現(xiàn),關鍵選項為--script:
$GEM5_DIR/build/ARM/gem5.opt
$GEM5_DIR/configs/example/fs.py
--kernel=$BINARY_DIR/vmlinux.vexpress_gem5_v1_64--script= $GEM5_DIR/streamcluster_16c_simsmall_ckpts.rcS
以獲取緩存讀操作的訪問信息為例,可通過如下步驟實現(xiàn)。
步驟一: 在文件$GEM5_DIR/src/mem/cache/SConscript 中添加 DebugFlag('myflag');
步驟二: 在文件$GEM5_DIR/src/mem/cache/base.cc 中添加 #include debug/myflag.hh,然后在access 函數(shù)中添加一下語句:
步驟三:在 Gem5 運行命令中添加調試選項—debug-flag=myflag,即可獲取緩存讀操作的訪問信息。
Gem5 模擬器的緩存存儲體系實驗性能測試參數(shù)配置如下:
(1)處理器。配置為 2 核 CPU,ARM 架構,主頻800 MHz,每個CPU 包含,1 個一級私有緩存和1個共享二級緩存。
(2)一級私有緩存。容量32 KB,4 路組相連,訪問時間為1 個周期,LRU 緩存替換算法。
(3)二級共享緩存。容量為512 KB,8 路組相連,訪問時間為8 個周期,LRU 緩存替換算法。
(4)主存。主存大小為256 MB,訪問時間為65個周期。
使用PARSEC 測試集[12]對實驗性能進行了測試。使用simsmall 作為輸入集。
在Gem5 目錄下執(zhí)行如下腳本命令:
在$GEM5_DIR/m5out/stats.txt 文件中記錄著測試程序運行的時間,其結果如表1 所示。
表1 測試程序執(zhí)行時間
從以上測試結果可以看出:每個測試程序所需的執(zhí)行時間不同,x264 執(zhí)行的時間最長,需要4.45 s;blackscholes 執(zhí)行的時間最短,只需要0.37 s。每當修改緩存存儲體系結構時,系統(tǒng)的性能也將隨之改變。因此在實驗的過程中要合理地配置參數(shù)和修改緩存存儲體系結構。
本文提出的基于Gem5 模擬器的緩存存儲體系實驗方法,為計算機存儲系統(tǒng)的學習提供了一種低成本、高效率的實驗操作方案。學生可以在學校的實驗室中安裝 Gem5,也可以離開實驗室在自己的臺式機或筆記本上安裝 Gem5,從而降低了學習門檻,提高了學生實踐的靈活性,為計算機存儲體系結構的理論和實驗教學提供了新途徑。