website: Add roadmap for gem5-20.1
Signed-off-by: Jason Lowe-Power <firstname.lastname@example.org>
Reviewed-by: Bobby R. Bruce <email@example.com>
Reviewed-by: Andreas Sandberg <firstname.lastname@example.org>
Reviewed-by: Jason Lowe-Power <email@example.com>
Maintainer: Jason Lowe-Power <firstname.lastname@example.org>
Tested-by: Jason Lowe-Power <email@example.com>
diff --git a/_posts/2020-07-01-gem5-20-1-roadmap.md b/_posts/2020-07-01-gem5-20-1-roadmap.md
new file mode 100644
@@ -0,0 +1,160 @@
+title: "gem5-20.1 Roadmap"
+author: Jason Lowe-Power and Bobby Bruce
+After our [successful release](./2020-05-21-gem5-20.md) of gem5-20, it's time to start thinking about gem5's next release, gem5-20.1!
+We received great feedback during the [gem5 town hall](https://www.youtube.com/watch?v=fvCXmMBblZY) held with the [gem5 workshop](http://www.gem5.org/events/isca-2020) about the new features that the community would like to see for the next release.
+Based on this feedback, below are the major projects, with links to the Jira issues, that we are planning to complete for the gem5-20.1 release.
+We welcome any feedback on this roadmap!
+Please use the [gem5-dev mailing list](/mailing_lists) to let us know what you think!
+If you would like to suggest other features/fixes to be included in gem5-20.1, please mark them as "fix version" "gem5 20.1" on Jira.
+You can find all of the current issues that we are planning to complete by the 20.1 release on [this Jira page](https://gem5.atlassian.net/projects/GEM5/versions/10003) (note: you may need be logged in to see the release page).
+## Continuing to define gem5's APIs
+In gem5-20, we started towards defining internal APIs for gem5.
+You can see the work we did in the [Doxygen documentation](http://doxygen.gem5.org/release/current/modules.html).
+In gem5-20, our goal was modest.
+We only added information on [`SimObject`](http://doxygen.gem5.org/release/current/group__api__simobject.html) and the classes that [`SimObject`](http://doxygen.gem5.org/release/current/group__api__simobject.html) depends on.
+Specifically, we codified APIs for [`SimObject`](http://doxygen.gem5.org/release/current/group__api__simobject.html), [`Drain`](http://doxygen.gem5.org/release/current/group__api__drain.html), [`Serialize`](http://doxygen.gem5.org/release/current/group__api__serialize.html), [`EventQueue`](http://doxygen.gem5.org/release/current/group__api__eventq.html), and [Statistics](http://doxygen.gem5.org/release/current/group__api__stats.html).
+To add these to the API, we have tagged the methods that are part of the API with [Doxygen groups](https://www.doxygen.nl/manual/grouping.html).
+For now, we will rely on code review to catch any changes to the API.
+We will strive to keep APIs constant, but in order to improve the simulator, APIs will have to change.
+However, APIs will only change at "major" releases, and we will add information to the release notes with details on how to update your code if it was using the changed API.
+For gem5-20.1, we will be further expanding the methods covered by the API definitions.
+We will focus on the following:
+- Adding more documentation to the current APIs including the statistics, drain, serialize, event queue, and `SimObject`.
+- Define the "external" APIs for the event queue. These are useful to other simulators that want to hook into gem5 either by driving the event queue themselves or having gem5's event queue drive the external simulator.
+- The port interface. Ports are one of the most widely used objects in gem5. They facilitate communication between all memory system objects. This interface has changed somewhat over the past few years and [the documentation](http://www.gem5.org/documentation/learning_gem5/part2/memoryobject/) hasn't kept up. We will make sure this interface is well documented.
+- "Base" utility classes. There are many classes in the `base/` directory that are used throughout the codebase. We will add these as APIs to make sure these widely used interfaces don't change without documentation.
+We are also considering the best way to document the input and output of the simulator.
+Specifically, we believe that the output files (e.g., `stats.txt`, `config.ini`, checkpoints, etc.) should be stable across releases.
+However, Doxygen is probably not the right way to document these interfaces.
+We'd love to hear your ideas on how best to document and enforce these interfaces.
+See [this Jira Epic](https://gem5.atlassian.net/browse/GEM5-172) to follow the current progress on this issue.
+## Improve statistics
+The most common feedback we received at the gem5 users town hall was that statistics were difficult to use and not flexible enough.
+To this end, we'll be working to [improve the statistics](https://gem5.atlassian.net/browse/GEM5-644) in gem5-20.1.
+Our first step, will be to [convert the stats for all SimObjects](https://gem5.atlassian.net/browse/GEM5-645) to be "new style" statistics.
+About a year ago, we added support for [hierarchical statistics](https://gem5-review.googlesource.com/c/public/gem5/+/19368).
+This change significantly improves the usability of the statistics package.
+However, we decided to keep backwards compatibility, and at the time, we didn't update all of the SimObjects to use this new API.
+For gem5-20.1, we will migrate all of the SimObjects to use the new style, and we will officially deprecate the old API.
+The other major feedback we received about statistics was that the current output was not easily machine readable.
+To this end, we will [add new output formats that are more machine readable](https://gem5.atlassian.net/browse/GEM5-646).
+The major formats we're currently considering are csv, something compatible with [pandas dataframes](https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html#dataframe), and [protobuf](https://developers.google.com/protocol-buffers) for streaming time series stats.
+In addition to the new Jira issues linked above, there is some ongoing work with [changesets currently on gerrit](https://gem5-review.googlesource.com/c/public/gem5/+/28630/) (or recently merged).
+## Improve python interfaces
+The Python<->C++ interface is one of gem5's best features.
+However, much of this code was written 10+ years ago, and there have been many additions to this code.
+This is especially true of the "default" configuration files, `se.py` and `fs.py` which have grown to be 1000s of lines of code (when the imported files are included).
+For gem5-20.1, we will begin to [refactor some of this python code](https://gem5.atlassian.net/browse/GEM5-432) to improve the design, add more documentation, and make things easier to use.
+For now, this will be a *new* library (`gem5` instead of `m5`) to provide backwards compatibility for all of the configs that are currently used.
+We will also [develop a "unit tests" interface](https://gem5.atlassian.net/browse/GEM5-433) for testing *python* level SimObjects.
+This won't be *exactly* unit tests, but will allow SimObject designers to test their objects without having to run an entire gem5 simulation.
+This will require building all of gem5 for now, but we'll think about a future where this isn't required.
+We will [document the Python API](https://gem5.atlassian.net/browse/GEM5-647) with [pydoc documentation](https://docs.python.org/3.8/library/pydoc.html).
+This will allow us to define this API more clearly.
+We will also begin to include [Python type annotations](https://docs.python.org/3/library/typing.html).
+However, since type annotations require Python 3.5+, we will initially just document this in the documentation strings, and move it into the main code at a later date.
+Finally, we will start developing a [pure-Python model library](https://gem5.atlassian.net/browse/GEM5-648).
+This model library will allow users to write simpler Python scripts to configure the simulator.
+Eventually, this library will supplant `se.py` and `fs.py`.
+Additionally, it is going to be the basis of gem5's "known-good configurations" that will be publicly validated models based on *real hardware*.
+There are a number of ways we would like to improve testing for the gem5-20 release.
+One of the highest priority, is [replacing kokoro with a self-hosted CI solution](https://gem5.atlassian.net/browse/GEM5-37).
+The Google-hosted kokoro process has been very helpful to catch bugs.
+However, it's difficult for people outside of Google to configure, and currently it uses an old VM/docker container with GCC 4.8.
+Moving to a self-hosted solution will give us more flexibility and control.
+It will also help us accomplish some of our other testing goals.
+Another goal is to get [nightly builds](https://gem5.atlassian.net/browse/GEM5-197) up and running.
+We have both "quick" and "long" regressions marked, but we currently don't run most of the "long" regressions (they take 16-24 hours).
+We are planning to run these nightly, but this wasn't possible with the kokoro system.
+We're also going to look into adding other kinds of tests like testing to make sure gem5 builds will all of our supported compilers and running address sanitizers and other static analysis tools.
+To accomplish these goals, we believe the best way forward is to use our own self-hosted [Jenkins](https://www.jenkins.io/) instance.
+For now, we will run this instance on Google's cloud infrastructure.
+However, one of the benefits of Jenkins is that we can easily move it to any public cloud or local compute resources.
+We'll also be working on [fixing some failing integration tests](https://gem5.atlassian.net/browse/GEM5-361), fixing some of the failing [Linux boot tests](http://www.gem5.org/documentation/benchmark_status/), and continue to work on [increasing our unittest coverage](https://gem5.atlassian.net/browse/GEM5-4).
+## Full system GPU support
+As discussed in the [gem5 users workshop](2020-06-01-towards-full), developers at AMD are working to make it possible to use the GPU model in full system mode in gem5.
+The goal is to be able to use the GPU model *with the upstream driver* and runtimes.
+Currently, the SE mode-based GPU model is tied to an old version of the RoCM stack, and by implementing this full system support we'll be able to support newer runtime versions.
+The current status of this support can be found [on this Jira Epic](https://gem5.atlassian.net/browse/GEM5-195).
+There's a lot of little things to get done here, but the developers are hard at work on them!
+## Memory system improvements
+There are a number of improvements to gem5's memory system that we are targeting for gem5-20.1 including [an NVM model](https://gem5.atlassian.net/browse/GEM5-550), [support for transactional memory](https://gem5.atlassian.net/browse/GEM5-550), and a new Ruby protocol that supports a flexible cache hierarchy.
+### NVM Model
+Wendy Elsasser and other developers at Arm have been working on an improved memory controller that has both DRAM and non-volatile memory attached.
+More details on this development can be found in her [gem5 workshop presentation](./2020-05-29-memory-controller.md).
+There are a set of patches [on gerrit](https://gem5-review.googlesource.com/c/public/gem5/+/29027/) right now for this new support.
+We fully expect these to be integrated into gem5 before the gem5-20.1 release.
+You can follow the development on [this Jira issue](https://gem5.atlassian.net/browse/GEM5-550).
+### HTM Model
+Hardware transactional memory has moved from research to products with [Intel](https://en.wikipedia.org/wiki/Transactional_Synchronization_Extensions) and [ARM](https://developer.arm.com/docs/101028/0009/transactional-memory-extension-tme-intrinsics) supporting some form of transactional memory in their ISAs.
+There is current work to support HTM in both the [ISA models](https://gem5-review.googlesource.com/c/public/gem5/+/30314) and [Ruby](https://gem5-review.googlesource.com/c/public/gem5/+/30319).
+We expect that these changesets on gerrit will be merged before the release of gem5-20.1.
+You can follow the progress on the [Ruby Jira issue](https://gem5.atlassian.net/browse/GEM5-587) and the [ARM TME Jira issue](https://gem5.atlassian.net/browse/GEM5-588).
+### Heterogarnet (Garnet 3.0)
+As described in [the gem5 workshop talk](2020-05-29-heterogarnet.md) there has been work to extend Garnet to support 3D integration and other heterogeneous systems.
+We will be working to merge this support into the gem5-20.1 release.
+## A discussion on ISA support
+gem5 supports a large number of ISAs.
+This is one of gem5's best features, but the support for each ISA isn't uniform.
+Each ISA has varying completeness, support for the latest revisions, fidelity, system architecture support, and testing.
+We are going to solicit feedback on how to proceed with our ISA support during the gem5 20.1 development cycle.
+This issue is about having a conversation about removing support for some ISAs.
+Whether or not we remove these ISAs is up to the community at large.
+## Other goals
+- [Merge the gem5 GUI](https://gem5.atlassian.net/browse/GEM5-262)
+- [Add a vector co-processor for RISC-V](https://gem5.atlassian.net/browse/GEM5-618)