Skip to content

Latest commit

 

History

History
723 lines (677 loc) · 26.5 KB

history.md

File metadata and controls

723 lines (677 loc) · 26.5 KB

Excavating gem5's history

I'm going to be writing a gem5-20 paper soon. As part of this paper writing procedure, I wanted to find out all of the big contributions (new features) that had been added since the gem5 release. Like everything in gem5, this was harder than expected!

In this post, I'm describing my methodology for "excavating" gem5's history. This isn't a perfect methodology, so I may miss things. I'll be sending out a list of "major" changes to gem5 in the last 9 years based on this methdology, so please let me know if I've missed anything!

Things I learned from this exercise

  • It may seem like we're overly pedantic about our git commit messages. We're not! It was progressively harder and harder to figure out what the changes were about.
  • Important changes don't come with many commits (usually).
  • The biggest contributors are people who are making general improvements, not new features
  • In fact, this is general. Very few "new features" are added compared to commits!
    • No overarching roadmap
  • More recently, there are fewer (simple) bug fixes. We've done a good job! The code quality is improving generally!
  • General changes
    • Ruby has become much less popular
    • SE mode has become less popular
    • arm has become much more popular
  • It's really hard to reverse engineer release notes!

The recent past

Now, I want to find out what's been changing lately. This was pretty easy using git's log command. For instance, if I wanted to see all of the commits sorted by author since the beginning of this year, I can use the following command.

git shortlog -ne --since=2020-01-01

To see what happened in 2019, we can use a combination of --since and --until:

git shortlog -ne --since=2019-01-01 --until=2020-01-01

The further past

I quickly found a problem with this method. For some reason, when I checked to see what was committed in 2016, there was nothing!

git shortlog -ne --since=2016-01-01 --until=2017-01-01

Looking closer, in 2017, the "first" commit was made in February. This helped me remember that we transitioned from mercurial to git around that time!

Digging into it a bit more, it looks like when we migrated all of the commits from mercurial to git we only kept the author date, not the commit date. So, if you look at the dates in the gem5 history you'll find that before Feb 2017 the dates are non-linear.

Therefore, for 2017 and further, I'm instead using spans of commits to track what happened that year. I'm using the following commits.

Year First commit hash
2018 c64c6c9dd
2017 f835378be
2016 e67749426
2015 1ee70e9d8
2014 ba9ec669b
2013 a83e74b37
2012 bd23a3719
2011-06-01 f49f384fe
2011 5e25f3171
First Ruby 2f3095014

For example, to see all commits in 2016 we can use:

git shortlog -ne e67749426..f835378be

The "first" commit

The first step was finding when m5 officially became gem5.

There was a long transition as the GEMS code was merged into the m5 codebase. This started back in May of 2009 with the following commit:

2f3095014 ruby: Import ruby and slicc from GEMS Mon May 11 10:38:43 2009

However, for the sake of arguments, I'm going to pick one commit as the "official" gem5 release. That commit is

f49f384fe scons: rename some things from m5 to gem5
Author: Nathan Binkert <[email protected]>
Date:   Thu Jun 2 17:36:18 2011 -0700

This is a nice commit on a nice date because it's almost exactly 9 years ago.

history

2020 (so far)

2019

2018

2017

2016

2015

2014

2013

2012

2011