gem5-20.1 Released!
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.
Leaderboard
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!
Commits
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
Reviewers
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!
Major user-facing changes
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.
New default branch name: stable
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.
Deprecating “master” and “slave”
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.
Code of conduct
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.
Testing
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!
Changelog
New features in 20.1
New DRAM interface: Contributed by Wendy Elsasser
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
- [PYTHON API CHANGE]: The DRAM models are now DRAM interfaces which is a child of the memory controller. Example change shown below.
- The DRAM is split into a memory controller and a DRAM interface
SimpleMemory
is no longer a drop-in replacement for a DRAM-based memory controller.
- LPDDR5 model added
- NVM model added
- New memory controller model that can use both NVM and DRAM
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.
Improved on-chip interconnect model, HeteroGarnet: Contributed by Srikant Bharadwaj
You can find details about this on the gem5 blog and Srikant’s talk on YouTube.
- [USER-FACING CHANGE]: The network type options are now “simple” and “garnet” instead of “garnet2.0”. (If “garnet2.0” is used, you will get a warning until gem5-20.2)
- Added models for clock domain crossings and serialization/deserialization (SERDES)
Transactional memory support: Contributed by Timothy Hayes
You can find details on the Jira issue
- gem5 now supports Arm TME (transactional memory extensions)
- Transactional memory is only implemented in the
MESI_Three_Level_HTM
Ruby protocol, and it is only implemented in Ruby. - This implements a checkpointing mechanism for the architectural state and buffering of speculative memory updates.
- IBM POWER and x86 HTM extensions have not been implemented.
Other new features
- External simulator integrations
- Added support for DRAMSim3
- Added back support for DRAMSim2
- Armv8-A Self Hosted Debug extension added
- KVM support for Armv8 hosts without GICv2 hardware
- Implemented Secure EL2 for ARMv8
Removed features
- Dropped support for mercurial version control
New supported platforms
- GCC up to 10.2 is now supported. Minimum GCC is now 5.0.
- Clang up to version 9. Minimum Clang is now 3.9.
Platforms no longer support
- [USER-FACING CHANGE]: Python 2 is officially deprecated. We will drop support for Python 2 in the next release. In this release you will get a warning if you’re using Python 2.
- [USER-FACING CHANGE]: We have dropped support for GCC 4.X
- [USER-FACING CHANGE]: We have dropped support for Scons 2.x (Note: this is the default in Ubuntu 16.04. Use pip to install a newer scons.)
See http://www.gem5.org/documentation/general_docs/building for gem5’s current dependencies.
Other changes
Deprecating “master” and “slave”
- [API CHANGE]: The names “master” and “slave” have been deprecated
- Special thanks to Lakin Smith, Shivani Parekh, Eden Avivi, and Emily Brickey.
- Below is a guide to most of the name changes.
- The goal was to replace problematic language with more descriptive and precise terms.
- There may be some bugs introduced with this change as there were many places in the Python configurations which relied on “duck typing”.
- This change is mostly backwards compatible and warning will be issued until at least gem5-20.2.
MasterPort -> RequestorPort
SlavePort -> ReceiverPort
xbar.slave -> xbar.cpu_side
xbar.master -> xbar.mem_side
MasterId -> RequestorId
Testing improvements
- We now have Jenkins server (http://jenkins.gem5.org/) running nightly and other large tests. Special thanks to Mike Upton for setting this up!
- Nightly tests run the “long” regression tests (many tests added).
- Compiler tests run gem5 build for many targets and all compilers once a week.
- Updated CI tester (kokoro) to use a more up-to-date environment.
- Improved the testing infrastructure.
- Almost all testing resources now available in gem5-resources repository.
- Generally cleaned up the
tests/
directory in mainline gem5. - Many general testlib improvements.
More changes
- [PYTHON API CHANGE]: m5.stats.dump() root argument renamed to roots to reflect the fact that it now takes a list of SimObjects
- [USER-FACING CHANGE]: Checkpoint compatibility may be broken by the following changes
- [API CHANGE] Changed
setCPU
tosetThreadContext
in Interrupts - Added a
Compressor
namespace. - [API CHANGE] The
Callback
class was removed and replaced with C++ lambdas. - Many objects’ stats have been updated to the “new” stats style.
- Many more objects have had their APIs formalized. See http://www.gem5.org/documentation/general_docs/gem5-apis