gem5-21.2 已发布!
我们自豪地宣布 gem5 项目版本 21.2。 在此发布中,我们合并了来自 33 位独特作者(新作者和常客)的 790 次提交,他们来自学术界和工业界。 我们一如既往地感谢社区为维护和改进 gem5 所付出的所有时间。
21.2 亮点
增强的标准库
自 v21.1 以来以现已弃用的名称”组件库”存在,gem5 v21.2 发布将 gem5 标准库从 alpha 状态移出。 gem5 标准库的目的是为 gem5 用户提供一套标准的常用组件和实用程序,以帮助他们进行研究。 我们使用标准库的总体目标是从 gem5 配置文件中删除”样板”代码; 使 95% 的从模拟到模拟很少改变的活动以”现成”的方式提供给用户。 例如,希望实验缓存大小影响的用户可以使用 gem5 标准库设置处理器、内存系统并在合理的基准测试上进行测试,从而让他们完全专注于缓存大小变化的影响。
gem5 标准库作为 Python 包提供,包含以下内容:
- Components:一组包装 gem5 模型的 Python 类。
一些组件是预配置的以匹配真实硬件(例如,
SingleChannelDDR3_1600),其他组件是参数化的。 组件可以组合成可以模拟的boards。 - Resources:一组用于获取资源(磁盘镜像、应用程序、内核等)并将其合并到 gem5 模拟中的实用程序。 使用此模块允许您自动从 gem5-resources 下载和使用许多 gem5 的预构建资源(例如,内核和磁盘镜像)。
- Simulate:用于与 gem5 的模拟/运行功能接口。 注意:此包处于 beta 状态。 预计此包在未来的发布中会有 API 更改。 欢迎反馈。
- Prebuilt:这些是完全功能的预构建系统(
boards),可在 gem5 模拟中直接使用,设置最少。 此发布包括一个 X86 演示板 和一个如何使用它的示例。
注意: gem5 标准库的使用是可选的。 它不会更改任何已建立的 gem5 API,也不会更改如何创建 gem5 配置脚本。 在 v21.1 中运行的 gem5 配置脚本应在 v21.2 中继续运行。 但是,我们希望 gem5 库可以帮助用户创建模拟,就像所有库一样。
用户可以在 gem5 仓库的 configs/example/gem5_library 目录中找到包含 gem5 标准库的示例配置脚本。
作为 gem5 标准库如何简化运行 gem5 模拟的示例,请考虑以下脚本:
from gem5.prebuilt.demo.x86_demo_board import X86DemoBoard
from gem5.resources.resource import Resources
from gem5.simulate.simulator import Simulators
# Here we setup the board. The prebuilt X86DemoBoard allows for Full-System X86
# simulation.
board = X86DemoBoard()
# We then set the workload. Here we use the 5.4.49 Linux kernel with an X86
# Ubuntu OS. If these cannot be found locally they will be automatically
# downloaded.
board.set_kernel_disk_workload(
kernel=Resource("x86-linux-kernel-5.4.49"),
disk_image=Resource("x86-ubuntu-18.04-img"),
)
# We then setup the Simulator and run the simulation.
simulator = Simulator(board=board)
simulator.run()
可以使用以下命令执行此脚本:
scons build/X86/gem5.opt
./build/X86/gem5.opt <script>
该脚本将自动从 gem5-resources 获取正确的 Linux 内核和包含 Ubuntu 18.04 的磁盘镜像(如果主机系统上尚不存在)。 然后它将运行全系统 X86 模拟,直到操作系统完全启动,然后退出。 在引入 gem5 标准库之前,用户必须付出相当大的努力来构建这样的模拟(数百行 Python 代码)。
虽然我们希望我们以直观的方式设计了标准库,但用户可以参考 src/python/gem5 下的源代码。
在下个月,我们将更新 gem5 网站,提供有关使用 gem5 标准库的新教程和文档。
gem5 标准库的未来工作
在接下来的几个 gem5 发布中,我们将扩展标准库以包含更多组件和功能。 我们的一个大目标是提供经过验证的代表真实世界对应物的预构建组件和系统。
Simulate 模块将被扩展、改进并移出 beta 状态,因为它在 gem5 标准库中的作用变得更加清晰。
如果您想报告 gem5 标准库中的错误或有功能请求,请将其提交到 gem5 的 Jira 站点。 有关标准库使用的问题可以提交到 gem5 用户邮件列表。
LupIO:gem5 的友好 I/O 设备
LupIO 设备由 Joel Porquet-Lupine 教授 开发,作为一套用于教学的开源 I/O 设备。 它们被设计为建模一套完整的 I/O 设备,这些设备既不会在课堂环境中过于复杂而难以教授,也不会过于简单而无法转化为理解真实世界的设备。 UC Davis 的两名本科生 Melissa Jost 和 Laura Hinman 的目标是将 LupIO 设备整合到 gem5 中。 因此,gem5 v21.2 发布包括 LupIO 实时时钟、随机数生成器、终端设备、块设备、系统控制器、定时器设备、可编程中断控制器和处理器间中断控制器。
LupIO 的更详细概述可以在 Porquet-Lupine 教授的论文 “LupIO: a collection fo education-friendly I/O devices” 中找到,有关更广泛的 LupLab 研究组的信息可以在他们的网站上找到。
希望尝试 LupIO 设备的用户可以在 configs/example/lupv 目录中找到示例脚本和 README 文件。
注意: 这些 LupIO 设备已为 RISC-V 构建和测试。 但是,如果需要或希望,没有理由不能修改它们以与其他 ISA 目标一起工作。 我们欢迎 gem5 社区的进一步开发。
Arm 改进
在与 Arm Holdings 的持续和欢迎的合作中,对 gem5 Arm 实现进行了改进。 它们是:
- 改进的 Arm 架构扩展可配置性:我们改进了如何为 Arm 系统启用/禁用架构扩展。
我们现在使用统一的
ArmRelease对象来建模 FS/SE Arm 模拟支持的架构功能,而不是使用独立的布尔值。 - Arm TLB 可以存储部分条目:现在可以将
ArmTLB配置为 walk 缓存,存储转换表遍历期间获得的中间 PA。 - 实现了多级 TLB 层次结构:用户现在可以在 gem5 中组合/建模可自定义的多级 TLB 层次结构。 默认 Arm MMU 现在具有指令 LA TLB、数据 L1 TLB 和统一(指令 + 数据)L2 TLB。
- 为 gem5-SST 集成提供了 Arm 示例脚本。
GPU 改进
主要由 AMD, Inc. 和威斯康星大学持续努力改进了 gem5 的 GPU 支持。 在此发布中:
- Vega 支持:gfx900 (Vega) 独立 GPU 现在都受支持并使用 gem5-resources 应用程序 进行了测试。
- 额外的 GPU 应用程序:Pannotia 图分析基准测试套件 已添加到 gem5-resources,包括 Makefile、README 和关于如何在 gem5 中运行每个应用程序的示例命令。
- 回归测试:几个 GPU 应用程序现在作为夜间和每周回归的一部分进行测试,这提高了测试覆盖率并避免了引入意外的错误。
- 架构模型的次要更新:对 HSA 队列大小(以允许运行具有许多内核的更大 GPU 应用程序)和 TLB(以创建 GCN4 和 Vega 特定的 TLB)进行了小的更改和修复。我们还添加了之前在 GCN4 和 Vega 中未实现的新指令,并修复了导致不正确行为的某些指令的边界情况。
gem5-SST 桥接器恢复
在 gem5 的最近版本中,我们遗憾地失去了与结构模拟工具包 (SST) 集成的能力。
与 SST 社区合作,我们恢复了对将 gem5 核心连接到 SST 内存系统的支持。
在 v21.2 发布中,这已针对 RISC-V 和 Arm 进行了测试。
有关设置和运行 gem5 与 SST 的更多信息可以在 ext/sst/README.md 中找到。
新/更改的 API
-
[API 更改]:SConscript 文件中的所有
SimObject声明现在需要一个sim_objects参数,该参数列出该文件中声明的所有需要 C++ 包装器的 SimObject 类(即,具有定义的type属性的 SimObject 类)。 -
[新更改]:
SimObject类现在有一个可选的enums参数,必须列出在该 SimObject 文件中定义的所有 Enum 类型。 从技术上讲,这应该只包括生成 C++ 包装器的 Enum 类型,但截至 v21.2,所有 Enum 都这样做。
其他 v21.2 改进
- 已移除 master/slave 术语。 这是几个 gem5 发布的持续努力。 gem5 代码库现在不再使用它。
- 已实现 Arm v8.2-A FEAT_UAO。
- 文件系统调用的 “at” 变体已在 SE 模式中实现。
- SConscript 已重构以提高模块化。
- 已引入新的 “tester” CPU,它们模拟 GUPS。