| --- |
| layout: post |
| title: "gem5-20.1 Released!" |
| author: Jason Lowe-Power |
| date: 2020-10-01 |
| categories: project |
| --- |
| |
| [gem5-20.1](https://gem5.googlesource.com/public/gem5/+/refs/heads/stable) has been released! |
| The **[stable](https://gem5.googlesource.com/public/gem5/+/refs/heads/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](https://gem5.atlassian.net/), over 650 commits (a 25% increase from the 20.0 release), and 58 unique contributors (a 100% increase!). |
| |
| [Below](#changelog), 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](https://gem5.googlesource.com/public/gem5/+/stable/RELEASE-NOTES.md). |
| 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](https://sfconservancy.org/news/2020/jun/23/gitbranchname/), [GitHub](https://github.com/github/renaming), 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](https://www.washingtonpost.com/opinions/2020/06/12/tech-industry-has-an-ugly-master-slave-problem/) 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](https://gem5.atlassian.net/browse/GEM5-9) and a simple "decoder ring" is shown below in the changelog. |
| |
| ### Code of conduct |
| |
| The gem5 project now has an official [Code of Conduct](https://gem5.googlesource.com/public/gem5/+/refs/heads/stable/CODE-OF-CONDUCT.md) 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](https://gem5.googlesource.com/public/gem5/+/refs/heads/stable/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](http://jenkins.gem5.org/) (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](http://www.gem5.org/2020/05/27/memory-controller.html) or Wendy's talks on YouTube: [Talk on new interface and NVM](https://www.youtube.com/watch?v=t2PRoZPwwpk) and the [talk on LPDDR5](https://www.youtube.com/watch?v=ttJ9_I_Avyc) |
| |
| * **[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 |
| |
| ```python |
| 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. |
| |
| ```python |
| 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](http://www.gem5.org/2020/05/27/heterogarnet.html) and [Srikant's talk on YouTube](https://www.youtube.com/watch?v=AH9r44r2lHA). |
| |
| * **[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](https://gem5.atlassian.net/browse/GEM5-587) |
| |
| * 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](https://gem5.googlesource.com/public/gem5-resources/). |
| * 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 |
| * <https://gem5-review.googlesource.com/c/public/gem5/+/25145> |
| * <https://gem5-review.googlesource.com/c/public/gem5/+/31874> |
| * **[API CHANGE]** Changed `setCPU` to `setThreadContext` 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> |