问题标签 [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.
caching - 如何向 gem5 ruby 缓存添加时间戳?
我目前正在尝试实现一个缓存一致性协议,我需要为每个缓存块存储当前的全局时间戳。
我是否需要CacheMemory.hh
在AbstractEntry.hh
其他地方或其他地方更新时间戳变量?
我在哪里可以找到有关缓存请求如何工作的详细说明?
pthreads - 如何运行 m5threads?
我试图在 x86 SE 模式下运行一个简单的 pthread 程序。
m5threads 是唯一的方法吗?
当我尝试使用编译时libpthread
,make
出现以下错误:
有什么我想念的吗?可能是一些缺少的路径变量或某处的代码的一些小的修改。因为我有文件spinlock_x86.h
和tls_defs.h
.
gem5 - 良好性能的 Gem5 系统要求
我必须为我的项目使用 gem5,但想知道我应该购买什么硬件配置。我拥有一台“足够好”的笔记本电脑,但遗憾的是它不再可靠地工作,所以我不得不坚持使用一些低端笔记本电脑。我应该购买什么最低价格的处理器?AMD还是英特尔?也买不起苹果笔记本。任何帮助都深表感谢
memory - 宝石 5 内存分配
我在 gem5 上做了一个 x86 架构。现在,如果我们使用 malloc 运行带有内存分配代码的可执行文件,那么该内存将从我的系统中分配,还是分配给此 x86 架构的虚拟内存。
python - 可以运行python文件,编辑它,然后在第二个终端运行它吗
我正在运行一个模拟(稍后会详细介绍),这个模拟的文件之一是一个包含配置详细信息的 python 文件。我想运行这个模拟的多个版本,但我不知道如果运行一个模拟,打开另一个终端,然后编辑 python 文件并运行第二个模拟会破坏第一个模拟。python是否有“源代码”的概念与实际过程分开?我可以安全地编辑文件吗?这些模拟需要一段时间。
(所以,我正在运行 gem5 模拟,我需要运行多个版本的模拟,不同的 CPU 属性。以防万一有帮助。)
network-programming - 我们可以在 Gem5 模拟器(Garnet 2.0)中添加一个新的仲裁器吗?
我想开发一个新的路由器仲裁器。GEM5(Garnet2.0)模拟器能否接受新的仲裁器。我知道它实现了循环仲裁器。
谢谢
gem5 - 如何在 gem5 中进行从访客到主机的端口转发,反之亦然?
例如,我希望能够对客人做:
然后在主机上:
并让客人收到asdf
.
我最初的目标是设置gdbserver
,但这也可以用于模拟集群等有趣的事情。
对于特定情况gdbserver
,也可以使用 gem5 的默认 GDB 服务器逐步调试用户态进程,如此处所述,但这可能更不可靠。
例如,在 QEMU 中,我可以这样做:
我也对来宾到主机的方向感兴趣,尽管我还没有在 QEMU 中做到这一点:https ://serverfault.com/questions/769874/how-to-forward-a-port-from-guest-到主机在 qemu-kvm
如果不可能,我将接受来自知名开发人员的“不可能的答案”:-)
https://www.mail-archive.com/gem5-users@gem5.org/msg15207.html
gem5 - 如何计算gem5中基准测试开始和结束之间的CPU时钟周期数?
如何计算gem5中基准测试开始和结束之间的CPU时钟周期数?
我对以下所有情况都感兴趣:
完整的系统用户态基准。也许
m5
来宾工具有办法做到这一点?裸机基准。当 gem5 退出时,它会自动转储统计信息,因此主要问题是如何跳过引导加载程序的周期并直接进入基准测试本身。
除了使用仪器说明修改基准源之外,还有其他方法吗?如何详细编写这些仪器说明?
系统调用仿真基准。我认为 gem5 只是
stats.txt
在运行结束时输出,然后你只是 grepsystem.cpu.numCycles
,但我必须确认它,目前被阻止:How to solve "FATAL: kernel too old" when running gem5 in syscall emulation SE mode?
我想用这个来学习:
- 了解 CPU 的工作原理
- 如何优化汇编代码或编译器设置以在给定 CPU 上以最佳方式运行
gem5 - 在系统调用仿真 SE 模式下运行 gem5 时如何解决“致命:内核太旧”?
Ubuntu 17.10,C 程序:
gem5 版本:da79d6c6cde0fbe5473ce868c9be4771160a003b 2017 年 12 月
海合会版本:
编译并运行:
结果:
在 X86 上类似。
这已经在邮件列表中被反复询问,所以让我们在这里集中讨论并确定最佳解决方案。
- https://www.mail-archive.com/gem5-users@gem5.org/msg13772.html
- https://www.mail-archive.com/gem5-users@gem5.org/msg12385.html
- https://www.mail-archive.com/gem5-users@gem5.org/msg12383.html
- https://www.mail-archive.com/gem5-users@gem5.org/msg05538.html
https://www.mail-archive.com/gem5-users@gem5.org/msg12385.html提供了很好的问题描述:
_start() 开始后不久,C 库发出 uname() 系统调用以验证最低内核版本。如果您查看 gem5/src/arch/arm/linux/process.cc http://process.cc,您将看到在 32 位模式下,模拟的系统调用返回“3.0.0”,而在 64 位模式下,则返回“3.7. 0+”。在 crosstool-ng 中配置工具链时,有一个选项“CT_LIBC_GLIBC_MIN_KERNEL_VERSION”。如果这大于模拟的 uname() 报告的值,glibc 将致命()。
我注意到,如果我使用魔法树内 blob:
那么这个blob有什么特别之处,它是如何生成的?
源代码上允许的源版本
823d9d177fded16af07114d70b5c26caaec6aa00 告诉我们,定义假内核版本的 x86 点是src/arch/x86/linux/process.cc
.
类似的 grepping 告诉我们,arm 32 在 3.0 和 64 在 3.7.0。
crosstool-ng
尝试
一种有希望的可能性是使用 crosstool-ng https://github.com/crosstool-ng/crosstool-ng来生成编译器,这使得事情更加可控。
从 ab3c204aee88f08481f1f63825d0e94b082ef84e 开始,我尝试了以下两个配置:
./ct-ng arm-cortex_a15-linux-gnueabihf
./ct-ng aarch64-unknown-linux-gnu
它使用 GCC 8.1 为内核 4.16 编译,然后在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 上的静态编译分别失败:
和:
但我真的不明白任何失败:
openat
是在更老的内核 2.6.16 中引入的,它看起来并不那么奇特,所以为什么还不实现呢?然后我们可以在源代码中看到它是为 64 位实现的,但由于某种原因没有为 32 位实现。
我还尝试将 arm 的最低内核版本设置为 3.2,但不出所料,它没有帮助。
mrs
为什么不执行指令?ARM参考说这个指令编码结束于:这是:
所以也许它与 匹配
0x4d5380000
,但我不确定。
使用不同的 crosstool-ng 设置也很有趣,特别是目标内核版本,在该版本中默认为最新的 v4.16,看看它是否解决了系统调用问题。
于 2018 年 5 月在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 上测试。
gem5 - 何时在 gem5 中将完整系统 FS 与系统调用仿真 SE 与用户态程序一起使用?
由于系统调用仿真更容易设置,我想知道在运行用户态程序时使用完整系统仿真有什么好处。
或者换句话说,在整个系统中建模了哪些有趣的方面,而不是系统调用仿真模式,它们什么时候很重要?
在文档中提到:http ://gem5.org/Splash_benchmarks完整系统是
现实的:你得到了实际的 Linux 线程调度器来调度你的线程
这是唯一的优势,还是对优化应用程序或研究微架构的用户有其他优势?
我还怀疑 MMU 仿真是另一个重要特性,它只能在完整系统模式下正确建模,并且可能会影响程序性能。