GEM5是一个非常强大的模拟平台,服务于计算机系统架构相关研究,包括系统级架构和处理器微架构。最近在做GEM5相关的研究工作,顺便在blog上记下学习笔记。本文主要描述怎么正确地在Linux系统上安装和运行GEM5。
安装一些依赖软件
运行GEM5需要一些依赖软件,包括:g++ (4.7版本及以上)、Python (2.5版本及以上)、 SCons (0.98.1版本及以上)、 SWIG (2.0.4版本及以上)、zlib、m4、 protobuf (2.1版本及以上)。
g++一般系统自带,可用 g++ -v
查看版本号。
如果系统没有的话,使用如下命令安装:
sudo apt-get install g++
Python一般系统自带,可用 python --version
查看版本号。
使用以下命令安装SCons:
sudo apt-get install scons
安装后查看版本号:
scons -v
使用以下命令安装SWIG:
sudo apt-get install swig
安装后查看版本号:
swig -version
zlib一般系统自带,使用 whereis zlib
查看安装位置,如果系统没有的话,使用如下步骤安装:
zlib下载地址,解压后安装:
./configure
make
sudo make install
一般系统自带,使用 m4 --veriosn
查看版本,如果系统没有的话,使用以下命令安装m4:
sudo apt-get install m4
protobuf下载地址, 解压后安装:
./configure
make
sudo make install
然后使用如下命令可以查看版本号,检查是否安装完成:
protoc --version
如果报错
protoc: error while loading shared libraries: libprotoc.so.17: cannot open shared object file: No such file or directory
可以参考stackoverflow的解决方案:
sudo ldconfig
sudo apt-get install libprotobuf-dev
sudo apt-get install libgoogle-perftools-dev
运行GEM5
GEM5下载地址,然后解压。或者直接通过命令
hg clone http://repo.gem5.org/gem5
以编译一个RAM处理器为例:
scons build/ARM/gem5.opt
大约二十多分钟后,编译完成。可以使用多线程提高编译速度,如使用8线程(我用这个会出现一些奇怪的错误,用单线程可以,慢就慢点吧):
scons build/ARM/gem5.opt -j8
输入如下命令进行SE测试:
./build/ARM/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/arm/linux/hello
运行结果如下:
gem5 Simulator System. http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.
gem5 compiled Aug 30 2018 17:08:50
gem5 started Aug 30 2018 17:24:11
gem5 executing on ubuntu, pid 30082
command line: ./build/ARM/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/arm/linux/hello
/home/lifan/Downloads/gem5-40c18bb90501/configs/common/CacheConfig.py:50: SyntaxWarning: import * only allowed at module level
def config_cache(options, system):
Global frequency set at 1000000000000 ticks per second
warn: DRAM device capacity (8192 Mbytes) does not match the address range assigned (512 Mbytes)
0: system.remote_gdb: listening for remote gdb on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
Hello world!
Exiting @ tick 2924500 because exiting with last active thread context
可见输出来有Hello world!表示运行成功。(So charming “Hello world!”)
全系统(full system)的模拟比较麻烦,需要下载和配置磁盘镜像。以下以X86系统为例。
1.首先新建一个文件夹用于存储disk image
mkdir full_system_images
cd full_system_images
2.下载X86的disk image, 并解压
wget http://www.m5sim.org/dist/current/x86/x86-system.tar.bz2
tar jxvf x86-system.tar.bz2
3.进入gem5文件夹,修改两个配置文件: SysPaths.py 和 Benckmarks.py
打开SysPaths.py配置disk image的完整路径(本文以/home/full_system_images为例):
vim ./configs/common/SysPaths.py
修改前:
path = [ ’/dist/m5/system’, ’/n/poolfs/z/dist/m5/system’ ]
修改后:
path = [ ’/dist/m5/system’, ’/home/full_system_images’ ]
打开Benchmarks.py,修改image文件名:
vim ./configs/common/Benchmarks.py
修改前:
elif buildEnv['TARGET_ISA'] == 'x86':
return env.get('LINUX_IMAGE', disk('x86root.img'))
修改后:
elif buildEnv['TARGET_ISA'] == 'x86':
return env.get('LINUX_IMAGE', disk('linux-x86.img'))
4.运行,输入如下命令:
./build/X86/gem5.opt ./configs/example/fs.py