赞
踩
Gem5是什么?
Gem5是一个模块化的离散事件驱动的计算机系统仿真平台。也就是说:
1. gem5的组件可以被轻松地重排、参数化、扩展或替换以满足你的需求。
2. 它在时间上仿真一系列离散事件。
3. 它的预期用途是仿真一个或多个计算机系统。
4. Gem5不只是个仿真器,它是一个可以让你用足够多的预制组件搭建你自己的仿真系统的仿真平台。
Gem5由C++和python编写,其提供的大部分组件都使用BSD类许可证。它可以在完整系统模式(FS模式)下模拟带有设备和操作系统的完整系统,也可以在系统调用模拟模式(SE模式)下由仿真器提供系统服务的仿真运行用户空间程序。Gem5对执行Alpha、ARM、MIPS、Power、SPARC、RISC-V和64位x86二进制的CPU模型有不同程度的支持,包括两个简单的单周期模型、一个乱序模型和一个顺序流水线模型。还可以灵活地从缓存和互联或提供更灵活的内存系统建模的Ruby模拟器中建立内存系统。
还有许多组件和功能没有在此提及,但仅从这个部分列表中就可以看出,gem5是一个复杂而有能力的仿真平台。即便Gem5现在的功能已经十分强大,在个人和一些公司的支持下,我们仍在不断地开发、添加新功能和改进旧功能。
构建gem5
Gem5构建要求
http://www.gem5.org/documentation/general_docs/building#dependencies了解详细的要求
在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++库。如果你想使用SystemC的话,它是一个必要的依赖。
sudo apt install libboost-all-dev
下载代码
先切换到你想存放gem5代码的目录。之后使用git克隆代码仓库。
git clone https://gem5.googlesource.com/public/gem5
或git clone https://github.com/gem5/gem5.git
第一次构建gem5
让我们从构建一个基本的X86系统开始。目前,你必须为你需要模拟的每个ISA单独编译gem5。此外,如果使用ruby-intro-chapter,你必须为每个缓存一致性协议进行单独编译。
为了构建gem5,我们将使用SCons。SCons使用SConstruct文件(gem5/SConstruct)来设置变量,然后使用每个子目录中的SConscript文件来查找和编译所有的gem5源代码。
SCons第一次执行时,会自动创建一个gem5/build目录。在这个目录中,你会发现由SCons、编译器等生成的文件。你用来编译gem5的每一组选项(ISA和缓存一致性协议)都会有一个单独的目录。
build_opts目录下有许多默认的编译选项。这些文件指定了最初构建gem5时传递给SCons的参数。我们将使用X86默认选项,并指定我们要编译所有的CPU模型。你可以在build_opts/X86文件中查看SCons选项的默认值。你也可以在命令行中指定这些选项来覆盖任何默认值。
使用以下命令进行构建:
python3 `which scons` build/X86/gem5.opt -j9
gem5 可执行文件类型
gem5中的SCons脚本目前有5种不同的二进制文件,你可以为gem5构建:debug、opt和fast。这些名称大多是不言自明的,但详细情况如下。
debug
构建时没有优化和调试符号。如果你需要查看的变量在gem5的opt版本中被优化掉了,那么这个二进制文件在使用调试器进行调试时很有用。与其他二进制文件相比,带调试的运行速度很慢。
opt
这个二进制文件是在大多数优化开启的情况下构建的(例如,-O3),但包含了调试符号。这个二进制文件比调试文件快得多,但仍然包含足够的调试信息,能够调试大多数问题。
fast
构建时开启了所有的优化(包括支持平台上的链接时间优化),没有调试符号。此外,任何断言都被删除,但panic和fatal错误仍被包括在内。fast是性能最高的二进制文件,比opt小得多。然而,只有当你觉得你的代码不太可能有重大错误时,才适合使用fast。
传递给SCons你想要构建的东西对应的参数。在本例中,我们要构建 gem5.opt(一个带有调试符号的优化二进制文件)。我们想在 build/X86 目录下构建 gem5。由于这个目录目前并不存在,SCons将在build_opts中寻找X86的默认参数。(注意:我在这里使用 -j9 来在我的机器上的 8 个核心中的 9 个上执行构建。你应该为你的机器选择一个合适的数字,通常是核心数+1)。
接下来你应该会看到类似下列的打印信息:
Checking for C header file Python.h... yes
Checking for C library pthread... yes
Checking for C library dl... yes
Checking for C library util... yes
Checking for C library m... yes
Checking for C library python2.7... yes
Checking for accept(0,0,0) in C++ library None... yes
Checking for zlibVersion() in C++ library z... yes
Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... yes
Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... yes
Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library None... no
Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library rt... yes
Checking for C library tcmalloc... yes
Checking for backtrace_symbols_fd((void*)0, 0, 0) in C library None... yes
Checking for C header file fenv.h... yes
Checking for C header file linux/kvm.h... yes
Checking size of struct kvm_xsave ... yes
Checking for member exclude_host in struct perf_event_attr...yes
Building in /local.chinook/gem5/gem5-tutorial/gem5/build/X86
Variables file /local.chinook/gem5/gem5-tutorial/gem5/build/variables/X86 not found,
using defaults in /local.chinook/gem5/gem5-tutorial/gem5/build_opts/X86
scons: done reading SConscript files.
scons: Building targets ...
[ISA DESC] X86/arch/x86/isa/main.isa -> generated/inc.d
[NEW DEPS] X86/arch/x86/generated/inc.d -> x86-deps
[ENVIRONS] x86-deps -> x86-environs
[ CXX] X86/sim/main.cc -> .o
....
....
....
[ SHCXX] nomali/lib/mali_midgard.cc -> .os
[ SHCXX] nomali/lib/mali_t6xx.cc -> .os
[ SHCXX] nomali/lib/mali_t7xx.cc -> .os
[ AR] -> drampower/libdrampower.a
[ SHCXX] nomali/lib/addrspace.cc -> .os
[ SHCXX] nomali/lib/mmu.cc -> .os
[ RANLIB] -> drampower/libdrampower.a
[ SHCXX] nomali/lib/nomali_api.cc -> .os
[ AR] -> nomali/libnomali.a
[ RANLIB] -> nomali/libnomali.a
[ CXX] X86/base/date.cc -> .o
[ LINK] -> X86/gem5.opt
scons: done building targets.
编译完成后,你应该在build/X86/目录中有一个可以工作的gem5可执行文件gem5.opt。编译可能需要很长的时间,通常是15分钟或更长时间,尤其是当你在AFS或NFS等远程文件系统上进行编译时。
文章作者:速易芯李昊翔
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。