在gem5中运行负载测试的使用说明

概述

提供负载介绍

gem5中运行的负载测试一共有三个程序,分别为md5,sort和wordcount。
md5负载测试程序实现的功能为:将输入文件中的每一行通过程序计算出md5值并输出到输出文件中。
sort负载测试程序实现的功能为:将输入的文件按照递增的顺序重新排列并输出到输出文件中。
wordcount负载测试程序实现的功能为:统计输入文件中各个单词的出现此处并输出到输出文件中。

GEM5 配置说明

在启动gem5模拟器时可以根据用户需要设置不同的cpu数量、cache以及内存大小。
如果需要使用多个cpu启动gem5模拟器,可以在启动gem5时加入参数:

1
--num-cpus=2

如果需要设置gem5模拟器的内存大小,可以在启动gem5时加入参数:

1
--mem-size=2048MB

如果需要设置gem5模拟器的cache值,可以在启动gem5时加入参数:

1
--caches --l2cache --l1d_size=32kB --l1i_size=32kB --l2_size=256kB --l3_size=20MB --l1d_assoc=4 --l1i_assoc=4 --l2_assoc=8 --l3_assoc=16

GEM5运行介绍

  • FS模式
    FS(full system)模式模拟完整的全系统,包括OS,运行在用户态和核心态的线程调度以及各种设备。能够精确模拟系统时间等开销。在FS模式下能够启动完整的系统,建模硬件设备,能够执行中断、例外、特权指令、故障处理函数,运行速度慢。
  • SE模式
    SE(syscall emulation)模式能够仿真大部分操作系统级服务,能够取得很好功能模拟加速比。SE模式可以用来运行单个应用以及在MP/SMT上的一系列指令,可以建模用户可见的ISA和常见的系统调用,通过调用主机操作系统来模拟系统调用,能够简化地址翻译模型。

在gem5 fs模式下运行负载测试

在gem5 fs模式下运行需要的步骤为:1)挂在gem5镜像文件,2)将需要测试的程序以及测试数据集复制到挂在的gem5镜像文件中,3)卸载之前挂在的gem5镜像文件,4)启动gem5模拟器并进入到启动好的模拟器中,5)在模拟器中编译测试程序,6)在模拟器中运行之前编译好的测试程序,7)测试程序运行完成后,关闭gem5模拟器,并进入到相应文件夹中获取测试结果。

挂载gem5镜像

首先需要挂载gem5镜像,将需要进行负载测试的程序以及测试数据集传入到gem5镜像中。使用命令为:

1
mount -o,loop,offset=32256 /disk_path/disks/ aarch32-ubunt-natty-headless.img /mount_path

其中

1
/disk_path/disks/aarch32-ubunt-natty-headless.img

为镜像路径及镜像名称。

传入测试程序及数据集

挂在好gem5镜像后,可以使用如下命令查看镜像中的文件,并可以使用cp命令将测试程序及测试数据集传入到gem5镜像中。

1
cp /dwarf_path /mount_path

启动gem5

将测试程序以及测试数据传入到镜像中后,就可以启动gem5模拟器,使用命令如下:

1
./build/ARM/gem5.opt ./configs/example/fs.py --disk-image=/disk_path/disks/aarch32-ubunt-natty-headless.img

当执行上述命令时,需要在gem5的根目录中执行,其中

1
/disk_path/disks/aarch32-ubunt-natty-headless.img

为镜像的路径以及镜像名称。
执行上述命令启动gem5后,重新打开一个命令行窗口,执行:

1
m5term localhost 3456

进入gem5中。

编译测试程序

以编译sort程序为例。进入到sort/src目录中,执行

1
make all

命令后就开始编译sort程序,因为在gem5中模拟的是arm环境,所以必须对测试程序进行重新编译。在编译完成并且没有报错的情况下就可以运行测试程序了。

运行测试程序

以运行sort程序为例。进入到sort/src/run目录中,执行如下命令:

1
2
./multi_thread 3 ../dataset/test.data.01 ./output/test.data.01
./single_thread ../dataset/test.data.01 ./output/test.data.01

其中“multi_thread”为多线程,“3”为线程数,“../dataset/test.data.01”为测试数据集,“./output/test.data.01”为输出结果。

获取测试结果

当执行完需要执行的测试程序后,可以在m5out/stats.txt文件中就可以获取到执行测试程序时的全部运行状态。

在gem5 se模式下运行负载测试

在gem5 se模式下运行需要的步骤为:1)在当前操作系统中安装交叉编译工具,2)安装成功交叉编译工具后使用交叉编译工具重新编译测试程序,3)在gem5 se模式下运行测试程序,4)测试程序运行完成后进入到相应文件夹下获取测试结果。

安装交叉编译工具

因为我们需要在arm环境中运行测试程序,所以需要对测试程序进行重新编译,首先需要安装交叉编译工具。
首先下载arm-linux-gcc-4.4.3.tar安装包,并解压到相应的目录中。解压完成之后需要配置环境变量,将交叉编译工具的安装目录配置到环境变量中。

1
export PATH=$PATH:/usr/local/arm/4.4.3/bin

其中“/usr/local/arm/4.4.3”为交叉编译工具的安装目录。
在导入环境变量之后执行命令:

1
arm-linux-gcc –v

当看到出现版本信息并且没有报错时,说明交叉编译工具安装成功。

交叉编译测试程序

以编译sort程序为例。进入到sort/src目录中,编辑MakeFile文件,将其中的gcc命令替换为arm-linux-gcc命令,同时因为在se模式下只能运行静态编译的程序,所以还需要将编译参数中的-c后加入-static参数实现静态编译。在编译过程中如果提示缺少某个库文件可以直接去搜索下载放入到相应位置重新编译即可。

执行测试程序

进入到gem5的根目录中,执行命令:

1
./build/ARM/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/arm/linux/hello

来运行程序。
其中“tests/test-progs/hello/bin/arm/linux/hello”为需要执行的程序的路径以及程序名称。因为执行负载测试的程序需要输入参数,可以使用options=””命令输入参数,例如指定输入路径可以使用options=”/wikidata”命令进行指定。

获取测试结果

当执行完需要执行的测试程序后,可以在m5out/stats.txt文件中就可以获取到执行测试程序时的全部运行状态。

本文作者:Qiu Qingyu
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 CN许可协议。转载请注明出处!
本文永久链接:http://qiuqingyu.cn/2015/12/18/gem5中运行负载测试的使用说明/