Store compiled Rubies to reduce time backfilling


#1

We have to current recompile Ruby each time we re-run a benchmark for a certain commit. It would be nice if we could just compile once and store it somewhere, use it when required instead of re-compiling everytime. This would also allow us to quickly backfill a new benchmark that has been added.


#2

Yes, we got to do this. My thoughts here were to run a “private registry”

You have a new base image every say 100 commits and then push delta images for every commit thereafter.

That way its trivial to start a docker instance with any commit you need.


#3

@sam I’m not sure what delta images mean.


#4

Sorry, so you create a base docker image with a particular ruby version.

Then you use that as the base image in the dockerfile and overwrite the ruby directory with current version and recompile.

This means that you have 1 docker image for EVERY ruby build, but… since you are only storing diffs with AUFS the diff between a ruby build today and one tomorrow is tiny so the docker images will be quite small.


#5

Ic! If my understanding of Docker is correct, does that mean we’re only writing another layer above the base image which therefore mean that we’re only storing one base image (which is where the bulk of disk space is taken up) making the docker images small.


#6

pretty much, read up about various layring filesystems like aufs/overlayfs. Docker images are composed of N layers so by picking a “fat” initial layer and thin “composed” layer you are saving on storage.


#7

Ok I’ll go read up on those topics!