gem5 arm架构 fullsystem spec2017 benchmark 仿真

news2024/12/26 20:40:54

gem5 system emulation 模式,内部实现了对system call的模拟,使用了一段时间后,有一些发现:

  1. 如果使用spec2017 X86编译,那么会存在对intel比较新的指令不支持的问题;后来使用gcc march K6 m32来解决,即使用amd的k6 32bit编译,但是这也只是权宜之计
  2. gem5的开发人员在邮件list中介绍intel对gem5的译码支持比较差,最开始gem5的x86也是基于amd的
  3. 很多论文中使用了ARM架构,gem5的开发人员也和ARM合作比较紧密,所以gem5对arm架构的指令支持比较好
  4. 即使使用上面的方法,se模式还是会遇到gem5没有模拟的system call函数的问题
  5. 同时还会遇到环境的问题,比如549.fotonik3d,需要手动将input输入的压缩文件OBJ.dat.xz手动解压之后才能运行
    “”
    因为上述的问题,在邮件list中可以看出gem5的开发人员比较倾向于使用full system模式,用他的话就是"works magically"。

X86 full system

如果使基于X86 Ubuntu系统模拟gem5 arch,制作disk image比较简单,可以git clone gem5 resource, 在spec2017文件夹下放入spec2017.iso,调用build.sh自动调用packer将spec2017装入ubuntu的disk image生成spec-2017。

 ./build/X86/gem5.fast --outdir=./m5out/ configs/example/gem5_library/x86-spec-cpu2017-benchmarks.py --image=path/spec-2017 --benchmark=505.mcf_r --size=ref --partition=1

这里需要强调的是,gem5中介绍了多次qemu-kvm, 但是qemu-kvm并不是在X86架构中生成disk image和真正运行gem5时必须的工具。
在gem5中引入它的主要作用就是在boot阶段使用qemu,在真实的cpu上运行boot 阶段,进行加速,实际上如果我们在云服务器上跑,如果没有qemu软件或者权限,只是使用atomic cpu跑boot也是比较快的。
就是不要被qemu迷惑,fullsystem gem5可以理解成在gem5上跑app,不过这个app是os,单纯的用atomic cpu跑也没有任何问题。

ARM full system

X86 full system的问题是memory最大支持3GB,目前看gem5的设置是不支持5GB 6GB这样的设置。
我们介绍一下如何生成gem5的disk image。
首先看一下最终成功运行full system 使用的指令:

./build/ARM/gem5.fast -d ./m5out/ARM/fullsystem64/spec2017 ./configs/example/fs.py \ 
--kernel 2022/binaries/vmlinux.arm64 \
--disk-image path/expanded-aarch64-ubuntu-trusty-headless.img \
--bootloader 2022/binaries/boot.arm64 --mem-type=DDR4_2400_4x16 \
--param 'system.highest_el_is_64 = True' \
--script=./m5out/ARM/fullsystem64/spec2017_restore/spec2017.rcS

kernel 我的理解就是os内核程序,disk image则是装载了benchmark的磁盘镜像。
内核程序与我们无关,我们可以直接使用,disk image 则需要我们手动装载。
image kernel
![我是用的就是这两个文件](https://img-blog.csdnimg.cn/97fe6c7e804f4804a1382f7b9fabc9d5.png
script这里指定的是一个script

#!/bin/bash
source /root/.bashrc
/sbin/m5 checkpoint 1
echo "A real multi node workload might start here ..."
cd /home/gem5/spec2017
source shrc
echo "Reset stats"
/sbin/m5 resetstats
runcpu --size test --iterations 1 --config myconfig.aarch64.cfg  --nobuild 605.mcf_s
/sbin/m5 exit 1

通过指定这个script,gem5在boot成功后,运行这个script,就调用了脚本内的runcpu,自动运行了spec2017对应的app。
如果我们不指定这个script,那么如果不对disk image进行任何修改,那么boot成功后,要求输入用户名和密码,输入root可以进入,不过这个操作比较麻烦,还是建议指定script。

现在唯一需要的工作就是实现disk image,这里帮助对我很大的就是这篇博客](https://www.eecg.utoronto.ca/~elsayed9/website/blog/gem5_fs_arm_flow.php)。
首先遇到的问题就是官方提供的image 1GB或者2GB,然而spec2017有4GB我们需要对image进行扩容。按照博客的操作如下

$ # Backup the original disk image if needed
$ cp aarch64-ubuntu-trusty-headless.img expanded-aarch64-ubuntu-trusty-headless.img
$ # Increase disk image by 2G
$ dd if=/dev/zero bs=1G count=2 >> expanded-aarch64-ubuntu-trusty-headless.img
$ sudo parted expanded-aarch64-ubuntu-trusty-headless.img resizepart 1 100%
              
$ # Parse some info for 'losetup' and 'mount' later
$ name=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | tail -1 | awk -F: '{ print $1 }' | awk -F" " '{ print $1 }')
$ start_sector=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | grep $name | awk -F" " '{ print $2 }')
$ units=$(sudo fdisk -l expanded-aarch64-ubuntu-trusty-headless.img | grep Units | awk -F" " '{ print $8 }')
              
