问题标签 [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.
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这意味着:
- gem5 提交:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4
- Linux 内核 v4.15 配置:https ://github.com/cirosantilli/linux-kernel-module-cheat/blob/05d8a324f74849f03404eb847f8da748e2e4502c/kernel_config_arm-gem5
邮件列表上的相关线程:http: //gem5-users.gem5.narkive.com/4xVBlf3c/verify-cache-configuration
作为比较,QEMU v2.11.0 x86 确实显示了缓存大小,但没有显示 ARM 的。
也许对于 ARM,我们需要修改引导加载程序以将其告知内核?但我不知道这些东西如何运作得很好:
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 切换AtomicSimpleCPU
到DerivO3CPU
.
邮件列表中相关的旧线程:http: //thread.gmane.org/gmane.comp.emulators.m5.users/14395
测试于:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4
openblas - gem5 系统调用仿真 OpenBLAS cblas_dgemm 失败,并显示“致命:系统调用 mbind (#237) unimplemented”
我正在开发一个程序,我需要在 SE 模式下使用 gem5 模拟调用 OpenBLAS 函数的程序。我的代码(在 C 中)如下
这是 OpenBLAS 的一个例子。我很确定我已经使用以下 makefile 命令静态编译了这个文件
问题是我可以在我的 ubuntu 机器上运行可执行文件,但它在 gem5 SE 模式下遇到致命错误。模拟输出如下
任何人都可以帮助我吗?谢谢。
gem5 - 如何使用 initrd 或使用 gem5 的 initramfs 启动 Linux 内核?
使用 QEMU,我既可以使用-initrd '${images_dir}/rootfs.cpio
initrd,也可以将 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
gem5 - 如何让gem5等待GDB连接在模拟开始时可靠中断并查看Linux内核的start_kernel?
在 QEMU 上,我可以使用-S -s
,它在开始模拟之前等待 GDB 连接
如何在 gem5 上做同样的事情,希望使用fs.py
脚本?
当我交换终端并连接时,模拟已经过去了start_kernel
。
我看到了--debug-break
旗帜,但我不知道如何使用它,如果我这样做:
运行失败:
- https://www.mail-archive.com/gem5-users@gem5.org/msg15206.html
- https://www.mail-archive.com/gem5-users@gem5.org/msg09298.html
编辑:进一步查看后,我现在发现提交 c2baaab0ed43ad09fc8b7fcda25207b6ccd6c0e3 添加了一个参数:
这一定是我要找的。但是我没有找到如何启用它fs.py
,似乎没有暴露?
gem5 - 如何在 gem5 中使用 m5 readfile 和 m5 execfile?
我希望m5 readfile
会从主机读取文件,并m5 execfile
从主机执行文件,但文档很少,我无法让它们工作。
也许路径是由readfile=
in确定的m5out/config.ini
,但我不知道在使用时如何修改该设置fs.py
;当我重新启动 gem5 时,它会覆盖该文件。
我能够使用相关m5 writefile
但是:
来宾:
主持人:
c++ - 运行程序且 nm 和 ldd 显示正确链接时如何解决“符号查找错误”?
每当我使用提交 c5ca3ef6b9ff967722b07bc160fa9068e0d9e39c 运行模拟器 Gem5 的特定版本/配置时,都会遇到符号查找错误。
构建是由一个 SConscript (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) 完成的,在运行程序之后
产生以下错误:
检查 nm 的输出,我注意到符号在那里
然后,正如另一个答案所建议的,我检查了 ldd:
可以看出,libstdc++ 的选择是正确的。有人有解决此链接问题的建议吗?
cpu - 2018 年 gem5 到 McPAT template.xml 文件
我在尝试将 gem5 模拟器的输出转换为正确的 xml 格式以输入到 McPAT 时遇到很多问题。我使用的是最新版本的 gem5 2.0 版,我使用的是 2015 McPAT 版本。我从一个在 2010 版本中运行 McPAT 环境的人那里获得了一个 template.xml 文件,但是 gem5 中的统计信息和配置文件已经改变了格式。因此,我需要帮助来找到适用于 2018 年最新版本 gem5 和 McPAT 的适当 template.xml。
caching - 如何在没有缓存的 fs 模式下运行 Gem5 模拟器?
我可以在 fs 模式下运行 gem5,但现在我想从系统中删除缓存。那么我需要在 gem5/configs/example/fs.py 文件中进行哪些更改才能删除缓存并成功运行。
memory - GEM5 上的 DRAMSim2 只打印刷新命令
我已经成功地将 GEM5 设置为 fs 模式和 DRAMSim2 内存类型。我正在使用的命令是:
一切正常。现在,我在 DRAMSim2 代码中添加了一些注释,以分析代码流程和研究命令序列。然后,我再次编译 ARM 系统以保存更改。
现在,当我再次以 fs 模式运行 gem5 arm 时,它只是显示刷新命令的注释。像这样:
为什么我看不到其他命令,如 ACT、READ、WRITE 等。即使在操作系统启动时也应该有一些读、写、操作?我在 /gem5/ext/dramsim2/DRAMSim2/MemoryController.cpp 中添加了注释
gem5中添加DRAMSim2的步骤:
- 转到 gem5 目录中的 ext/dramsim2。
- 克隆 DRAMSim2:git clone git://github.com/dramninjasUMD/DRAMSim2.git
- 通过 scons 重新构建系统。
- 在 fs 模式下再次运行,最后添加 --mem-type=DRAMSim2。
在 ext/dramsim2/DRAMSim2 中有一个文件 MemoryController.cpp。在该文件中有一个函数 update()。有一个不同命令的 switch-case,如 READ、WRITE、ACTIVATE。在每个命令的相应情况下,我有在读取情况下添加 cout,例如 cout<<"read....",在刷新情况下添加 cout<<"refresh..."。再次重建系统并使用 fs 模式和 --mem-type=DRAMSim2 运行。现在我只是得到“刷新......”的评论,而不是其他评论,但应该还有其他评论,比如“读......”,所有这些都是因为在引导操作系统时有一些读、写、激活。