gem5-20.1 已发布!
gem5-20.1 已发布! gem5 仓库的 stable 分支现在指向 gem5-20.1 发布,而不是 gem5-20.0 发布。 总的来说,20.1 发布比 gem5-19 和 gem5-20.1 发布顺利得多。 我认为我们正在学习如何做到这一点!
感谢所有使此发布成为可能的人! 这是一个非常富有成效的发布,有 150 个问题,超过 650 次提交(比 20.0 发布增加 25%),以及 58 位独特的贡献者(增加 100%!)。
下面,我介绍了 gem5-20.1 自 gem5-20.0 以来的主要更改,这些更改也可以在 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 上投入了大量时间。 为此,社区感谢您!
163 Gabe Black
69 Giacomo Travaglini
57 Bobby R. Bruce
45 Hoa Nguyen
27 Tony Gutierrez
24 Kyle Roarty
20 Daniel Carvalho
19 Emily Brickey
17 Tiago Mück
16 Timothy Hayes
审查者
可能比原始提交更重要的是那些抽出时间审查代码的人。 以下是此次提交的前 10 名审查者。 再次感谢您的工作! 审查者发现的错误数量令人难以置信,没有这些人,gem5 的代码质量将受到影响。
虽然有 510 次提交,但有 642 次审查,平均每次更改 1.25 次审查。 我们计算审查的方式并不完美,因为它遗漏了”重新审查”,也跳过了”维护者”审查。 但是,我希望在未来的发布中,这个审查比率更接近每个变更集 2 次审查。
265 Jason Lowe-Power
91 Andreas Sandberg
73 Gabe Black
68 Giacomo Travaglini
67 Matt Sinclair
61 Bobby R. Bruce
55 Nikos Nikoleris
48 Anthony Gutierrez
46 Daniel Carvalho
18 Hoa Nguyen
我想特别关注这个列表,因为有很多人做审查比编写代码更多。 这对社区非常有帮助,即使您没有添加代码,我们也感谢您的贡献!
主要的面向用户的更改
在此发布中,我们进行了一些大型的面向用户的更改。 我们希望这些更改易于使用,并且在大多数情况下向后兼容。
新的默认分支名称:stable
gem5 的默认分支现在命名为 “stable” 而不是 “master”。 “Stable” 是对此分支的更好描述,此名称更改与 Git 项目、GitHub 和许多其他项目实施的更改一致。
弃用 “master” 和 “slave”
在此发布中,我们已弃用 gem5 中 “master” 和 “slave” 的大多数用法。 这些是有问题的术语,不利于 gem5 社区的多样性和包容性。 我们的代码库中有超过 3000 个这些词的实例!
在绝大多数情况下,类、变量名和注释的新名称提高了代码可读性并且更加精确。 在少数情况下,当 gem5 正在建模的底层技术使用此术语时,我们仍使用 master/slave 术语。
详细信息可以在此 Jira 问题中找到,并且在下面的更改日志中显示了一个简单的”解码环”。
行为准则
gem5 项目现在有一个官方的行为准则,其中”我们承诺以有助于开放、欢迎、多样、包容和健康社区的方式行动和互动。” 行为准则规定了我们的标准以及这些标准的执行。 如果您对此行为准则有任何疑问,请发送电子邮件至 gem5-dev 邮件列表。 如果您想报告违规行为,联系人是 David Wood 或任何其他 PMC 成员。 请参见 MAINTAINERS 文件以获取电子邮件。
测试
我们在此发布中的一大推动是改进我们的测试基础设施。 我们启动了一个 Jenkins 服务器(非常感谢 Mike Upton!)来运行我们的夜间测试和其他集成测试。 目前,Jenkins 在 develop 分支上每晚运行”长时间”回归测试,每周运行一套编译器测试。 我们还更新了 CI 测试器 (kokoro) 以使用更新的环境,并总体上改进了测试基础设施。
我们期待很快对 Gerrit 进行更多脚本编写。 如果您有关于添加更多测试或新测试内容的想法,我们很乐意听取!
更改日志
20.1 中的新功能
新的 DRAM 接口:由 Wendy Elsasser 贡献
您可以在 gem5 博客 或 Wendy 在 YouTube 上的演讲中找到有关此的详细信息:关于新接口和 NVM 的演讲 和 关于 LPDDR5 的演讲
- [PYTHON API 更改]:DRAM 模型现在是DRAM 接口,它是内存控制器的子项。下面显示了示例更改。
- DRAM 分为内存控制器和 DRAM 接口
SimpleMemory不再是基于 DRAM 的内存控制器的直接替代品。
- 添加了 LPDDR5 模型
- 添加了 NVM 模型
- 可以使用 NVM 和 DRAM 的新内存控制器模型
gem5-20.0 的代码
system.mem_ctrl = DDR3_1600_8x8()
system.mem_ctrl.range = system.mem_ranges[0]
system.mem_ctrl.port = system.membus.master
现在,您必须创建内存控制器并添加特定的 DRAM 接口。 gem5-20.1 的代码。
system.mem_ctrl = MemCtrl()
system.mem_ctrl.dram = DDR3_1600_8x8()
system.mem_ctrl.dram.range = system.mem_ranges[0]
system.mem_ctrl.port = system.membus.master
此更改的一个可能陷阱是 SimpleMemory 类似于 MemCtrl 但没有 DRAM 接口。
因此,SimpleMemory 不是 gem5-20.0 及之前版本的 DRAM 控制器的直接替代品。
改进的片上互连模型,HeteroGarnet:由 Srikant Bharadwaj 贡献
您可以在 gem5 博客 和 Srikant 在 YouTube 上的演讲 中找到有关此的详细信息。
- [面向用户的更改]:网络类型选项现在是 “simple” 和 “garnet”,而不是 “garnet2.0”。(如果使用 “garnet2.0”,您将收到警告,直到 gem5-20.2)
- 添加了时钟域交叉和串行化/反串行化 (SERDES) 的模型
事务内存支持:由 Timothy Hayes 贡献
您可以在 Jira 问题 上找到详细信息
- gem5 现在支持 Arm TME(事务内存扩展)
- 事务内存仅在
MESI_Three_Level_HTMRuby 协议中实现,并且仅在 Ruby 中实现。 - 这实现了架构状态的检查点机制和推测性内存更新的缓冲。
- IBM POWER 和 x86 HTM 扩展尚未实现。
其他新功能
- 外部模拟器集成
- 添加了对 DRAMSim3 的支持
- 重新添加了对 DRAMSim2 的支持
- 添加了 Armv8-A 自托管调试扩展
- 对没有 GICv2 硬件的 Armv8 主机的 KVM 支持
- 实现了 ARMv8 的 Secure EL2
已移除的功能
- 放弃了对 mercurial 版本控制的支持
新支持的平台
- 现在支持 GCC 最高 10.2。最低 GCC 现在是 5.0。
- 现在支持 Clang 最高版本 9。最低 Clang 现在是 3.9。
不再支持的平台
- [面向用户的更改]:Python 2 已正式弃用。我们将在下一个发布中放弃对 Python 2 的支持。在此发布中,如果您使用 Python 2,您将收到警告。
- [面向用户的更改]:我们已放弃对 GCC 4.X 的支持
- [面向用户的更改]:我们已放弃对 Scons 2.x 的支持(注意:这是 Ubuntu 16.04 中的默认值。使用 pip 安装更新的 scons。)
有关 gem5 的当前依赖项,请参见 http://www.gem5.org/documentation/general_docs/building。
其他更改
弃用 “master” 和 “slave”
- [API 更改]:已弃用名称 “master” 和 “slave”
- 特别感谢 Lakin Smith、Shivani Parekh、Eden Avivi 和 Emily Brickey。
- 下面是大多数名称更改的指南。
- 目标是用更具描述性和精确的术语替换有问题的语言。
- 此更改可能会引入一些错误,因为 Python 配置中有许多地方依赖于”鸭子类型”。
- 此更改主要是向后兼容的,将发出警告直到至少 gem5-20.2。
MasterPort -> RequestorPort
SlavePort -> ReceiverPort
xbar.slave -> xbar.cpu_side
xbar.master -> xbar.mem_side
MasterId -> RequestorId
测试改进
- 我们现在有 Jenkins 服务器(http://jenkins.gem5.org/)运行夜间和其他大型测试。特别感谢 Mike Upton 设置了这个!
- 夜间测试运行”长时间”回归测试(添加了许多测试)。
- 编译器测试每周运行一次 gem5 构建,针对许多目标和所有编译器。
- 更新了 CI 测试器 (kokoro) 以使用更新的环境。
- 改进了测试基础设施。
- 几乎所有测试资源现在都在 gem5-resources 仓库 中可用。
- 总体上清理了主线 gem5 中的
tests/目录。 - 许多通用的 testlib 改进。
更多更改
- [PYTHON API 更改]:m5.stats.dump() root 参数重命名为 roots 以反映它现在接受 SimObject 列表的事实
- [面向用户的更改]:检查点兼容性可能被以下更改破坏
- [API 更改] 在 Interrupts 中将
setCPU更改为setThreadContext - 添加了
Compressor命名空间。 - [API 更改]
Callback类已被删除并替换为 C++ lambda。 - 许多对象的统计已更新为”新”统计样式。
- 更多对象的 API 已正式化。请参见 http://www.gem5.org/documentation/general_docs/gem5-apis