GEM5

环境安装

sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python3-dev libboost-all-dev pkg-config

编译

scons build/X86/gem5.opt -j80

单机运行调试

sudo gdb --args ./build/X86/gem5.opt -d m5out/fs-nvp configs/deprecated/example/fs_nvp.py --cpu-type=X86KvmCPU --kernel=$M5_PATH/binaries/x86-linux-kernel-5.4.49 --disk-image=$M5_PATH/disks/x86-ubuntu-18.04-img --energy-time-unit='100us' --thres-high=900000000 --thres-low=100000000 --capacity=1000000000

FS模式进入模拟系统

m5term localhost [3456]

# 退出模拟
m5 exit

磁盘镜像

# 磁盘镜像挂载
cd gem5-stable/full_system/disks
# fdisk -l x86-ubuntu-18.04-img
# start 2048,扇区大小512字节 offset=2048*512=1048576
sudo mount -o loop,offset=1048576 ./x86-ubuntu-18.04-img ./mnt
sudo mount --bind /proc ./mnt/proc
sudo mount --bind /dev ./mnt/dev
sudo chroot ./mnt

# 退出磁盘镜像
exit

# 取消挂载磁盘镜像
sudo umount ./mnt/proc
sudo umount ./mnt/dev
sudo umount ./mnt
# 磁盘镜像扩容
# Increase disk image by 2G
dd if=/dev/zero bs=1G count=2 >> aarch64-ubuntu-flower.img
sudo parted aarch64-ubuntu-flower.img resizepart 1 100%
name=$(sudo fdisk -l aarch64-ubuntu-flower.img | tail -1 | awk -F: '{ print $1 }' | awk -F" " '{ print $1 }')
start_sector=$(sudo fdisk -l aarch64-ubuntu-flower.img | grep $name | awk -F" " '{ print $2 }')
units=$(sudo fdisk -l aarch64-ubuntu-flower.img | grep Units | awk -F" " '{ print $8 }')
sudo losetup -f --show aarch64-ubuntu-flower.img -o 32256                       
sudo e2fsck -f /dev/loop6
sudo resize2fs /dev/loop6
sudo e2fsck -f /dev/loop6
sudo losetup -d /dev/loop6

https://blog.csdn.net/hit_shaoqi/article/details/128527225

# 替换磁盘镜像中的m5二进制文件
cd gem5-stable/util/m5
apt install gcc-arm-linux-gnueabihf
apt install g++-arm-linux-gnueabihf
apt install openjdk-17-jdk
apt install gcc-aarch64-linux-gnu
apt install g++-aarch64-linux-gnu
scons
# 输出结果:gem5-stable/util/m5/build/arm64/out/m5,其他架构先不管,用不到
# 挂载磁盘镜像,将m5文件覆盖进去
sudo cp gem5-stable/util/m5/build/arm64/out/m5 mnt/sbin/

dist-gem5

https://publish.illinois.edu/icsl-pdgem5/getting-started-with-dist-gem5/

ARM机器

磁盘镜像挂载:

# sudo apt-get install qemu-utils
# sudo modprobe nbd max_part=8
cd gem5-stable/full_system/disks
sudo qemu-nbd -c /dev/nbd0 arm64-ubuntu-20.04-img
sudo fdisk -l /dev/nbd0
sudo mount /dev/nbd0p1 ./mnt
sudo mount --bind /proc ./mnt/proc
sudo mount --bind /dev ./mnt/dev
sudo chroot ./mnt

# 挂载后可通过scp在主机和磁盘镜像之间传输数据
scp -r gem5-stable/full_system/disks/arm64-ubuntu-20.04-img root@[ip addr]:[file path]

# 退出磁盘镜像
exit
sudo umount ./mnt/proc
sudo umount ./mnt/dev
sudo umount ./mnt
sudo qemu-nbd -d /dev/nbd0

调试:

export LD_LIBRARY_PATH=/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH
gdb --args ...

BUG Q&A

Q:Failed to start switch
A:可能是由于使用了gem5.fast,改为gem5.opt即可。或者使用gem5.fast,但是要注释掉DEBUG_FLAGS

Q:src/mem/snoop_filter.cc:367: panic: panic condition (sf_item.requested & response_mask).none() occurred: SF value
A:fs-args中不能添加 --caches

Q:dist-gem5 启动节点数过多时,kex_exchange_identification: Connection closed by remote host 
Connection closed by 127.0.0.1 port 22
A:  sudo vim sshd_config, 将MaxStartups改为100:30:200
	sudo ssh-keygen -A
	sudo /etc/init.d/ssh restart

Q:Illegal instruction
A:m5的问题,看下util/m5中的readme,arm架构下的kvm模式,只支持addr模式

https://www.mail-archive.com/gem5-users@gem5.org/msg20736.html https://www.mail-archive.com/gem5-users@gem5.org/msg20728.html

参考连接

https://dingfen.github.io/2022/02/24/2022-2-24-gem5-1/

results matching ""

    No results matching ""