gem5模拟器使用介绍(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
gem5模拟器使⽤介绍(⼀)
gem5简介:
关于gem5的详细介绍,其官⽅论坛上有,这⾥不再详述,给出重点的总结:
⼀、gem5模拟器是⼀款⾼度可配置、集成多种ISA和多种CPU模型的体系结构模拟器,它是结合了M5和GEMS中最优秀的部分⽽形成的。
⼆、gem5的功能是⾮常强⼤的,它⽀持:
1、SE和FS两种模式的系统模型(其中FS模式的系统模型对于典型的交互式应⽤下系统性能的测试是很有⽤的);
2、从简单到复杂分别是Atomic、Timing、In- order、O3(Out of Order)的四种CPU模型;
3、Classic和Ruby两种存储器模型。
gem5编译过程:
(这⼀部分参考了部分官⽹和⽹上前辈的资料,补充了⾃⼰实践中的思考)软硬件环境:intel(64)+ubuntu12.04(64)+gem5-stable
gem5模拟器的安装过程可以分为两个阶段:第⼀个阶段是下载gem5的源码包(1)并配置安装gem5的环境(2、3);第⼆个阶段是根据⾃⼰模拟的需求选择相关的选项或这⾃⼰创建脚本,利⽤安装好的⼯具对gem5源码包进⾏编译安装(4)并进⾏调试(5)。
1、下载gem5源代码包
在gem5的官⽹(/Download)上⾯提供了最新版本的和稳定版本的gem5源码包都可以下载安装,⼀般选⽤stable版本的gem5源码包进⾏下载安装。
2、安装g++编译器,需要注意版本(g++4.5)
为了对gem5源码包和以后需要在gem5上运⾏的C和C++程序进⾏编译需要合适版本的g++,推荐使⽤g++4.5版本的。
3、依次安装python(version 2.4 - 2.7)、scons(version 0.98.1 or newer.)、swig(version 1.3.34 or newer)、zlib、m4这些gem5所依靠的⼯具和环境。
gem5是连接到python解析器的因此需要python的头⽂件和⼀些共享库,所以必须安装python(版本要⾼于2.4,安装前可以查看系统是否已经⾃带,若⾃带则不需要安装);
gem5的安装是通过scons⼯具完成的,因此需要安装scons(版本在0.98.1之上)。
注意scons的安装与其他⽂件安装的区别(解压即可)。
其他的swig、zlib、m4也是安装gem5必不可少的⼯具。
4、构建gem5模拟器,可以选择不同处理器的配置(X86、ARM、ALPHA)gem5的构建是通过scons⼯具来完成的,可以通过进⼊解压gem5源⽂件的⽬录运⾏下⾯的命令来完成构建:
python scons.py <build dir>/<configuration>/<target> (1)
具体的例⼦如:
python scons.py build/ARM/m5.opt (2)
说明:其中<build dir>项指明了构建gem5模拟器的⽬录(对应与2中的build,当然也可以指向不同的⽬录);
<configuration>项指明了对构建模拟器的配置信息包括指令集结构、cpu模型等该项对应于(2)中的ARM(这是build_opts ⽬录下⼀个配置⽂件的名称)在以(2)的⽅式的构建过程中利⽤ARM⽂件所指明的指令集结构、cpu模型等的配置信息进⾏了构建,这是在初次构建的过程中所使⽤的⽅法,在之后的模拟中可以通过在构建项后⾯加选项的⽅式来改变模拟器的配置;<target>项指明了要构建的gem5的⼆进制⽂件,申明了所要⽤到的编译器标志集(对编译器的配置以产⽣不同的2进制⽂件),不同的不同的⽂件具有不同的特点和优势,现在可⽤的类别有:gem5.debug, gem5.opt, gem5.fast, gem5.prof and gem5.perf。
他们各⾃的特点如下:
gem5.debug has optimizations turned off. This ensures that variables won't be optimized out, functions won't be
unexpectedly inlined, and control flow will not behave in surprising ways. That makes this version easier to work with in tools like gdb, but without optimizations this version is significantly slower than the others. You should choose it when using tools like gdb and valgrind and don't want any details obscured, but other wise more optimized versions are recommended.
gem5.opt has optimizations turned on and debugging functionality like asserts and DPRINTFs left in. This gives a good balance between the speed of the simulation and insight into what's happening in case something goes wrong.
This version is best in most circumstances.
gem5.fast has optimizations turned on and debugging functionality compiled out. This pulls out all the stops
performance wise, but does so at the expense of run time error checking and the ability to turn on debug output. This version is recommended if you're very confident everything is working correctly and want to get peak performance from the simulator.
gem5.prof is similar to gem5.fast but also includes instrumentation that allows it to be used with the gprof profiling tool.
This version is not needed very often, but can be used to identify the areas of gem5 that should be focused on to improve performance.
gem5.perf also includes instrumentation, but does so using google perftools, allowing it to be profiled with google-pprof. This profiling version is complementary to gem5.prof, and can probably replace it for all Linux-based systems.总结如下表:
Binary name Optimizations Run time debugging support Profiling support
gem5.debug X
gem5.opt X X
gem5.fast X
gem5.prof X X
gem5.perf X X
上述(2)命令可以构建⼀个体系结构为ARM⼆进制为.opt类型的模拟器。
5、测试例⼦代码
在gem5模拟器的构建⼯作完成之后就可以对所构建的gem5模拟器进⾏测试了。
gem5 模拟器可以在se和fs两种模式下进⾏模拟,其中fs模式的模拟需要在所模拟的硬件上⾯加载操作系统来进⾏全系统的模拟,⽽se模式的模拟则不需要加载操作系统,为了检测⾃⼰的gem5模拟器是否已经正确配置只需要进⾏se模式的模拟即可。
其具体的命令形式如下:
<gem5 binary> [gem5 options] <simulation script> [script options] (3)
该命令由四项构成,其中的<gem5 binary>项指明了所构建的gem5模拟器所在的⽬录,[gem5 options]指明了⼆进制⽂件的选项(可以在该位置添加-h标记来列出所有的选项),<simulation script>指明了所⽤到的配置脚本[script options]项是需要传递到配置脚本的选项可以通过在该位置添加-h标记来列出所有可⽤的选项。
⼀个具体的命令如下:
build/ARM/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/arm/linux/hello (4)
(4)式中的各项对应于(3)式中的各项依次是,构建的gem5模拟器所在的⽬录、所⽤到的配置脚本的具体位置(包括完整的路径)、需要传递到配置脚本的选项(这⾥-c的意义是让后⾯指出的⼆进制⽂件以se模式运⾏)后⾯所跟的即为到⼆进制⽂件的完整⽬录。
运⾏(4)式若能得到如下所⽰的输出,则说明整个gem5模拟器的构建是正确的:
gem5 Simulator System.
gem5 is copyrighted software; use the --copyright option for details.
gem5 compiled Mar 19 2013 13:48:21
gem5 started Apr 1 2013 09:27:46
gem5 executing on ny-OptiPlex-7010
command line: build/ARM/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/arm/linux/hello
Global frequency set at 1000000000000 ticks per second
0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
Hello world!
hack: be nice to actually delete the event here
Exiting @ tick 3107500 because target called exit()
下⾯给出具体的安装步骤
gem5:到/Download下载stable版本源代码包。
g++: 使⽤g++ 4.5版本,不要使⽤4.6,否则会出现编译⽆法通过!!
可以通过命令:
[sudo apt-get install g++-4.5
sudo rm /usr/bin/g++
sudo ln -s /usr/bin/g++-4.5 /usr/bin/g++]
python:版本2.4或更⾼[⼀般系统⾃带]
SCons:版本0.98.1或更⾼。
***注:我使⽤的是scons-local包。
***
/projects/scons/files/
SWIG:版本1.3.34。
***注意:不要太⾼的版本,否则需要Perl⽀持。
***
/
zlib:最近的版本。
/
m4:宏处理器。
/software/m4/
官⽅说明,参见:/Compiling_M5
假设将这些下载的⽂件放在⽤户主⽬录 gem5 下⾯。
编译gem5之前必须先安装这些必要的⽂件包。
每个包⾥都有⼀个install⽂件说明了安装了⽅法,基本就是三部曲。
解压gem5源⽂件:
bzip2 -d gem5-stable-1.tar.bz2
假设将gem5解压后的⽂件夹重命名为:gem5-stable
%-------------------------------------------------------------------------------%
安装zlib:
解压下载的压缩包:
tar -xzvf zlib-1.2.7.tar.gz
进⼊解压之后的⽂件夹 zlib-1.2.7
cd zlib-1.2.7
执⾏命令:
./configure
sudo make install
%-------------------------------------------------------------------------------%
安装SWIG:(注意版本!)
解压下载的压缩包:
tar -xzvf swig-1.3.34.tar.gz
进⼊解压后的⽂件夹:
cd swig-1.3.34
执⾏命令:
./configure
make
sudo make install
%-------------------------------------------------------------------------------%
安装M4:
解压下载的压缩包:
tar -xzvf m4-latest.tar.gz
进⼊解压之后的⽂件夹 m4-1.4.16
cd m4-1.4.16
执⾏命令:
./configure
make
sudo make install
%-------------------------------------------------------------------------------%
安装scons:
Scons的安装很简单,只需要将scons-local-2.2.0.tar.gz解压
tar -xzvf scons-local-2.2.0.tar.gz
将解压后的⽂件全部拷贝到gem5-stable中,得到结果如下图:
%-------------------------------------------------------------------------------%
编译:
进⼊gem5-stable⽂件夹:
cd gem5-stable
执⾏:
python scons.py build/<arch>/m5.<binary>
指定编译的选项,及⽬标⽂件,例如:
python scons.py build/ALPHA/m5.opt
如果出现如下错误:
错误:can't find Python.h header in ['/usr/include/python2.7']
解决:sudo apt-get install python-dev
重新执⾏命令,没有错误则说明编译成功。
%-------------------------------------------------------------------------------%
部分输出:
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
Hello world!
到此,安装测试成功!!
相关问题的说明
下⾯对两个新⼿实践过程中常见的两个问题进⾏说明:
****对于kernel too old 问题的解决****
对源代码⾃带的例⼦调试完成后就可以⽤gem5跑⾃⼰的程序了,调试之前必须将⾃⼰的程序进⾏编译,在这⾥需要注意的是不同的处理器架构对应于不同的编译器,其中x86架构直接⽤gcc进⾏编译就⾏,其他架构的需要⽤交叉编译器进⾏编译如ARM需要⽤交叉编译器arm-linux-gcc(特别注意版本不能过⾼)进⾏编译,在安装arm-linux-gcc(注意在配置环境变量即PATH的时候写⼊⽂件的内容如果从⽹上复制的话“等号”可能会有问题,最好⾃⼰敲⼊)。
在这⾥⾮常困扰⼈的问题出现了,gem5可以跑源代码⾃带的例⼦,在运⾏⾃⼰编译的代码的时候却⼀直报出内核版本太低的错误(FATAL:kernel too old),究其原因有两⽅⾯:1、编译器都有⼀个对最低内核版本的要求;2、gem5中有⼀个对最⾼内核版本的要求,这样如果所使⽤的编译器版本过⾼则其编译的代码所对应的内核版本就会⾼于gem5所要求的最低版本,解决这个问题有两种⽅法,⼀种是降低编译器的版本,另⼀种是提⾼gem5对最低内核版本的要求。
第⼆种⽅法要简单⼀点可以通过修改gem5⽬录下对最⾼内核版本所要求的值来完成,具体的是修改
src/arch/arm/linux/⽂件中对内核版本的要求,即:
strcpy(name->release, "x.x.xx");
中的x.x.xx字段,具体的修改值是不固定的这和编译器有关,只要修改后的值⽐编译器所对应的值⾼就⾏,可以在终端⽤file 指令查看⼀个已经经过编译的⽂件中所对应的linux版本,然后将gem5中的值改的⽐该值⼤就⾏。
注意:以上是对与arm架构的修改,对于x86架构的修改,⽂件为src/arch/x86/linux/修改⽅法相同。
值得注意的是在做了修改之后要对gem5⽬标进⾏重新编译,否则所做的修改不会⽣效。
不同的处理器架构的配置所需要修改的⽂件是不同的,可以在⽹上找到。
现在gem5模拟器就可以以se模式对⾃⼰编译的程序进⾏模拟了。
****gem5模拟器的输出信息****
在不改变输出⽬录的情况下gem5模拟器的模拟结果是输出到gem5根⽬录下的m5out⽬录下的,在se模式下的输出⽂件总共有三个分别为:
config.ini config.json stats.txt
前两个是关于模拟器的配置信息,最后⼀个是对本次模拟的相关信息的统计。