$ # Attach to device and record output, to me it was /dev/loop18                                                               
$ sudo losetup -f --show expanded-aarch64-ubuntu-trusty-headless.img -o $(($start_sector*$units))                         
              
$ sudo e2fsck -f /dev/loop18  # Fix potential errors, press Y for all fixes
$ sudo resize2fs /dev/loop18  # Actual resizing step
$ sudo e2fsck -f /dev/loop18  # Double check there are no errors
              
$ sudo losetup -d /dev/loop18 # Detach from the loop device
              
$ # Mount image and check new size
$ mkdir disk_mnt
$ sudo mount -o loop,offset=$(($start_sector*$units)) expanded-aarch64-ubuntu-trusty-headless.img disk_mnt
$ df -h # Should show the new expanded image size with the Used and Avail for disk_mnt
$ sudo umount disk_mnt

扩容之后 mount image,下面就是要安装spec2017到这个disk image了。
这里建议看一下 gem5-resources/src/spec-2017/disk-image/spec-2017/install-spec2017.sh 这个是装载spec2017到x86 os的过程,我们装载spec2017到arm,可以按照这个流程来。
gem5 resources的路径

1. sudo chroot . #将当前mount目录切换为主目录
2. 创建/home/gem5/文件夹 将cpu_spec2017.iso拷贝到这个文件夹
3. 按照cpu_spec2017.iso的install流程,mount cpu_spec2017.iso 然后install.sh
4. install 之后,我们可以build,生成spec2017的可执行文件等。建议参考install-spec2017.sh

disk image中已经有gcc aarch64的编译工具,因此我们不需要额外再安装gcc aarch64,还是比较方便的。
我们将spec2017安装到了/home/gem5/,再结合一下刚才介绍的spec2017.rcS,就能看出来这个script的作用实际上就是进入文件夹,然后runcpu。

我们看一下效果
full system运行
大约1Billion指令之后,大约半小时,完成boot。再执行3.3Billion的指令进入真实的runcpu仿真。

最后在介绍一下./util/term/m5term 3460。
在gem5开始运行后,会显示system.terminal listening for connections on port NUMBER
在这里插入图片描述
这时我们另开一个terminal,输入./util/term/m5term NUMBER,即可观察到当前os具体运行到哪一步,而上面说的,如果不指定script,需要手动输入root也是在这里。

对我帮助很大的两篇博客:
https://www.eecg.utoronto.ca/~elsayed9/website/blog/gem5_fs_arm_flow.php
https://lucian.run/2021/10/03/gem5%20FS/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA知识汇集-FPGA配置模式和配置设计

所有现代FPGA的配置分为两类:基于SRAM的和基于非易失性的。其中,前者使用外部存储器来配置FPGA内的SRAM;后者只配置一次。 Lattice和Actel的FPGA使用称为反熔丝的非易失性配置技术,其主要优点是系统设计更加简单、不需要外部存储器和配置控制器、功耗低…

Kotlin之泛型的高级特性

Kotlin泛型中的基本用法和Java中的泛型用法是大致相同的,因此也比较好理解。然而实际上,Kotlin在泛型方面还提供了不少特有的功能,接下来将进行介绍。 一、对泛型进行实化 泛型实化这个功能对于绝大多数Java程序员来讲是非常陌生的&#xf…

对云台、IMU、鲁棒性和硬件时间同步的理解

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> slam是一门集硬件和软件的多科学技术,涉及到很多技术术语、概念以及数学公式等等。下面我将结合网上资料以及个人理解进行介绍。 什么叫云台…

navicat导入sql数据库文件的简单操作步骤

目录 前言必读 一、概念 二、操作步骤 (一)新建连接 (二)新建数据库 (三)数据库导入sql文件 前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一、概念 在很多项目当…

LeetCode 309. 最佳买卖股票时机含冷冻期

309. 最佳买卖股票时机含冷冻期 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后&#x…

第二个岳云鹏,跨年晚会含泪主持,成为一道最靓丽的风景

