Monday, December 13, 2010

Git SSD Speed comparison

SSD's provide significant improvement in disk IO. How well does that translate over when using Git? A lot.

After watching prices drop all year long during black friday I picked up a OCZ-Vertex2 120G SSD. I installed it in my current MacBook Pro (2.66 GHz i7 with and 4GB of ram) using a MCE OptiBay to replacing the DVD drive so I can have both a HD and a SSD installed at the same time.

All tests were run in Snow Leopard using the Git pre-built binary package. The HD is a 500G Toshiba MK5055GSXF with a Negotiated Link Speed of only 1.5 Gigabit.

Test 1
Creating a new repo, populating it with the contents of linux-, add commit, create a branch and run git status.

The git add took around ten minutes to run on the hard drive compared to the 40 seconds for the ssd. Committing was also 1/3 of the time taking only 20 seconds v.s. over a minute.

The ten minutes to perform the git add operation on the hd made me think something must be broke and it just seems beyond slow. Turning on/off spotlight and everything I can think of in OS X makes no real difference. To further eliminate variables I mounted an old MacBook HD (Toshiba MK8034GSX 80GB 5400 RPM) I had lying around using a USB connection to my mac and found the following results:
git add - 6m30.422s
git commit - 1m47.226s

In conclusion on OS X slow 5400rpm drives produce slow results and ssd are really that much faster. Moving on...

Zooming in on the graph we can see the improvements to the other commands. The biggest win for me is that git status, a command I run all of the time (I have aliased to gs) runs in half of the time.

Test 2
Cloning a large repository from a local network was the next test. I was hoping to see improved performance on verification and it was faster, but compared to everything run on the server and transfer speeds the seven seconds saved wasn't that much compared to the seven minutes the server (a slow arm based box) was preparing the repo.

Test 3

Removing the network here is a clone of the Qt repository from the hard drive to the ssd and hard drive to hard drive. Followed by some simple walking.

Walking was faster on the SSD, but as soon as the data got into ram it was equally fast for them both.

As expected Git runs faster when its data is on an SSD. For operations like git branch which just create a file with a sha in it the performance isn't much different, but when running an io intensive operation like git add you can see that it is extremely worth it. Git status was probably the big winner by getting a speed improvement of around 50%.

Averaged data:
Creating a new repo and populating it with the contents of linux-

         HD          SSD
init      0m0.011s    0m0.010s
add       11m2.903s   0m40.041s
status    0m2.323s    0m1.138s
commit    1m4.097s    0m20.410s
status    0m2.027s    0m1.532s
branch    0m0.039s    0m0.009s
checkout  0m1.465s    0m1.473s
status    0m2.414s    0m1.073s

clone qt-snapshots from local network
clone2    7m21.066s   7m13.310s
rev-lis   0m0.082s    0m0.077s

cloning qt (32611 commits) from hd with --no-hardlinks
clone     0m36.770s   0m13.050s
log       0m1.042s    0m0.977s
rev-list  0m1.697s    0m0.767s

For those on Linux checkout some linux ssd tweaks.


CompIsMyRx said...

You should throw up some charts on the differences for git gc and git fsck. Massive SSD speedups.

Mohamed Mansour said...

Since today is my birthday, I should buy myself two SSD's in raid. I think I deserve it!

Nice post Benjamin!

Popular Posts