Wednesday, November 14, 2007

A Dozen Years Later

When I first compiled a Linux kernel—version 1.1 or 1.2 I believe—the ordeal took well over an hour.

Working on the preemptive kernel, with some sort of Pentium III, I spent about 20 minutes on each fresh build. Hacking on inotify—I am recalling the different projects were I rebuilt the kernel a hundred times a day—the time spent was under ten minutes.

Somewhere since then recompiles dropped to several minutes, and then a minute or two. I don't know when I actually crossed the chasm, but today I noticed my first sub-minute kernel compile: 48 seconds. And this is with gcc 4.2 and gnome-terminal, no friends of the cause.

Just as titillating, with my 2400 "baud" modem, it took me two hours to download all of 1.2's whooping two megabytes. Today, I can download all 43MB of 2.6.23 in 15 seconds at almost 3MB/s. As a comparison, it would take two days to download a modern kernel with my old modem.

This is a 150x increase in compilation speeda and 11,500x speed up in network performance in about a dozen years. From then to now, memory and storage have increased in capacity 2,000x and 3,000x, respectively. In fact, I have 64x more video RAM now than I did physical RAM then.

Despite all this, my hard disk's seek time is essentially the same.

The thesis of my 2005 GUADEC talk: Going to disk is 25 million times slower than hitting a general purpose register. Design accordingly.

a Given the use of gnome-terminal versus a raw console, the fact that gcc has grown slower in compilation, the huge increase in size of the kernel tree, and the enlargement of the resulting kernel image, this number is much smaller than it would be in any sort of scientific test.