OpenXiangShan / XiangShan-doc

Documentation for XiangShan
https://xiangshan-doc.readthedocs.io
Creative Commons Attribution 4.0 International
338 stars 130 forks source link

checkpoint的生成 #16

Closed cuipingzhang closed 2 years ago

cuipingzhang commented 2 years ago

checkpoint的生成中,该“Checkpoint的生成.md文件”文档中采用riscv64-nemu-interpreter的--simpoint-profile来生成用于simpoint的BBV文件, riscv64-nemu-interpreter workload.bin -D /home/user/spec_cpt -w workloadName -C run_spec -b --simpoint-profile --interval 100000000 1.该命令行中workload.bin是可执行文件吗,虽然后缀是bin,应该是类似elf的该执行文件吧 2.如果该可执行文件执行时需要后面跟输入参数,如一个文件,该怎么添加参数,如cpu2006中的某一个测试项,

这个bin文件使用OBJCOPY从可执行文件生成的吗

shinezyy commented 2 years ago
  1. workload.bin is bare metal workload instead of elf.
  2. We run SPEC after booting Linux. If your want to take checkpoints for SPECCPU, you have to run Linux and let Linux to start SPEC right after boot.
cuipingzhang commented 2 years ago
  1. workload.bin is generated from objcopy. It is bare metal workload instead of elf.
  2. We run SPEC after booting Linux. If your want to take checkpoints for SPECCPU, you should run Linux and let Linux to start SPEC right after boot.

我想用riscv64-nemu-interpreter的--simpoint-profile来生成cpu2006某个测试项的BBV,比如400.perlbench,基于linux编译完成后用objcopy生成了bin文件,但是该测试项执行时后面会跟参数,cpu2006的测试我采用的和你们一样的方法,单独编译执行,不是用runspec指令,那我生成perlbench.bin后怎么写这条生成BBV的指令,perlbench执行需要的参数怎么添加进去

cuipingzhang commented 2 years ago
  1. workload.bin is generated from objcopy. It is bare metal workload instead of elf.
  2. We run SPEC after booting Linux. If your want to take checkpoints for SPECCPU, you should run Linux and let Linux to start SPEC right after boot.

针对第一条,确认一下,我的400.perlbench基于Linux生成的可执行文件,是可以用objcopy直接从该可执行文件转换来的吗

shinezyy commented 2 years ago

Most SPEC benchmarks depend on *nix environment. Bare metal environment is not enough for them. So you have to run them in Linux.

cuipingzhang commented 2 years ago

Most SPEC benchmarks depend on *nix environment. Bare metal environment is not enough for them. So you have to run them in Linux.

能针对我上面的两个问题具体回答吗

shinezyy commented 2 years ago

我就是在直接回答你啊。

跟你说了,裸机跑不起来perlbench,因为裸机没有运行时。

“perlbench执行需要的参数怎么添加进去?” 没有Linux、没有运行时,怎么传?

就算传进去了又怎么样?perlbench要用系统调用啊,你去给NEMU挨个实现系统调用?再虚拟一个文件系统?

cuipingzhang commented 2 years ago

那我这么问吧,可以用riscv64-nemu-interpreter生成cpu2006中400.perlbench的BBV文件吗

cuipingzhang commented 2 years ago

那这个400.perlbench的workload.bin是怎么生成的

shinezyy commented 2 years ago

这个400.perlbench的workload.bin是bbl + linux + perlbench

需要你自己去构建

https://github.com/OpenXiangShan/XiangShan-doc/blob/main/tutorial/others/Linux%20Kernel%20%E7%9A%84%E6%9E%84%E5%BB%BA.md

cuipingzhang commented 2 years ago

这个400.perlbench的workload.bin是bbl + linux + perlbench

需要你自己去构建

https://github.com/OpenXiangShan/XiangShan-doc/blob/main/tutorial/others/Linux%20Kernel%20%E7%9A%84%E6%9E%84%E5%BB%BA.md

这个workload.bin 我每测一个测试项都要重新生成一次,但里面除了具体的测试项还包含bbl+linux 也就是说每生成一个测试项的BBV,执行一次riscv64-nemu-interpreter workload.bin,每次的执行中bbl+linux都跟着跑了一遍?

cuipingzhang commented 2 years ago

这个400.perlbench的workload.bin是bbl + linux + perlbench

需要你自己去构建

https://github.com/OpenXiangShan/XiangShan-doc/blob/main/tutorial/others/Linux%20Kernel%20%E7%9A%84%E6%9E%84%E5%BB%BA.md

连接中文档介绍的bbl.bin和Checkpoint的生成.md文档中“workload (非 可执行文件格式,需使用 objcopy 命令进行处理)”的workload是一个东西吗 看链接文档bbl.bin应该包括bbl + linux + perlbench,用objcopy生成的workload是什么,再哪用

BigWhiteDog commented 2 years ago

这个400.perlbench的workload.bin是bbl + linux + perlbench 需要你自己去构建 https://github.com/OpenXiangShan/XiangShan-doc/blob/main/tutorial/others/Linux%20Kernel%20%E7%9A%84%E6%9E%84%E5%BB%BA.md

连接中文档介绍的bbl.bin和Checkpoint的生成.md文档中“workload (非 可执行文件格式,需使用 objcopy 命令进行处理)”的workload是一个东西吗 看链接文档bbl.bin应该包括bbl + linux + perlbench,用objcopy生成的workload是什么,再哪用

NEMU称呼的workload为全系统的内存镜像,需要自己用objcopy制作成binary以便加载入内存中等待启动 测试某个程序如perlbench时称呼其为运行在linux上的某个workload,是ELF文件

cuipingzhang commented 2 years ago

