日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gem5和NVM的搭建(完整版)

發布時間:2023/12/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gem5和NVM的搭建(完整版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搭建gem5和NVM

搭建環境

操作系統 Ubuntu Server 16.04.1 LTS 64位 CPU 1核 內存 2GB 公網帶寬 1Mbps

主要參考資料

主要參考的博客

資源下載

由于hg掛了,而且我用的是云機,很多國內的流量無法clone,只好下好了上傳,這里整理了過程中用到的所有資源

步驟流程

路徑說明

+-- nvmain | +-- gem5 | +-- fs-image | +-- benchmark它們是同一路徑!!!

正式開始

安裝nvm

wget https://bitbucket.org/mrp5060/nvmain/get/9c0e87b164bc.zip -O nvmain.zip unzip nvmain.zip mv mrp5060-nvmain-9c0e87b164bc nvmain
安裝scon
安裝編譯工具scons sudo apt-get install scons
編譯NVMain

編譯NVMain,其中編譯的類型可以選擇fast|debug|prof三種的任意一種,這里我們選用fast

scons --build-type=fast

這里編譯是一定會報錯的,但是要編譯了才有build文件,別直接到下面去找文件改

如果在編譯的過程中,報了如下的錯誤,無須緊張,這只是個小問題,是因為我們暫時還沒有用到gem5,所以只需將這個報錯的那一行代碼注釋即可.

scons: Reading SConscript files ... ImportError: No module named gem5_scons:File "/home/greek/master/experiment/nvmain/SConstruct", line 253:SConscript(joinpath(root, 'SConscript'), variant_dir=build_dir)File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:return method(*args, **kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:return _SConscript(self.fs, *files, **subst_kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 256:call_stack[-1].globals)File "/home/greek/master/experiment/nvmain/build/SConscript", line 36:from gem5_scons import Transform

具體的解決辦法是將nvmain/build/SConscript中的第36行注釋

# from gem5_scons import Transform # 這行注釋

注意!我們后面還要修改回來,后面會講,這里只是為了讓你心里有譜

解決錯誤之后,再重新編譯

nvm測試

指定配置文件,指定測試文件,周期, 命令的格式為: ./nvmain CONFIG_FILE TRACE_FILE [Cycles [PARAM=value]]
我們這里的測試命令如下

./nvmain.fast Config/PCM_ISSCC_2012_4GB.config Tests/Traces/hello_world.nvt 1000000

測試結果

i0.defaultMemory.channel0.FRFCFS-WQF.maximum_reads_during_drain 0 i0.defaultMemory.channel0.FRFCFS-WQF.starvation_precharges 4704 i0.defaultMemory.channel0.FRFCFS-WQF.averageLatency 86.4423 i0.defaultMemory.channel0.FRFCFS-WQF.averageQueueLatency 2088.42 i0.defaultMemory.channel0.FRFCFS-WQF.averageTotalLatency 2174.86 i0.defaultMemory.channel0.FRFCFS-WQF.measuredLatencies 26485 i0.defaultMemory.channel0.FRFCFS-WQF.measuredQueueLatencies 26485 i0.defaultMemory.channel0.FRFCFS-WQF.measuredTotalLatencies 26485 i0.defaultMemory.channel0.FRFCFS-WQF.simulation_cycles 1000000 i0.defaultMemory.channel0.FRFCFS-WQF.wakeupCount 54116 i0.defaultMemory.totalReadRequests 13933 i0.defaultMemory.totalWriteRequests 12608 i0.defaultMemory.successfulPrefetches 0 i0.defaultMemory.unsuccessfulPrefetches 0 Exiting at cycle 5000000 because simCycles 5000000 reached. Note: 57 requests still in-flight.

安裝gem5

在Ubuntu上,您可以使用以下命令安裝所有必需的依賴項。要求詳細說明如下。

官網說明

安裝依賴(若干)
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python

正常情況下這些東西不是全都做了鏡像的(我只測試了阿里和騰訊云),但是保證基礎的c++等(詳情見文檔)是必要的boost裝了會好很多systemc可以用了

安裝依賴庫protobuf-compiler
sudo apt-get install protobuf-compiler
提前做好措施 (因為內存不足 使用交換分區來解決)

原因其實也很簡單:學生機只有1G,必定是不夠的,編譯過程中常常會自動kill

解決方法描述

sudo dd if=/dev/zero of=/swapfile bs=64M count=16 #count的大小就是增加的swap空間的大小,64M是塊大小,所以空間大小是bs*count=1024MB sudo mkswap /swapfile #把剛才空間格式化成swap格式 sudo swapon /swapfile #使用剛才創建的swap空間

按理來說是應該還回去的,但是考慮到后面經常掛,就不還了

解壓并重命名
sudo unzip gem5-master.zip ubuntu@VM-0-5-ubuntu:~/skywf$ ls config-x86.tar.bz2 gem5-master.zip mrp5060-nvmain-7be1ae0275cb.zip nvmain.zip zlib-1.2.11.tar.gz gem5-master m5_system_2.0b3.tar.bz2 nvmain x86-system.tar.bz2 ubuntu@VM-0-5-ubuntu:~/skywf$ mv gem5-master gem5 ubuntu@VM-0-5-ubuntu:~/skywf$ ls config-x86.tar.bz2 gem5-master.zip mrp5060-nvmain-7be1ae0275cb.zip nvmain.zip zlib-1.2.11.tar.gz gem5 m5_system_2.0b3.tar.bz2 nvmain x86-system.tar.bz2
開始編譯

漫長的等待,大概1個小時吧

$<2> [ CXX] X86/cpu/kvm/x86_cpu$<2>.cc$<2> -> $<2>.o$<2> $<2> [ LINK] $<2>$<2> -> $<2>X86/cpu/kvm/lib.o.partial$<2> $<2> [ CXX] X86/base/date$<2>.cc$<2> -> $<2>.o$<2> $<2> [ LINK] $<2>$<2> -> $<2>X86/gem5.opt$<2> scons: done building targets.

說明編譯好了

Gem5的SE測試
  • 用來運行單個應用,一系列指令在MP/SMT上
  • 建模用戶可見的ISA和常見的系統調用
  • 模擬系統調用,通過調用主機操作系統
  • 簡單的地址翻譯,沒有調度
  • ./build/X86/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/x86/linux/hello
    Gem5的FS測試

    FS測試

    能夠啟動完整的操作系統 建模硬件設備 中斷,異常,故障處理函數

    參考下載的網址

    若沒有使用我提供的包,需要自己下載

    下載X86全系統對應的文件,一定要下載自己編譯架構的對應文件

    部分架構存在不可知的bug,沒事兒別去探險

    wget http://www.m5sim.org/dist/current/x86/x86-system.tar.bz2

    解壓文件,同時將解壓后的文件夾放入同一目錄fs-image

    tar vxfj x86-system.tar.bz2 mkdir fs-image mv binaries fs-image mv disks fs-image

    下載alpha對應的全系統文件,里面包含linux-bigswap2.img,這個是運行的一個必須文件.下載之后,解壓文件,同時將文件拷貝到fs-image/disks目錄下,可以理解為專門存放鏡像文件的目錄

    wget http://www.m5sim.org/dist/current/m5_system_2.0b3.tar.bz2 tar vxfj m5_system_2.0b3.tar.bz2 cp m5_system_2.0b3/disks/linux-bigswap2.img fs-image/disks
    若使用了我提供的包,直接解壓即可
    sudo tar vxfj x86-system.tar.bz2 mkdir fs-image sudo mv binaries fs-image sudo mv disks fs-image sudo tar vxfj m5_system_2.0b3.tar.bz2 sudo cp m5_system_2.0b3/disks/linux-bigswap2.img fs-image/disks

    運行FS模擬

    ./build/X86/gem5.opt configs/example/fs.py

    報了如下的錯誤,這里因為腳本代碼中默認了鏡像為x86root.img

    Traceback (most recent call last):File "<string>", line 1, in <module>File "build/X86/python/m5/main.py", line 457, in mainexec(filecode, scope)File "configs/example/fs.py", line 342, in <module>test_sys = build_test_system(np)File "configs/example/fs.py", line 93, in build_test_systemcmdline=cmdline)File "/home/ubuntu/skywf/gem5/configs/common/FSConfig.py", line 622, in makeLinuxX86SystemmakeX86System(mem_mode, numCPUs, mdesc, self, Ruby)File "/home/ubuntu/skywf/gem5/configs/common/FSConfig.py", line 548, in makeX86Systemdisks = makeCowDisks(mdesc.disks())File "/home/ubuntu/skywf/gem5/configs/common/Benchmarks.py", line 63, in disksreturn [env.get('LINUX_IMAGE', disk('x86root.img'))]File "/home/ubuntu/skywf/gem5/configs/common/SysPaths.py", line 69, in __call__.format(self.environment_variable)) IOError: Can't find system files directory, check your M5_PATH environment variable
    解決辦法

    這里有兩種解決辦法,推薦使用第二種:

  • 修改代碼gem5/configs/common/Benchmarks.py中,第63行,修改為如下,其中linux-86.img為fs-image/disks目錄下的鏡像文件
  • return env.get('LINUX_IMAGE', disk('linux-x86.img'))
  • 直接使用參數指定鏡像文件,使用參數 --disk-image以及–kernel
  • ./build/X86/gem5.opt configs/example/fs.py --disk-image linux-x86.img --kernel x86_64-vmlinux-2.6.22.9 指定M5_PATH路徑,系統會自動從M5_PATH路徑中disks和binaries兩個目錄尋找指定的鏡像文件和對應的內核文件.

    注意此處需要指定M5_PATH
    注意此處x86有大寫有小寫

    其中指定M5_PATH我提供了兩種方式,推薦使用第二種

  • 修改.basrhc文件,在文件的末尾加入M5_PATH的路徑
  • vim ~/.bashrc export M5_PATH=$M5_PATH:/home/ubuntu/skywf/fs-image source ~/.bashrc

    注意這里的路徑有ubuntu,和centos不太一樣

  • 直接在運行命令中動態添加環境變量

    M5_PATH=/home/skywf/fs-image ./build/X86/gem5.opt configs/example/fs.py --disk-image linux-x86.img --kernel x86_64-vmlinux-2.6.22.9

    注意上面的skywf換成自己的用戶名

    linux-x86.img為fs-image/disks/目錄下文件, x86_64-vmlinux-2.6.22.9為fs-image/binaries/目錄下文件,我看網上很多教程將x86_64-vmlinux-2.6.22.9改名為vmlinux,這步的話其實意義不是特別大,不過改了也方便,我這里暫不做修改

    可能遇到的問題
  • 出現Output file stream not open”: Error while running SE for X86 using gem5
    原因是你沒有文件操作的權限,可以通過sudo改變777或者直接sudo命令解決
    問題解析
  • Traceback (most recent call last): File "<string>", line 1, in <module> File "build/X86/python/m5/main.py", line 457, in main exec(filecode, scope) File "configs/example/fs.py", line 342, in <module> test_sys = build_test_system(np) File "configs/example/fs.py", line 93, in build_test_system cmdline=cmdline) File "/home/ubuntu/skywf/gem5/configs/common/FSConfig.py", line 622, in makeLinuxX86System makeX86System(mem_mode, numCPUs, mdesc, self, Ruby) File "/home/ubuntu/skywf/gem5/configs/common/FSConfig.py", line 548, in makeX86System disks = makeCowDisks(mdesc.disks()) File "/home/ubuntu/skywf/gem5/configs/common/Benchmarks.py", line 59, in disks return [disk(diskname) for diskname in self.disknames] File "/home/ubuntu/skywf/gem5/configs/common/SysPaths.py", line 69, in __call__ .format(self.environment_variable)) IOError: Can't find system files directory, check your M5_PATH environment variable
  • M5_PATH路徑設置還是有問題,這里有點玄學我還沒弄懂,不過用指定動態變量可以解決暫時按下不表。

    連接模擬系統

    利用gem5系統自帶的一個連接程序,在gem5/util/term/目錄中,先進行make,生成可執行文件

    cd util/term/ make./m5term localhost 3456

    [推薦使用] 直接利用telnet連接系統

    telnet localhost 3456

    騰訊云默認沒有放開這個端口,請到安全組里面自己打開
    出現下面這個代表成功連上了

    usbcore: registered new interface driver usbhid drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver oprofile: using timer interrupt. TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 10 IPv6 over IPv4 tunneling driver NET: Registered protocol family 17 EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended VFS: Mounted root (ext2 filesystem). Freeing unused kernel memory: 232k freed INIT: version 2.86 booting mounting filesystems... loading script... Script from M5 readfile is empty, starting bash shell... (none) / #
    退出

    這里我依舊使用兩種方法,推薦使用第一種方法

    在連接的命令行中輸入 m5 exit
    在連接的命令行中輸入 ~.

    NVMain和Gem5的集成環境

    為啥打補丁

    Gem5補丁

    首先為了消除NVMain和Gem5版本之間的差異,所以首先需要給Gem5打上補丁.(別聽到補丁就覺得畏懼,一開始我有這種感覺,其實后面發現真的沒啥).

    開打補丁

    手動補丁,直接查看補丁的內容,手動修改文件,如下所示為補丁的內容

    補丁文件已經在nvmain/patches/gem5目錄中給出,nvmain2-gem5-11688+這個是補丁文件的名字,在nvmain/patches/gem5中,以后可能是其他的版本,換成自己的版本補丁名字即可.

    ubuntu@VM-0-5-ubuntu:~/skywf/nvmain/patches/gem5$ ls nvmain2-gem5-11688+ # HG changeset patch # Parent 78ef8daecd81de0c392034809b3bc155396bf983 gem5: Updated for gem5 revisions 10789+diff --git a/configs/common/Options.py b/configs/common/Options.py --- a/configs/common/Options.py +++ b/configs/common/Options.py @@ -63,6 +63,12 @@# being used, and consequently no CPUs, but rather various types of# testers and traffic generators.def addNoISAOptions(parser): + # Check for extra nvmain configuration override options + for arg in sys.argv: + if arg[:9] == "--nvmain-": + parser.add_option(arg, type="string", default="NULL", + help="Set NVMain configuration value for a parameter") +parser.add_option("-n", "--num-cpus", type="int", default=1)parser.add_option("--sys-voltage", action="store", type="string",default='1.0V',

    其實說白了就是增加了三行,咱們手動加上就可以了

    只需在gem5/configs/common/Options.py的第82行之后,加入如下三行(有可能是89行,取決于編輯器為vim or nano)
    反正只要是在addnoisaoptions下就可以了

    for arg in sys.argv:if arg[:9] == "--nvmain-":parser.add_option(arg, type="string", default="NULL", help="Set NVMain configuration value for a parameter")

    NVMain和Gem5混合編譯

    在gem5文件夾下(搞到半夜頭昏昏在nvmain下弄了半天氣死了)

    scons EXTRAS=../nvmain build/X86/gem5.opt

    發現報錯

    NameError: global name 'Transform' is not defined:File "/home/ubuntu/skywf/gem5/SConstruct", line 1269:SConscript('src/SConscript', variant_dir = variant_path, exports = 'env')File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:return method(*args, **kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:return _SConscript(self.fs, *files, **subst_kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 260:exec _file_ in call_stack[-1].globalsFile "/home/ubuntu/skywf/gem5/build/X86/SConscript", line 618:SConscript(joinpath(root, 'SConscript'), variant_dir=build_dir)File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:return method(*args, **kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:return _SConscript(self.fs, *files, **subst_kw)File "/usr/lib/scons/SCons/Script/SConscript.py", line 260:exec _file_ in call_stack[-1].globalsFile "/home/ubuntu/skywf/gem5/build/X86/nvmain/SConscript", line 88:MakeInclude('SimInterface/Gem5Interface/Gem5Interface.h')File "/home/ubuntu/skywf/gem5/build/X86/nvmain/SConscript", line 85:include_action = MakeAction(MakeIncludeAction, Transform("MAKE INC", 1))

    這是因為之前我們刪除了一行,現在還原

    sudo nano nvmain/build/SConscript

    好了接下來又是等待

    收獲檢驗

    測試,其中混合編譯成功的一個重要標志是可以使用–mem-type=NVMainMemory參數來指定主存為NVM

    M5_PATH=/home/hsc/fs-image ./build/X86/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/x86/linux/hello --caches --l2cache --mem-type=NVMainMemory --nvmain-config=../nvmain/Config/PCM_ISSCC_2012_4GB.config

    只要你出現這個,就證明你自己的工作ok了

    i0.defaultMemory.channel0.FRFCFS-WQF.maximum_read_spacing 0 i0.defaultMemory.channel0.FRFCFS-WQF.total_readqueue_size 0 i0.defaultMemory.channel0.FRFCFS-WQF.average_predrain_readqueue_size 0 i0.defaultMemory.channel0.FRFCFS-WQF.minimum_predrain_readqueue_size 10000000000 i0.defaultMemory.channel0.FRFCFS-WQF.maximum_predrain_readqueue_size 0 i0.defaultMemory.channel0.FRFCFS-WQF.total_reads_during_drain 0 i0.defaultMemory.channel0.FRFCFS-WQF.average_reads_during_drain 0 i0.defaultMemory.channel0.FRFCFS-WQF.minimum_reads_during_drain 10000000000 i0.defaultMemory.channel0.FRFCFS-WQF.maximum_reads_during_drain 0 i0.defaultMemory.channel0.FRFCFS-WQF.starvation_precharges 0 i0.defaultMemory.channel0.FRFCFS-WQF.averageLatency 0 i0.defaultMemory.channel0.FRFCFS-WQF.averageQueueLatency 0 i0.defaultMemory.channel0.FRFCFS-WQF.averageTotalLatency 0 i0.defaultMemory.channel0.FRFCFS-WQF.measuredLatencies 0 i0.defaultMemory.channel0.FRFCFS-WQF.measuredQueueLatencies 0 i0.defaultMemory.channel0.FRFCFS-WQF.measuredTotalLatencies 0 i0.defaultMemory.channel0.FRFCFS-WQF.simulation_cycles 1188 i0.defaultMemory.channel0.FRFCFS-WQF.wakeupCount 0 i0.defaultMemory.totalReadRequests 0 i0.defaultMemory.totalWriteRequests 0 i0.defaultMemory.successfulPrefetches 0 i0.defaultMemory.unsuccessfulPrefetches 0

    來來回回折騰了十幾次,趕緊買個臺式機安裝吧

    總結

    以上是生活随笔為你收集整理的gem5和NVM的搭建(完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。