layout: post title: “gem5-20.1 Released!” author: Jason Lowe-Power date: 2020-10-01 categories: project

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