image

image

  1. 确认一下,上图的bbl.bin就是下图中的workload.bin吧
  2. image 这条指令我还用执行吗 ,只是想在NEMU上生成BBV文件。 3.修改rootfs,我是不是得把自己想测试的CPU2006 copy到riscv-rootfs/apps目录下,然后还得修改 initramfs-autorun.txt 和 inittab 中的内容,使linux再NEMU上启动后跑cpu2006

BigWhiteDog commented 2 years ago
  1. 是的 2.&3 linux内核可以按你自己的需要选择config,我们也只是提供了一个config,请理解initramfs的意义;按流程来讲差不多是这样的
cuipingzhang commented 2 years ago

emu_defconfig menuconfig fpga_defconfig这三个config分别是配置什么的

BigWhiteDog commented 2 years ago

emu_defconfig menuconfig fpga_defconfig这三个config分别是配置什么的

这三个其中有一个不是config,这是编译linux的基本知识,请自行了解

cuipingzhang commented 2 years ago

image

前两个有什么区别吗,还是就是一个工具链,只不过前缀不同

cuipingzhang commented 2 years ago

emu_defconfig menuconfig fpga_defconfig这三个config分别是配置什么的

这三个其中有一个不是config,这是编译linux的基本知识,请自行了解

我可以这样理解吗,如果用emu_defconfig,则linux自启动的配置在initramfs-emu.txt文件里,如果使用fpga_defconfig,则linux自启动的配置在initramfs-autorun.txt文件里?

cuipingzhang commented 2 years ago

image NOOP_HOME是哪个

cuipingzhang commented 2 years ago

image 这步怎么操作,修改哪个文件

BigWhiteDog commented 2 years ago

image

前两个有什么区别吗,还是就是一个工具链,只不过前缀不同

是不同的工具链,请参考https://xiangshan-doc.readthedocs.io/zh_CN/latest/compiler/gnu_toolchain/

另外,请到XiangShan主repo下进行提问,请勿在doc中提问技术问题

cuipingzhang commented 2 years ago

image 前两个有什么区别吗,还是就是一个工具链,只不过前缀不同

是不同的工具链,请参考https://xiangshan-doc.readthedocs.io/zh_CN/latest/compiler/gnu_toolchain/

另外,请到XiangShan主repo下进行提问,请勿在doc中提问技术问题

该问题中我问的时前两个riscv64-linux-gnu-,riscv64-unknown-linux-gnu-,你给的链接是后两个。 另:这些问题都是文档看的,都是针对文档的介绍提的问题。

shinezyy commented 2 years ago

你问的一些问题不是香山specific的问题,而是通用问题。这些问题你应该自己去搜索,网上有现成答案,我们没有义务给这些通用问题做QA。

例如,这个问题:

软链接到noop.dtsi 这步怎么操作,修改哪个文件

再例如

riscv64-linux-gnu-,riscv64-unknown-linux-gnu- 有什么区别

shinezyy commented 2 years ago

针对后一个问题,根据我搜索的结果,unknown-linux-gnu和linux-gnu应该没有什么区别:https://unix.stackexchange.com/questions/206410/why-gcc-show-unknown-in-target-x86-64-unknown-linux-gnu-in-arch-linux

这个答案也说明,这个问题不是xiangshan specific的,甚至不是RISC-V specific的,并且是在互联网上存在现成答案的。

BigWhiteDog commented 2 years ago

原因是其中的

image 前两个有什么区别吗,还是就是一个工具链,只不过前缀不同

是不同的工具链,请参考https://xiangshan-doc.readthedocs.io/zh_CN/latest/compiler/gnu_toolchain/ 另外,请到XiangShan主repo下进行提问,请勿在doc中提问技术问题

该问题中我问的时前两个riscv64-linux-gnu-,riscv64-unknown-linux-gnu-,你给的链接是后两个。 另:这些问题都是文档看的,都是针对文档的介绍提的问题。

这里指定成两个工具链的原因是,香山相关仓库以及应用中有些编译指定了riscv64-linux-gnu-工具链,另一些指定了riscv64-unknown-linux-gnu-,因此在这里说明了两个工具链以方便一键编译各个应用,实际上你软链接他们两个为同一个工具链也没有问题。 另:若使用Ubuntu类发行版,可以apt快速安装riscv64-linux-gnu-工具链

cuipingzhang commented 2 years ago

针对后一个问题,根据我搜索的结果,unknown-linux-gnu和linux-gnu应该没有什么区别:https://unix.stackexchange.com/questions/206410/why-gcc-show-unknown-in-target-x86-64-unknown-linux-gnu-in-arch-linux

这个答案也说明,这个问题不是xiangshan specific的,甚至不是RISC-V specific的,并且是在互联网上存在现成答案的。

我只是不确认,因为你们的工具链有的是自己编译出来的,和通版有区别,为避免这方面的误解我觉得我还是问一下比较好。

sashimi-yzh commented 2 years ago

社区应该是用来反馈那些真实存在的问题, 而且需要给出确切的证据证明问题的存在.

你这个问题纯粹是你自己不想动手, 所以找社区开发者来问: 你完全可以自己试着跑, 跑出错误之后尝试自己解决, 实在解决不了才带着错误来提问. 比如工具链的版本, 你就试一下, 一个错了换另一个, 两个都错再来问. 你说"问一下比较好", 也只是说明你不想花时间去自己解决这个问题.

另外, 不要把开源社区当做你学习的课堂, 社区开发者不是你的老师, 你的某些提问不仅不能给社区带来价值, 而且你也并没有为这些提问向社区开发者支付任何报酬, 大家没有义务教你学习. 基础不牢固, 就先自己补好功课再进社区.