天天看点

gem5与Armv8模拟器的设计原理指导与使用指导

1. 几个非常重要的概念的理解:

Armv,x86,alpha等是体系结构,三者是属于平级的东西,其他常见的体系结构还有mips,power,sparc等。

gem5与ARMv8之间的关系:

gem5是计算机体系结构模拟平台,如果非得找一个实体说它是什么,那它应该是个将cpu内存,外设都以对象化形式表示并且希望用最精简的模块组合这些对象模块以实现最理想最复杂功能的芯片,只不过这个芯片是用软件设计的,功能有点类似与七巧板的拼图,你想拼什么图,就去找什么样的板,最终能够方便快捷的用其支持的cpu模型,内存模型,系统模型对象快速组装出一台用软件实现的计算机,然后根据用软件构建的这台虚拟机的运行二进制程序后的trace的内容,分析这个体系结构的指令的存储过程,存储内容,运行原理,以及tick周期。因此这个模拟平台通常都被计算机体系结构设计者和研究者广泛使用。

至于ARMv8模拟器,刚开始学习的时候一直搞不明白ARMV8模拟器和ARMv8之间是什么关系,总是把这两个概念混为一谈,后来听了侯老师的讲座和龙师兄的讲解,查了一些资料,才明白,原来armv8的v不是指虚拟的意思,其本身作为一个独立整体的计算机体系架构,是和体系结构式平级的,甚至可以这么说armv8,x86,alpha,只不过习惯上,业界喜欢将arm作为一个整体的体系架构,armv8是arm推出的一款最新的体系架构,其性能能已在侯老师讲座那块进行了一些简要说明。

而ARMv8模拟器,其真正的位置应该是和gem5平级,两者都是计算机体系结构模拟器,两者的区别是armv8模拟器只专注于模拟arm或者说armv8体系结构,而gem5模拟器支持的体系结构较多,也支持arm体系结构,只是尚未实现对于armv8这个新arm架构的模拟。

但是在查看gem5英文文档和使用gem5.debug工具的过程中,

在configs/example/se.py 配置脚本中将se.py 变为fs.py的过程中,却发现提示错误命令,而先前的armv8模拟器文档里也强调过,我们的armv8模拟器对系统模型的支持只有se模式,即不支持操作系统运行模式,我不太确定是不是因为这个原因,如果是这个原因的话,gem5和armv8模拟器的关系就清楚了,宏观上两者的功能都是相同的,都是为了模拟计算机体系结构,两者的最大区别就是前者支持的体系结构和系统模型都相对完整,后者实现了对于最新的armv8体系结构模拟,因此严格意义上,gem5应该称为模拟平台,后者称为模拟器。两者之间的联系是,armv8模拟器基于gem5平台开发,由于未实现fs模型支持,在其进行函数系统调用的时候,需借助于gem5平台的系统调用进行模拟。

对于为什么要选择gem5这个平台,我至今也不知道该怎么回答,参考文档里面提到是因为结合了M5和gems的优点。而M5是一个优秀的开源的多处理机模拟器,gems则能对计算机体系的存储层次进行详细而灵活的模拟,包括对多种不同的chche一直性协议和互联模型的支持,gem5是m5和gems的一个紧耦合版本,这可能就是对于cpu和内存处理信息要求极为严格的计算机体系结构研究者选择gem5模拟平台的主要原因吧。

      以上就是我对gem5和armv8模拟器这几天学习和操作实践的理解,是我自己的一点理解,有什么理解上偏差,希望大家给我多指点指点,感觉自己学东西特别慢,好多东西也学得不到位,理解不正确,谢谢你们对我的耐心指导和帮助。

2. gem5 操作实践学习:

gem5操作的命令格式为:<gem5 二进制执行文件> [gem5  参数项] <模拟器python脚本.py> [python 脚本附加参数项 ]

        学习的时候主要是围绕gem5 documentation 和243服务器xshell操作gem.debug 二进制脚本文件展开。 

 Gem5主要解决我概念上理解和细节上的操作偏差问题,现在主要表述下xshell 学习gem.debug 的过程:

   主要围绕两部分内容:

      ./build/ARMV8/gem5.debug -d . --debug-flags=Exec --trace-file=trace_for_test.txt  -h

便可以获得gem 二进制执行文件的参数配置信息,即第一个重点学习的参数项,这一部分参数主要是指定需要trace的信息,以及trace 文件的输出目录和重定向,这部分操作已能独立操作,只是trace到的txt文件的内容,该怎么看,怎么分析,还没有开始这方面的工作;

./build/ARMV8/gem5.debug -d output/  --debug-flags=Exec,Register,-ExecSymbol  --trace-file=for_this_nice.txt configs/example/se.py -I 5 --maxtime=5 -c trace_hello  --cpu-type=timing -n 4  --caches  –h

便能获得模拟器python脚本参数配置信息,即第二个重点学习的参数项,这一部分主要是指定trace armv8 二进制执行文件的时候应该用那些抽象的诸如cpu,内存,系统模式对象来组件系统结构,以运行 –c 后的armv8 二进制文件。需要说明下的是,-c 后的二进制文件必须经过aarch64-linux-gnu-ggc  –static  –g  -o [目标文件] [源文件] 命令进行静态编译生成。  

继续阅读