[HOTFIX] In order to ensure v21 of gem5 remains compatible with future changes, the gem5 stdlib downloader has been updated to obtain the resources.json file from https://resources.gem5.org/resources.json. As this domain is under the gem5 project control, unlike the previous googlesource URL, we can ensure longer-term stability. The fix also ensures the downloader can parse plain-text JSON and base64 encoding of the resources.json file.
Version 21.2.1 is a minor gem5 release consisting of bug fixes. The 21.2.1 release:
SimObject declarations in SConscript files now require a
sim_objects parameter which should list all SimObject classes declared in that file which need c++ wrappers. Those are the SimObject classes which have a
type attribute defined.
Also, there is now an optional
enums parameter which needs to list all of the Enum types defined in that SimObject file. This should technically only include Enum types which generate c++ wrapper files, but currently all Enums do that so all Enums should be listed.
Previous release had an alpha release of the “components library.” This has now been wrapped in a larger “standard library”.
The gem5 standard library is a Python package which contains the following:
SingleChannelDDR3_1600) and others are parameterized. Components can be combined together onto boards which can be simulated.
components. This release has a “demo” board to show an example of how to use the prebuilt systems.
Examples of using the gem5 standard library can be found in
configs/example/gem5_library/. The source code is found under
We now support gem5 cores connected to SST memory system for gem5 full system mode. This has been tested for RISC-V and Arm. See
ext/sst/README.md for details.
LupIO devices were developed by Prof. Joel Porquet-Lupine as a set of open-source I/O devices to be used for teaching. They were designed to model a complete set of I/O devices that are neither too complex to teach in a classroom setting, or too simple to translate to understanding real-world devices. Our collection consists of a real-time clock, random number generator, terminal device, block device, system controller, timer device, programmable interrupt controller, as well as an inter-processor interrupt controller. A more detailed outline of LupIO can be found here: https://luplab.cs.ucdavis.edu/assets/lupio/wcae21-porquet-lupio-paper.pdf. Within gem5, these devices offer the capability to run simulations with a complete set of I/O devices that are both easy to understand and manipulate.
The initial implementation of the LupIO devices are for the RISC-V ISA. However, they should be simple to extend to other ISAs through small source changes and updating the SConscripts.
[HOTFIX] A commit introduced
resize() to initialize all storages. This caused data duplication in statistics and broke the Vector statistics. This hotfix initializes using loops which fixes the broken statistics.
[HOTFIX] A “‘deprecated’ attribute directive ignored” warning was being thrown frequently when trying to build v188.8.131.52. While this issue did not break the build, it made reading the build output difficult and caused confused. As such a patch has been applied to fix this issue.
Since v21.0 we have received 780 commits with 48 unique contributors, closing 64 issues on our Jira Issue Tracker. In addition to our first gem5 minor release, we have included a range of new features, and API changes which we outline below.
The purpose of the gem5 components library is to provide gem5 users a standard set of common and useful gem5 components, pre-built, to add to their experiments. The gem5 components library adopts a modular architecture design so components may be easily added, removed, and extended, as needed.
Examples of using the gem5 components library can be found in
Important Disclaimer: This is a pre-alpha release. The purpose of this release is to get community feedback. Though some testing has been done, we expect regular fixes and improvements until the library reaches a stable state. A Jira Ticket outlining TODOs and known bugs can be found at https://gem5.atlassian.net/browse/GEM5-648.
ROCm 4.0 is now officially supported.
gfx801 (Carrizo) and gfx803 (Fiji) are both supported and tested with the gem5-resources applications.
Better scoreboarding support has been added. This reduces stalls by up to 42%.
Accuracy and coverage stats have been added for prefetcher caches. Accuracy is defined as the ratio of the number of prefetch requests counted as useful over the total number of prefetch requests issued. Coverage is defined as the ratio of the number of prefetch requests counted as useful over the number of useful prefetch request plus the remaining demand misses.
The POWER 64-bit ISA is now supported in Syscall Execution mode.
gem5 now supports simulation of RISC-V Physical Memory Protection (PMP). Simulations can boot and run Keystone and Eyrie.
The gem5 replacement policies framework now supports more complex algorithms. It now allows using addresses, PC, and other information within a policy.
Note: Assuming this information is promptly available at the cache may be unrealistic.
Classes that handle set dueling have been created (Dueler and DuelingMonitor). They can be used in conjunction with different cache policies. A replacement policy that uses it has been added for guidance.
gem5 is now compilable and runnable on a RISC-V host system.
Deprecation MACROS have been added for deprecating namespaces (
GEM5_DEPRECATED_NAMESPACE), and deprecating other MACROs (
Note: For technical reasons, using old macros won't produce any deprecation warnings.
Snake case has been adopted as the new convention for name spaces. As a consequence, multiple namespaces have been renamed:
In addition some other namespaces were added:
gem5::ruby, for Ruby-related files
gem5::ruby::garnet, for garnet-related files
gem5::o3, for the O3-cpu's related files
gem5::memory, for files related to memories
m5 namespace has been renamed
The MACROs in base/compiler.hh of the form
M5_* have been deprecated and replaced with macros of the form
GEM5_*, with some other minor name adjustments.
MemObject simobject had been marked for deprecation and has now been officially removed from the gem5 codebase.
GCC version 5 and 6 are no longer supported. GCC 7 is now the minimum GCC compiler version supported. This changes allows has allowed us to move to the C++17 standard for development.
In addition, the minimum Clang version has increased to 6, and Clang 10 and 11 are now officially supported.
Version 21.0.1 is a minor gem5 release consisting of bug fixes. The 21.0.1 release:
errnowas incorrectly put as
--restore-simpoint-checkpointflag default to “False” instead of the ambiguous “None”.
scx_get_parameter_listfor ARM fast models.
--no-ltoflag has been removed.
Version 21.0 marks one full year of gem5 releases, and on this anniversary, I think we have some of the biggest new features yet! This has been a very productive release with 100 issues, over 813 commits, and 49 unique contributors.
This new protocol provides a single cache controller that can be reused at multiple levels of the cache hierarchy and configured to model multiple instances of MESI and MOESI cache coherency protocols. This implementation is based of Arm’s AMBA 5 CHI specification and provides a scalable framework for the design space exploration of large SoC designs.
In previous releases, this model was only partially supported. As of gem5 21.0, this model has been fully integrated and is tested nightly. This model currently only works in syscall emulation mode and requires using the gcn docker container to get the correct version of the ROCm stack. More information can be found in this blog post.
With this full support, we are also providing many applications as well. See gem5-resources for more information.
The RISC-V model in gem5 can now boot unmodified Linux! Additionally, we have implemented DTB generation and support the Berkeley Boot Loader as the stage 1 boot loader. We have also released a set of resources for you to get started: https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/develop/src/riscv-fs/
There are multiple places where the developers have reduced boilerplate.
create()functions! Previously, every
<SimObjectParams>::create()function to be manually defined. Forgetting to do this resulted in confusing errors. Now, this function is created for you automatically. You can still override it if you need to handle any special cases.
params(): Rather than defining a typedef and the
params()function for every
SimObject, you can now use the
See http://doxygen.gem5.org/release/current/classSimObject.html#details for more details on these two API changes.
Group) is still supported, but it is now deprecated.
GroupAPI, it may not be automatically dumped using new stat APIs (e.g., the Python API).
[HOTFIX] This hotfix release fixes three known bugs:
src/python/m5/util/convert.pyincorrectly stated kibibytes as ‘kiB’ instead of ‘KiB’. This has been fixed.
num_cpus_per_clusterwere cast to floats in
configs/ruby/MESI_Three_Level_HTM.py, which caused errors. This has been fixed so they are correctly cast to integers.
[HOTFIX] gem5 was failing to build with SCons 4.0.1 and 4.1.0. This hotfix makes the necessary changes to
site_scons/site_tools/default.py for gem5 to compile successfully on these versions of SCons.
[HOTFIX] A patch was apply to fix an error where booting Linux stalled when using the ARM ISA. This fix adds the parameter
have_vhe to enable FEAT_VHE on demand, and is disabled by default to resolve this issue.
[HOTFIX] This hotfix release fixes known two bugs:
[HOTFIX] A patch was applied to fix the Garnet network interface stats. Previously, the flit source delay was computed using both tick and cycles. This bug affected the overall behavior of the Garnet Network Model.
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!).
We are no longer using the “master” branch. Instead, we will have two branches:
We suggest all users use the stable (default) branch. However, to contribute your fixes and new changes to gem5, it should be contributed to the develop branch. See CONTRIBUTING.md for more details.
gem5 has also implemented a project code of conduct. See the CODE-OF-CONDUCT.md file for details. In the code of conduct “we pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.”
SimpleMemoryis no longer a drop-in replacement for a DRAM-based memory controller.
You can find details on the Jira issue
MESI_Three_Level_HTMRuby 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 -> ResponsePort xbar.slave -> xbar.cpu_side xbar.master -> xbar.mem_side MasterId -> RequestorId
tests/directory in mainline gem5.
Callbackclass was removed and replaced with C++ lambdas.
[HOTFIX] When using the ARM ISA, gem5 could crash when a guest tried to call m5ops. This was due to
m5ops_base being incorrectly declared in
src/arch/arm/ArmSystem.py. A fix was applied to remove this declaration.
[HOTFIX] A patch was applied to fix the RubyPrefetcher with MESI_Three_Level. Prior to this fix a segfault occurred.
[HOTFIX] A fix was applied to stop incorrect clock frequences being reported due to rounding errors.
Welcome to our first “official” gem5 release! gem5 v184.108.40.206 was a “test” release, but this one has release notes, so it must be official!
Thank you to everyone that made this release possible! This has been a very productive release with over 70 issues closed, over 500 commits, and 31 unique contributors. Below are some of the highlights, though I‘m sure I’ve missed some important changes.
scons build/<arch>/out/m5, not
LinuxX86Systemor similar SimObject).
Systemare now parameters of the
LinuxX86Systemare now part of
X86FsLinuxwhich is now the
workloadparameter of the
tests/main.py, except for the unittests.
fs.pyis now optional.
M5_PATH, but the name of the disk image must be specified.
enqueueto another “special” message buffer named