gem5-20.1 has been released! The stable branch of the gem5 repo now points to the gem5-20.1 release instead of the gem5-20.0 release. Overall, the 20.1 release was much smoother than the gem5-19 and gem5-20.1 release. I think we're learning how to do this!
Thank you to everyone that made this release possible! This has been a very productive release with 150 issues, over 650 commits (a 25% increase from the 20.0 release), and 58 unique contributors (a 100% increase!).
Below, I go over the major changes in gem5-20.1 since gem5-20.0, which can also be found in the RELEASE-NOTES.md
file. This should cover all of the major changes and user-facing changes. The hope is that after reading the changelog, you can make updates to your local gem5 changes and then things will just work. I‘m sure this *isn’t* going to be that clean, but we can hope.
First, I want to look at a quick leaderboard of the most prolific contributors for this release. Going forward, I‘d like for these leaderboards to be living and automatically updated on the website. If you’re interested in helping out on this, let me know!
There was a total of 510 commits between the v19.0.0.0 tag and the v20.0.0.0 tag. gem5 v19.0.0.0 was tagged on February 20th, so this release was over 91 days or over 5.5 commits per day! This was quite a breakneck pace!
Having more commits doesn‘t necessarily mean that you’ve contributed more. However, being on this list of the top 10 committers does mean that you've put a significant amount of your time into gem5. For that, the community thanks you!
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
Possibly more important than raw commits are the people who take time out of their days to review code. Here are the top 10 reviewers for this commit. Again, thank you for your work! The number of bugs that reviewers find is incredible, and without these people gem5's code quality would suffer.
While there were 510 commits, there were 642 reviews for an average of 1.25 reviews per change. The way we count reviews isn't perfect as it misses “re-reviews” and also skips “Maintainer” reviews. However, I would like to see this review ratio to be closer to 2 reviews per changeset in future releases.
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
I want to call special attention to this list as there are a number of people who do more reviewing than writing code. This is incredibly helpful to the community, and we appreciate your contributions even if they aren't adding code!
In this release, we are making a few large user-facing changes. We hope that these changes will be simple to consume, and they are backwards compatible in most cases.
The default branch for gem5 is now named “stable” instead of "master. “Stable” is a better description of what this branch is, and this name change is in line with changes instituted in the Git project, GitHub, and many others.
In this release, we have deprecated most uses of “master” and “slave” in gem5. These are problematic terms which do not encourage diversity and inclusion in the gem5 community. There were over 3000 instances of these words in our codebase!
In a large majority of cases, the new names for classes, variable names, and comments improved code readability and were more precise. In a few cases, we still use the master/slave terminology when the underlying technology which gem5 is modeling uses this terminology.
Details can be found in this Jira issue and a simple “decoder ring” is shown below in the changelog.
The gem5 project now has an official Code of Conduct in which “we pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.” The code of conduct codifies our standards and enforcement of those standards. If you have any questions on this code of conduct, please email the gem5-dev mailing list. If you would like to report a violation, the point of contact is David Wood or any other PMC member. See the MAINTAINERS file for emails.
One of our big pushes for this release was to improve our testing infrastructure. We have launched a Jenkins server (big thanks to Mike Upton!) to run our nightly tests and other integration tests. Right now, Jenkins runs the “long” regressions nightly and a suite of compiler tests weekly on the develop branch. We've also updated the CI tester (kokoro) to use a more up-to-date environment and generally improved the testing infrastructure.
We‘re looking forward to some more scripting of Gerrit soon. If you have ideas on adding more tests, or new things to test, we’d love to hear them!
You can find details about this on the gem5 blog or Wendy's talks on YouTube: Talk on new interface and NVM and the talk on LPDDR5
SimpleMemory
is no longer a drop-in replacement for a DRAM-based memory controller.Code from gem5-20.0
system.mem_ctrl = DDR3_1600_8x8() system.mem_ctrl.range = system.mem_ranges[0] system.mem_ctrl.port = system.membus.master
Now, you must create a memory controller and add a specific DRAM interface. Code from 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
One possible gotcha with this change is that the SimpleMemory
is like the MemCtrl
but does not have a DRAM interface. Thus, SimpleMemory
is not a drop-in replacement for the DRAM controllers from gem5-20.0 and before.
You can find details about this on the gem5 blog and Srikant's talk on YouTube.
You can find details on the Jira issue
MESI_Three_Level_HTM
Ruby protocol, and it is only implemented in Ruby.See http://www.gem5.org/documentation/general_docs/building for gem5's current dependencies.
MasterPort -> RequestorPort SlavePort -> ReceiverPort xbar.slave -> xbar.cpu_side xbar.master -> xbar.mem_side MasterId -> RequestorId
tests/
directory in mainline gem5.setCPU
to setThreadContext
in InterruptsCompressor
namespace.Callback
class was removed and replaced with C++ lambdas.