gem5跑linux或安卓bench

来源:互联网 发布:python bt文件下载 编辑:程序博客网 时间:2024/05/18 02:34


1搭建gem5环境
1.1 安装
安装所需工具
sudo apt-get install git scons g++ python-dev swig m4 protobuf

1.2gem5下载
note:我安装的是gem5-stable版,据说此版可以查看cache层次结构的pdf
链接:http://pan.baidu.com/s/1eRHYFj8 密码:jl3w

1.3编译
解压gem5,进入gem5文件夹:
scons build/ARM/gem5.opt
(note:第一次较慢(大概20分钟),如果以前跑过gem5可以备份一下build文件夹之后再编译)

2 跑linuxbench

2.1 启动linux镜像前的准备
————镜像,bench的放置和创建仿真输出目录

1 下载linux镜像
http://www.gem5.org/dist/current/arm/aarch-system-2014-10.tar.xz
或链接:http://pan.baidu.com/s/1eRHYFj8 密码:jl3w (只需linux-aarch32-ael.img)

2 将linux镜像放入正确目录
将aarch-system-2014-10.tar.xz解压到my-gem5文件夹下的img文件夹中(如果没有则自己创建)
目录结构如下:
gem5/
|----img/
|----|----binaries/*
|----|----disks/*
note:最终查看disks下存放着要跑的linux镜像linux-aarch32-ael.img

3下载benchmark,放进文件系统镜像
进入到gem5/img/disks目录下,上传mediaBench  Mibench,并解压。
下载地址:链接:http://pan.baidu.com/s/1eRHYFj8 密码:jl3w
向镜像添加文件指令,将linux镜像挂载到mnt,把benchmark放到文件系统镜像

sudo mount -o loop,offset=32256 img/disks/linux-aarch32-ael.img /mnt
cp -a Mibench /mnt
cp -a mediaBench /mnt
cd /mnt
chmod +x -R /mediaBench/*
chmod +x -R /Mibench/*
umount /mnt

4 构建仿真输出目录

将gem5/build/ARM/gem5.opt和gem5/configs/链接到任一文件夹下(这里采用gem5/parsec-1/),开始仿真,注意为不同的benchmark创建不同的目录:

链接指令如下:
进入parsec-1目录
ln -s ../build/ARM/gem5.opt ./
ln -s ../configs

目录结构如下:
parsec-1/
|----boot_for_both.sh
|----gem5.opt
|----configs

2.2 启动linux系统(gem5目录下)
仿真的过程首先启动系统,然后在系统中跑bench,为节省时间可以分两步:

1 用AtomicSimpleCpu模式启动linux,设置一个观察点:

进入parsec-1,修改boot_for_both:
1.首先将M5_PATH修改为你自己的img路径
2.可能需要根据不同的模式进行相应的修改,且注意每种模式后面参数文件是否存在

1)运行./boot_for_both.sh,启动结果如下图,主要看三个地方:
1 command line: 输出内容与启动脚本boot_for_both.sh内容一致,如果是安卓,则必须指定kernel,  disk-image ,os-type.不指定这者则默认是linux系统
2 port 3458,端口号是3458.这个信息用于m5term连接到监听端口.
3 @XXX 设置的断点,虚拟机下次不再从@0处启动(时间长,会输出非常多启动信息)


2)编译m5term,连接到上面的监听端口:

打开另一个终端,编译m5term,连接到上面的监听端口m5term的源码在gem5源代码的util/term目录下,进入该目录,输入熟悉命令进行编译:(用lnet连接也可以不过据说连接效果不如下面这个好)
% cd m5/util/term
% make
sudo gcc -o m5term term.c
% make install
sudo install -o root -m 555 m5term /usr/local/bin
然后打开新控制台使用如下命令连接虚拟机:(注意一定要在util/term下运行,此命令才会有效,因为没有加入系统环境变量)
./m5term 127.0.0.1 3456 (note:此次可直接写m5term 3456)

./util/term/m5term 127.0.0.1 3456就可以看到所跑linux系统的命令行#,即已经进入m5终端
(note:root是我们输入的)

出现#号时,说明linux系统已经启动好

设置断点,保存此刻虚拟机状态


此时之前运行./boot_for_both.sh,启动结果图出现对应的变化,@XXX为断点


此时parserc-1/m5out/文件夹里会生成cpt.xxxxx文件夹,即为checkpoint,这个文件夹可以重复使用,跑另一个bench的时候复制其链接到m5out文件夹中

注意:不同的boot_for_both.sh后加入-r 1代表从观察点启动,没有则表示直接启动,可以设置观察点,可以添加进入,以后再次运行即从断点处进入m5终端。

2 用arm_detailed模式从设置的观察点继续执行
下次运行./util/term/m5term 127.0.0.1 3456就可以看到所跑linux系统的命令行#,即已经进入m5终端

3 跑安卓bench
基本一样,不同点是:
1 android镜像和bench在同一个文件:可以直接放入img/disks,不用挂载mount到 /mnt。
2 启动脚本有不同。
3 m5终端略不同,如下。


4 总结

1 gem5 编译
2 创建img,disks下放linux或者andriod的.img。如果是linux系统先挂载,bench再挂载到系统。
3 创建输出文件,存放不同bench的结果。
目录结构如下:
parsec-1/
|----boot_for_both.sh
|----gem5.opt
|----configs
4 修改boot_for_both.sh
5./boot_for_both.sh
6 m5term 编译并连接端口号。
7 进入虚拟的m5终端,设置断点m5  checkpoint  
退出虚拟机 m5 exit.

参考
https://labrick.cc/2015/07/15/gem5-run-bench-step/
http://blog.csdn.net/clarkchenhot/article/details/53618003?locationNum=10&fps=1