gem5模拟器使用介绍(一)


http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/ny_mg/article/details/40960835


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的官网(http://www.m5sim.org/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.  http://gem5.org
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:到http://www.m5sim.org/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包。***
http://sourceforge.net/projects/scons/files/
SWIG:版本1.3.34。***注意:不要太高的版本,否则需要Perl支持。***
http://www.swig.org/
zlib:最近的版本。
http://www.zlib.net/
m4:宏处理器。
http://www.gnu.org/software/m4/
官方说明,参见:http://www.m5sim.org/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/process.cc文件中对内核版本的要求,即:

         strcpy(name->release, "x.x.xx");
        中的x.x.xx字段,具体的修改值是不固定的这和编译器有关,只要修改后的值比编译器所对应的值高就行,可以在终端用file 指令查看一个已经经过编译的文件中所对应的linux版本,然后将gem5中的值改的比该值大就行。 

注意:以上是对与arm架构的修改,对于x86架构的修改,文件为src/arch/x86/linux/syscalls.cc修改方法相同。
值得注意的是在做了修改之后要对gem5目标进行重新编译,否则所做的修改不会生效。不同的处理器架构的配置所需要修改的文件是不同的,可以在网上找到。
     现在gem5模拟器就可以以se模式对自己编译的程序进行模拟了。

****gem5模拟器的输出信息****
       在不改变输出目录的情况下gem5模拟器的模拟结果是输出到gem5根目录下的m5out目录下的,在se模式下的输出文件总共有三个分别为:
       config.ini  config.json  stats.txt
前两个是关于模拟器的配置信息,最后一个是对本次模拟的相关信息的统计。




posted @ 2016-06-09 16:34  张同光  阅读(4323)  评论(0编辑  收藏  举报