中国人自古讲究:百善孝入先,尤其是对于娱乐圈的明星来说,孝心和爱心更是他们成功的根本。 在这方面,德云社的小岳岳走在了前列,他用自己的孝心和爱心感动了粉丝,也收获了无数的鲜花和掌声。小岳岳的爱心体现…

2022年终总结 2023展望

一、回首2022 总结2022,同时也给新的一年设定目标,明年来还愿。 2022对我来说意义非凡,最重要莫过于考上了理想的研究生学校。 1~2月 考研初试刚结束,很长时间没敲过代码,而且本科期间刷的算法题不多,感觉…

02 USART

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片…

RabbitMQ——高级特性

1、RabbitMQ高级特性 1.1、消息的可靠性投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。 RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 ⚫ confirm 确认模式 ⚫ return 退回模式 rabbitmq 整个消息投递的路径…

【回答问题】ChatGPT上线了!推荐30个以上比较好的命名实体识别模型

【回答问题】ChatGPT上线了!推荐30个以上比较好的命名实体识别模型以及github源码? 推荐30个以上比较好的命名实体识别模型 命名实体识别模型是指识别文本中提到的特定的人名、地名、机构名等命名实体的模型。推荐的命名实体识别模型有: …

数据仓库搭建——本地数仓搭建详细流程

1 准备 1.1 本地虚拟机器准备 使用本地搭建三台机器,搭建数仓,模拟实际平台数据仓库的搭建。具体的搭建框架如下 安装软件角色主机1主机2主机3HadoopNameNode√SecondaryNameNode√DataNode√√√NodeManager√√√ResourceManager√√Zookeeperzk se…

educoder数据结构与算法 栈 第1关:实现一个顺序存储的栈

本文已收录于专栏 🌲《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》🌲 目录 任务描述 相关知识 编程要求 测试说明 AC_Code 任务描述 本关任务是实现 step1/SeqStack.cpp 中的SS_IsFull、SS_IsEmpty、SS_Length、SS_Push和SS_Pop五个操作…

巨星大衣哥参加元旦跨年晚会,一首老歌赢得现场一片掌声

刚刚结束的跨年晚会,各地都展现出了极大热情,这是后疫情时代的第一次跨年,自由了的国人自然兴奋异常。从南国到北疆、从湖南到山东,人们都沉浸在喜悦当中,期盼祖国风调雨顺,期盼来年都能身体安康。 远在山东…

【回答问题】ChatGPT上线了!推荐30个以上比较好的中文bert系列的模型/压缩模型

推荐30个以上比较好的中文bert系列的模型 以下是一些中文 BERT 系列的模型: BERT-Base, Chinese: 中文 BERT 基础版 BERT-Large, Chinese: 中文 BERT 大型版 BERT-WWM, Chinese: 中文 BERT 加入了 whole word masking 的版本 BERT-WWM-Ext, Chinese: 中文 BERT 加入了 whole …

大数据NiFi(五):NiFi分布式安装

文章目录 NiFi分布式安装 一、​​​​​​​为什么需要NiFi集群 二、使用内嵌的zookeepe

字符串常量

文章目录1.内存分布(1) 代码区(2) 全局区(3) 栈区(stack)(4) 堆区(heap)2.字符串常量的存储字符数组与字符指针3.字符串常量内存释放问题4.字符串常量生命周期5.字符串常量定义6.字符…

Object类

文章目录面试题:和equals()的区别回顾:和equals重写后的调用重写equals方法的原则答案toString()方法面试题:和equals()的区别 回顾:和equals :运算符 1、可以使用在基本数据变量和引用数据变量中 2、如果比较的是基…

Model Animation动画页签

1、Animation动画页签 当我们选中包含动画剪辑的的模型时,该页签将显示动画设置相关的内容 动画剪辑是Unity动画的最小构成元素,代表一个单独的动作 当美术同学做好动画导出时建议将模型和动画文件分别导出 导出包含网格信息不包含动作信息模型导出不…

【大数据】CentOS7环境下安装MySQL数据库

文章目录1.安装mysql1.1 删除CentOS系统自带数据库1.2 开始安装mysql1.3 启动mysql服务,并设置密码1.4 授权所有外部用户连接MySQL(了解)2.客户端操作mysql常见查询操作解决汉字乱码问题创建操作1.安装mysql CentOS7自带的是Mariadb&#xf…

Prometheus学习和整理

是基于时序数据库的开源监控告警系统,非常适合对K8S集群的监控,它通过HTTP协议周期性的抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控, 特点: 支持多维数据模型:由度量名和键值对组成的时间序列数据 内置时间序列数据库TSDB 支持PromQL查…