Installing and running a CM Linux kernel
The file linux-2.2.9.tar.gz contains
the entire Linux distribution including the CM changes. To install,
follow these instructions.
- tar zxf linux-2.2.9.tar.gz. This produces the Linux
source tree in the directory ./linux
- cd linux; make xconfig
- Turn on the following options:
- Click on "Code maturity level options"
- Choose "y" for "Prompt for development and/or incomplete
code/drivers". Go back to "Main menu".
- Click on "Networking options"
- Choose "y" for "IP: Congestion Management".
- Choose "y" for "IP: TCP using Congestion Management".
- If you want to play with the new class of
binomial congestion
control algorithms (useful for streaming media), choose "y" for CM:
Binomial control support (EXPERIMENTAL)". Be warned that you
should turn this on only if you know what you're doing!
- Click on "Processor type and features"
- If you're not using an SMP, then DISABLE symmetric
multi-processing support. (This is on by default in the CM kernel.)
- make dep
- make bzImage; a kernel gets created in the usual place
(e.g. arch/i386/boot/bzImage). Copy it over to /boot, run
lilo (perhaps after modifying lilo.conf), and you're all
set!
You can also look at the individual files added or modified for the
CM. These are listed here, with the directory
structure preserving the Linux kernel code.
You may find the following notes useful:
- CM implementation notes & data
structures. Notes on the kernel implementation.
- TCP over CM. The main changes to
the Linux TCP implementation to CM-enable it. The benefits of this
reimplementation (by essentially changing only the congestion control
parts of the Linux TCP, leaving the connection management and
reliability features essentially untouched) include better congestion
control behavior of an ensemble of concurrent connections, as well as
quicker adaptation for Web-like connections where multiple
relatively-short connections are observed between a sender and
receiver within a short period of time. Details of several of our
performance experiments are in these papers.
- CM API synopsis. The API provided
by the CM to applications and protocols. Roughly conforms to the IETF
ECM WG specifications (it is a superset of the WG specs).
- Sample CM applications. A few
applications we have written, and one (ttcp) that we have CM-enabled.
- Writing CM applications. This
will be of use to CM application developers. These include a few
gotchas and things to watch out for in terms of correctness and
reliability.
Experience and disclaimer
This should be considers an alpha release. Although we will
strive to make only backward-compatible changes, we cannot be certain
that this will be the case (in fact, it will almost certainly not be
the case!). We have been using the CM kernel on some of our machines
for a few months now with relatively few problems. We have observed
that a few connections sometimes hang, and are tracking the reasons
for this down; however, this happens very rarely and has not proved to
be a big usability problem in practice. We do run the CM on a few of
our desktop machines that are critical to us, on a daily basis. To
our knowledge, we have not seen any data corruption or other such
problems for protocols and applications using the CM.