gem5-20.0 已发布!
经过漫长的等待和一些意外的问题,gem5-20.0 已发布! gem5 仓库的 master 分支现在指向 gem5-20 发布,而不是 gem5-19 发布。
感谢所有使此发布成为可能的人! 这是一个非常富有成效的发布,有 84 个问题,约 500 次提交,以及 30 位独特的贡献者。
下面,我介绍了 gem5-20.0 自 gem5-19 以来的主要更改,这些更改也可以在 RELEASE-NOTES.md 文件中找到。
这应该涵盖所有主要更改和面向用户的更改。
希望阅读更改日志后,您可以更新本地 gem5 更改,然后一切都会正常工作。
我确信这不会那么干净,但我们可以希望。
排行榜
首先,我想看看此发布中最多产的贡献者的快速排行榜。 展望未来,我希望这些排行榜能够在网站上实时自动更新。 如果您有兴趣帮助完成这项工作,请告诉我!
提交
v19.0.0.0 标签和 v20.0.0.0 标签之间总共有 510 次提交。 gem5 v19.0.0.0 于 2 月 20 日标记,因此此发布超过 91 天,或每天超过 5.5 次提交! 这是一个相当快的节奏!
拥有更多提交并不一定意味着您贡献更多。 但是,出现在前 10 名提交者列表中确实意味着您在 gem5 上投入了大量时间。 为此,社区感谢您!
235 Gabe Black
66 Giacomo Travaglini
46 Bobby R. Bruce
24 Nils Asmussen
21 Adrian Herrera
21 Daniel Carvalho
19 Nikos Nikoleris
14 Matthew Poremba
12 Timothy Hayes
9 Ciro Santilli
审查者
可能比原始提交更重要的是那些抽出时间审查代码的人。 以下是此次提交的前 10 名审查者。 再次感谢您的工作! 审查者发现的错误数量令人难以置信,没有这些人,gem5 的代码质量将受到影响。
虽然有 510 次提交,但有 642 次审查,平均每次更改 1.25 次审查。 我们计算审查的方式并不完美,因为它遗漏了”重新审查”,也跳过了”维护者”审查。 但是,我希望在未来的发布中,这个审查比率更接近每个变更集 2 次审查。
162 Jason Lowe-Power
120 Bobby R. Bruce
76 Nikos Nikoleris
58 Gabe Black
51 Daniel Carvalho
49 Giacomo Travaglini
44 Ciro Santilli
13 Matthew Poremba
10 Chun-Chen Hsu
6 Ayaz Akram
6 Andreas Sandberg
我想特别关注这个列表,因为有很多人做审查比编写代码更多。 这对社区非常有帮助,即使您没有添加代码,我们也感谢您的贡献!
经验教训
gem5 社区致力于根据最佳实践以及开发人员和用户的反馈不断改进其流程。在发布 gem5 20(我们的第二个正式 gem5 发布)时,我们学到了一些经验教训,这些经验教训将在开发未来版本的 gem5 时考虑。
gem5 项目遵循受 gitflow 启发的开发设置,其中我们的 “master” 分支在其 HEAD 包含 gem5 的最新发布,而单独的 “develop” 分支用于日常 gem5 开发。发布时,我们从 develop 创建一个 staging 分支。然后测试此 staging 分支,并在必要时修复,在此期间开发在 develop 分支上继续进行。一旦所有主要测试都显示通过,并且找不到其他错误,staging 分支合并到 master 和 develop 分支,然后随后删除,从而完成发布。总的来说,我们发现这个政策对我们有利,尽管还有改进的空间。
对于 gem5 20,我们有一个政策,在创建 staging 分支之前给用户整整两周的通知,另外还有两周用于测试和修复 staging 分支上的错误。我们的经验表明,在创建 staging 之前的两周通知在集中开发人员的注意力、促进发布所需功能的优先级排序以及总体上改善通过我们的 Gerrit 代码审查系统审查的补丁集周转方面是好的。然而,事后看来,两周对许多人来说通知太短,导致那些希望将其功能纳入 gem5 20 的人的大量 Gerrit 积压。在未来的发布中,我们将在创建 staging 分支之前给出整整一个月的通知。此外,我们在星期五创建了 staging 分支,目标是正好两周后(另一个星期五)将 staging 分支合并到 master 和 develop 分支。我们发现这导致了漫长的紧张更改周、疲劳和士气低落。星期五发布还有工作泄漏到周末或投诉直到下周一才解决的令人担忧的前景。展望未来,我们将承诺在周中发布。
我们还意识到,staging 分支存在两周的政策是不必要的限制性。鉴于只允许测试、错误修复和关键的最后时刻更改合并到分支中,我们认为没有理由 staging 分支不应该存在,直到其稳定性和可靠性得到充分证明。在未来的发布中,gem5 staging 分支将存在,直到测试运行以及这些测试暴露的错误被修复所需的时间。由于开发可以在 develop 分支上继续进行,这个更持久的 staging 分支不会干扰其他 gem5 活动。
在测试我们的 staging 分支时,我们发现了一些由我们不定期运行的测试暴露的错误。特别是,令我们惊讶的是,使用我们正式支持的编译器集构建不同 gem5 ISA 的简单检查揭示了许多编译错误。因此,我们将在 gem5 开发期间定期测试支持的编译器。我们还将继续改进我们的测试程序,更频繁地运行更多测试,特别是通过启动定期夜间构建,可以运行更大的测试和构建过程。在开发过程中更早地发现错误,与在 staging 分支中稍后发现和修复错误相比,将为我们节省大量工作。
最后,gem5 20 正式支持 Python3,同时向后兼容 Python2。我们了解到支持 Python3 和 Python2 是一项费力的任务,比我们预期的要多。已部署大量资源以确保 gem5 20 与 Python3 一起运行,同时仍为那些继续使用现已退役的 Python2 的人运行。然而,这种支持水平不能无限期地维持。因此,我们渴望在 gem5 的未来发布中加速放弃 Python2 支持。
我们欢迎任何其他关于如何改进此流程的反馈。 请随时通过邮件列表或提交问题告知我们。
更改日志
新功能
- gem5-resources 仓库
- 这个新仓库将存储用于创建测试和研究资源的所有源代码(例如,代码)。这包括磁盘镜像、测试二进制文件、内核二进制文件等。
- 使用源代码创建的二进制文件托管在 dist.gem5.org 上。
- 资源新页面的详细信息:http://www.gem5.org/documentation/general_docs/gem5_resources。
- 现在可以使用 image_file 参数使用镜像文件初始化内存 SimObject。
- [面向用户的更改] m5 实用程序已使用基于 scons 的新构建系统、测试以及更新和更一致的功能支持进行了改造。
- 要构建,现在使用
scons build/<arch>/out/m5,而不是make。 - 文档即将推出。
- 要构建,现在使用
- 使用预定义规则集,从模拟内的函数调用到 gem5 内的函数进行数据编组的强大支持。
- 开发人员可以为客户机<->模拟器调用指定 ABI,然后”只需调用函数”。
- 统一了伪指令、系统调用和其他支持。
- gem5 内的代码已更新。但是,添加了新伪操作的用户可能需要更新其代码。
- [PYTHON API 更改] 工作负载配置已提取到自己的对象中,简化了 System 对象并使工作负载配置更加模块化和灵活。
- 必须更新所有全系统配置/运行脚本(例如,任何使用
LinuxX86System或类似 SimObject 的脚本)。 System的许多参数现在是Workload的参数(参见src/sim/Workload.py)。- 例如,
LinuxX86System的许多参数现在是X86FsLinux的一部分,它现在是SystemSimObject 的workload参数。
- 例如,
- 有关更多详细信息,请参见 https://gem5-review.googlesource.com/c/public/gem5/+/24283/ 和 https://gem5-review.googlesource.com/c/public/gem5/+/26466。
- 必须更新所有全系统配置/运行脚本(例如,任何使用
- Sv39 分页已添加到 RISC-V ISA,使 gem5 接近在 RISC-V 上运行 Linux。
- (某些)裸机 OS 现在受支持。
- DRAM 模型的改进:
- 添加了验证可用命令带宽的支持。
- 添加了对多周期命令的支持。
- 添加了新的时序参数。
- 添加了交错突发的能力。
- 添加了 LPDDR5 配置。
已移除的功能
- 已放弃对 ALPHA ISA 的支持。
- 所有 ALPHA ISA 代码已删除
- ALPHA 的旧 “rcS” 脚本已删除
新支持的平台
- 现在完全支持使用 Python 3 编译和运行 gem5。
- 这需要大量代码更改。
- 可能仍有一些 Python 代码未更新。如果您发现任何代码无法与 python3 一起工作,请打开 Jira 工单。
- gem5 现在支持 Ubuntu 20.04。
- 现在支持使用 GCC 8 和 9 编译 gem5。
- 现在支持使用 clang 最高版本 9 进行编译。
测试改进
- 基于 Scons 的测试已迁移到 testlib 框架。
- 现在可以使用
tests/main.py运行测试,除了单元测试。 - 有关如何运行这些测试的更多信息,请查阅 TESTING.md。
- 现在可以使用
- 我们正在继续研究 CI 测试。Google Cloud Build 集成的大部分管道已经到位。有关详细信息,请参见 Jira 问题。
其他 API 更改
- [API 更改] Ruby 的预取器已重命名为 RubyPrefetcher。
- 任何带有预取器的 SLICC 协议都需要更新。
- 一些带有预取器的 Ruby 协议的配置脚本可能需要更新。
- [API 更改] SE 模式改进。
- 更好地支持 mmap 和相关系统调用。
- 用于跟踪 SE 模式分配的新虚拟内存区域 API。
- 实现系统调用时,客户机内存的分配方式会发生变化。gem5 中的所有代码都已更新,但如果有任何外部系统调用,它们可能需要更新。
- [命令行更改]
fs.py的--disk-image参数现在是可选的。- 但是,磁盘镜像名称不再隐含。
- 脚本仍然隐式搜索
M5_PATH,但必须指定磁盘镜像的名称。
- [API 更改] SLICC
queueMemory现在是enqueue。- 所有协议配置必须在内存控制器(目录)中使用另一个消息缓冲区进行更新。
- 所有协议 SLICC 文件必须将
queueMemoryRead和queueMemoryWrite替换为对另一个名为memQueue的”特殊”消息缓冲区的enqueue。 - 这允许缓存控制器和 DRAMCtrl 之间的有限缓冲。
- [API 更改] 添加了 Prefetcher 命名空间
- 所有预取器的名称已从
*Prefetcher更改为Prefetcher::* - 如果您有任何不在 gem5 主线中的预取器,您的代码可能需要更新。
- 所有预取器的名称已从
其他更改
- 实现了 ARMv8.3-CompNum,SIMD 复数扩展。
- 支持 Arm Trusted Firmware + u-boot 与新的 VExpress_GEM5_Foundation 平台
- 从源文件中删除了作者列表。
- 这最初是为了让未来的人知道联系谁。
- 但是,它难以维护并且很快过时。
- 版权未更改。
- gem5 功耗模型的改进。
- MESI_Three_Level Ruby 协议错误修复。
- Ruby 功能读取现在在更多情况下工作。
- 添加了 GCN3 ISA。
- 间接分支统计现在正常工作。