陆续写些关于新书《自己动手写CPU》的博客,本篇主要是讲解gem5的安装与简单使用。
gem5是什么?外事不决问谷歌,内事不决问百度。有很多这方面的资料,小生就不重复了。简单列举如下:
The gem5 simulator is a modular platform for computer system architectureresearch(计算机系统架构研究),encompassing system-level architecture as well as processormicroarchitecture.(既有系统级架构又有处理器的微架构)
特点如下:
Pervasiveobject orientation
Multipleinterchangeable CPU models
Event-drivenmemory system
MultipleISA support.(Alpha、ARM、SPARC、MIPS、POWER、x86)
Full-systemcapability(Alpha、SPARC、MIPS、x86)
Multiprocessor/ multi-system capability
Powerand energy modeling
Co-simulationwith SystemC
废话少说,直接动手。
一开始尝试在CentOS6.5上安装,但是发现gcc是4.4.7,不符合gem5对gcc的要求,gem5要求gcc是4.6以上。二话不说,就下载了gcc4.9.2(我们都是讲效率的人)。
然后。。。。。。
然后都是泪,gcc编译屡屡出错,百度了数个教程,都是一样的啊,步骤没有错啊。
擦干眼泪,果断换系统(我们都是将效率的人)—— 安装CentOS7。
CentOS7 安装中 。。。。。。(期间:吃饭、喝水、约MM。。。。。。)
CentOS7 安装完成。经过查看,gcc是4.8.2,初步满足条件。安装gem5要有一下依赖软件需要安装。
针对CentOS7分别检查如下:
(1)gcc:系统自带,无需安装,使用gcc -v,可以查看版本,CentOS7是4.8.2,满足条件。
(2)python:系统自带,无需安装,使用python --version,可以查看版本,CentOS7是2.7.5,满足条件,并且有python的头文件(在/usr/include/)和库文件(在usr/lib64/)。
(3)SCons:没有安装,需要安装。
(4)SWIG:没有安装,需要安装。
(5)zlib:系统自带,无需安装。使用whereis zlib可以查看安装位置。
(6)m4:系统自带,无需安装,使用m4 --veriosn,可以查看版本,CentOS7是1.4.16。
(7)protobuf:没有安装,需要安装。
OK。分析完毕,下载上面的软件包,安装过程如下:
1、安装 SCons2.3.4
解压缩安装包后,使用如下命令安装:
python setup.py install --standard-lib
SCons by Steven Knight et al.:
script: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine path: ['/usr/lib/python2.6/site-packages/SCons']
Copyright (c) 2001 - 2014 The SCons Foundation
解压缩安装包后,使用熟悉的命令安装,如下:
configure
make
make install
使用如下命令测试是否安装成功:
swig -verison
应该输出如下结果:
SWIG Version 3.0.4
Compiled with g++ [x86_64-unknown-linux-gnu]
Configured options: +pcre
在https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.bz2下载release版本的protobuf2.6.1,解压缩后,使用如下命令安装:
configure
make
make install
然后使用如下命令可以检查是否安装完成:
protoc --version
输出如下:
libprotoc 2.6.1
修改
/root/.bashrc,添加如下:
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib // 是protobuf默认的安装路径
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/root/gem5/protobuf-2.6.1 // 是protobuf的解压缩路径
如果不加最后一句话,那么在编译gem5的时候,会出现下面的警告:
Package protobuf was not found in the pkg-config search path.
Perhaps you should add the directory containing `protobuf.pc'
to the PKG_CONFIG_PATH environment variable
No package 'protobuf' found
Warning: pkg-config could not get protobuf flags.
然后应用修改:
source ~/.bashrc
scons build/ARM/gem5.opt
等待中,有半个小时左右(小生的计算机配置比较低,i3处理器,2G内存,哪位好心人能捐助一台高性能的计算机啊 )。。。。。。
成功后,输入如下命令,可以测试。
./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 Jan 24 2015 11:24:28
gem5 started Jan 24 2015 11:32:22
gem5 executing on localhost.localdomain
command line: ./build/ARM/gem5.opt ./configs/example/se.py -c ./tests/test-progs/hello/bin/arm/linux/hello
/root/gem5/gem5-stable-50ff05095970/configs/common/CacheConfig.py:48: SyntaxWarning: import * only allowed at module level
def config_cache(options, system):
Global frequency set at 1000000000000 ticks per second
0: system.cpu.isa: ISA system set to: 0 0x416fca0
0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
Hello world!
Exiting @ tick 2924000 because target called exit()
倒数第二行出现了“Hello world!”,表示测试成功。
在编译的时候提示:
Youcan get a 12% performance improvement by installing tcmalloc(libgoogle-perftools-dev package on Ubuntu or RedHat).
也就是说使用tcmalloc会提高程序运行性能,
在http://download.savannah.gnu.org/releases/libunwind/下载libunwind-0.99-beta.tar.gz,然后configure->make->makeinstall进行安装
然后安装googleperftools 1.9,使用如下命令安装:
./configure--disable-cpu-profiler--disable-heap-profiler--disable-heap-checker--enable-minimal--disable-dependency-tracking
make
makeinstall
echo/usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig