问题标签 [gem5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
321 浏览

linux-kernel - 为什么 Linux 内核在全系统模式下看不到 gem5 模拟器中的缓存大小?

我想在我的 gem5 模拟器中使用缓存大小,看看它如何影响程序的性能,并可能在运行时调整程序。

作为健全性检查,我尝试检查我使用的命令行参数是否正常工作,因此我尝试了以下建议的各种方法:https ://superuser.com/questions/55776/finding-l2-cache-size-in -linux/1298808#1298808

但我观察到:

  • 该文件/sys/devices/system/cpu/cpu0/cache/index2/size不存在
  • getconf是空的

这是为什么?

但是我确信缓存是存在的,因为我已经对简单程序进行了基准测试,并且当我减少缓存时循环计数会增加。

例如,我的基本命令是:

使用这些微小的缓存,运行以下命令:

需要 175M 周期,如果我使用完全相同的命令但具有大量大小的缓存,则只需 16M 周期1024MB

我观察到 x86 的类似行为。

我正在使用这个测试基础设施:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/05d8a324f74849f03404eb847f8da748e2e4502c#gem5-change-system-parameters这意味着:

邮件列表上的相关线程:http: //gem5-users.gem5.narkive.com/4xVBlf3c/verify-cache-configuration

作为比较,QEMU v2.11.0 x86 确实显示了缓存大小,但没有显示 ARM 的。

也许对于 ARM,我们需要修改引导加载程序以将其告知内核?但我不知道这些东西如何运作得很好:

0 投票
3 回答
2334 浏览

gem5 - 恢复一个检查点后如何在gem5中切换CPU型号然后观察差异?

我想用轻量级 CPU 以全系统 (FS) 模式启动 Linux 内核以节省时间,在启动完成后创建一个检查点,然后用更详细的 CPU 恢复检查点以研究基准,如:http: //gem5.org/Checkpoints

但是,当我尝试使用时,-r 1 --restore-with-cpu=我无法观察到新旧 CPU 之间的周期差异。

我正在研究的衡量标准是缓存大小如何影响基准运行所需的周期数。

我正在使用的设置在以下位置进行了详细描述:为什么 Linux 内核在完整系统模式下看不到 gem5 模拟器中的缓存大小?我正在查看循环计数,因为目前我无法直接使用 Linux 内核查看缓存大小。

例如,如果我使用HPI带有命令(摘录)的详细而缓慢的模型从头开始启动 Linux 内核:

然后更改缓存大小,随着缓存大小按预期变好,基准测试确实变得更快。

但是,如果我第一次启动时不--cpu-type=HPI使用 ,它使用更快的AtomicSimpleCPU模型:

然后我创建检查点m5 checkpoint并尝试恢复更快的 CPU:

然后更改缓存大小没有区别:我总是得到与 相同的循环计数AtomicSimpleCPU,表明修改后的还原不成功。

如果我尝试从 x86 切换AtomicSimpleCPUDerivO3CPU.

邮件列表中相关的旧线程:http: //thread.gmane.org/gmane.comp.emulators.m5.users/14395

测试于:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4

0 投票
2 回答
251 浏览

openblas - gem5 系统调用仿真 OpenBLAS cblas_dgemm 失败,并显示“致命:系统调用 mbind (#237) unimplemented”

我正在开发一个程序,我需要在 SE 模式下使用 gem5 模拟调用 OpenBLAS 函数的程序。我的代码(在 C 中)如下

这是 OpenBLAS 的一个例子。我很确定我已经使用以下 makefile 命令静态编译了这个文件

问题是我可以在我的 ubuntu 机器上运行可执行文件,但它在 gem5 SE 模式下遇到致命错误。模拟输出如下

任何人都可以帮助我吗?谢谢。

0 投票
1 回答
614 浏览

gem5 - 如何使用 initrd 或使用 gem5 的 initramfs 启动 Linux 内核?

使用 QEMU,我既可以使用-initrd '${images_dir}/rootfs.cpioinitrd,也可以将 initramfs 映像直接传递给-kernel Image.

但是,如果我initramfs用 gem5 尝试图像,fs.py --kernel Image它会失败:

使用 QEMU 能够使用的完全相同的 initramfs 内核映像。

而且我看不到-initrd.

我开始工作的唯一方法是将ext2磁盘映像--disk-image与 raw一起传递给vmlinux.

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

0 投票
1 回答
689 浏览

gem5 - 如何让gem5等待GDB连接在模拟开始时可靠中断并查看Linux内核的start_kernel?

在 QEMU 上,我可以使用-S -s,它在开始模拟之前等待 GDB 连接

如何在 gem5 上做同样的事情,希望使用fs.py脚本?

当我交换终端并连接时,模拟已经过去了start_kernel

我看到了--debug-break旗帜,但我不知道如何使用它,如果我这样做:

运行失败:

编辑:进一步查看后,我现在发现提交 c2baaab0ed43ad09fc8b7fcda25207b6ccd6c0e3 添加了一个参数:

这一定是我要找的。但是我没有找到如何启用它fs.py,似乎没有暴露?

0 投票
1 回答
572 浏览

gem5 - 如何在 gem5 中使用 m5 readfile 和 m5 execfile?

我希望m5 readfile会从主机读取文件,并m5 execfile从主机执行文件,但文档很少,我无法让它们工作。

也许路径是由readfile=in确定的m5out/config.ini,但我不知道在使用时如何修改该设置fs.py;当我重新启动 gem5 时,它会覆盖该文件。

我能够使用相关m5 writefile但是:

来宾:

主持人:

0 投票
0 回答
1239 浏览

c++ - 运行程序且 nm 和 ldd 显示正确链接时如何解决“符号查找错误”?

每当我使用提交 c5ca3ef6b9ff967722b07bc160fa9068e0d9e39c 运行模拟器 Gem5 的特定版本/配置时,都会遇到符号查找错误。

构建是由一个 SConscript (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) 完成的,在运行程序之后

产生以下错误:

检查 nm 的输出,我注意到符号在那里

然后,正如另一个答案所建议的,我检查了 ldd:

可以看出,libstdc++ 的选择是正确的。有人有解决此链接问题的建议吗?

0 投票
1 回答
903 浏览

cpu - 2018 年 gem5 到 McPAT template.xml 文件

我在尝试将 gem5 模拟器的输出转换为正确的 xml 格式以输入到 McPAT 时遇到很多问题。我使用的是最新版本的 gem5 2.0 版,我使用的是 2015 McPAT 版本。我从一个在 2010 版本中运行 McPAT 环境的人那里获得了一个 template.xml 文件,但是 gem5 中的统计信息和配置文件已经改变了格式。因此,我需要帮助来找到适用于 2018 年最新版本 gem5 和 McPAT 的适当 template.xml。

0 投票
1 回答
521 浏览

caching - 如何在没有缓存的 fs 模式下运行 Gem5 模拟器?

我可以在 fs 模式下运行 gem5,但现在我想从系统中删除缓存。那么我需要在 gem5/configs/example/fs.py 文件中进行哪些更改才能删除缓存并成功运行。

0 投票
1 回答
420 浏览

memory - GEM5 上的 DRAMSim2 只打印刷新命令

我已经成功地将 GEM5 设置为 fs 模式和 DRAMSim2 内存类型。我正在使用的命令是:

一切正常。现在,我在 DRAMSim2 代码中添加了一些注释,以分析代码流程和研究命令序列。然后,我再次编译 ARM 系统以保存更改。

现在,当我再次以 fs 模式运行 gem5 arm 时,它只是显示刷新命令的注释。像这样:

为什么我看不到其他命令,如 ACT、READ、WRITE 等。即使在操作系统启动时也应该有一些读、写、操作?我在 /gem5/ext/dramsim2/DRAMSim2/MemoryController.cpp 中添加了注释

gem5中添加DRAMSim2的步骤:

  1. 转到 gem5 目录中的 ext/dramsim2。
  2. 克隆 DRAMSim2:git clone git://github.com/dramninjasUMD/DRAMSim2.git
  3. 通过 scons 重新构建系统。
  4. 在 fs 模式下再次运行,最后添加 --mem-type=DRAMSim2。

在 ext/dramsim2/DRAMSim2 中有一个文件 MemoryController.cpp。在该文件中有一个函数 update()。有一个不同命令的 switch-case,如 READ、WRITE、ACTIVATE。在每个命令的相应情况下,我有在读取情况下添加 cout,例如 cout<<"read....",在刷新情况下添加 cout<<"refresh..."。再次重建系统并使用 fs 模式和 --mem-type=DRAMSim2 运行。现在我只是得到“刷新......”的评论,而不是其他评论,但应该还有其他评论,比如“读......”,所有这些都是因为在引导操作系统时有一些读、写、激活。