The Congestion Manager Documentation

A good overview of the CM architecture appears in this Sigcomm '99 paper. A description of the implementation of Version 1.0 appears in this OSDI '00 paper. The CM API is described in this evolving Internet draft.

Follow this link for installation notes.

The implementation of the user-level-application-visible CM API is done in the CM library, which communicates with the kernel via a set of control sockets. The congestion control algorithms and scheduler that operate per macroflow are implemented in the kernel. The TCP is also entirely in the kernel, with Linux's native TCP being modified by ripping out all of its congestion control functionality. The TCP interacts with the CM via function calls for downcalls and callbacks.

An overview of the implementation architecture is shown in the following figure (click on the figure or here for a bigger picture).

Follow this link for an overview of the Linux kernel implementation and the CM data structures. A description of the changes made to the TCP code are here. And here's a description of some sample CM applications, and here are a few app-notes on how to write CM applications and what to watch out for while doing so.

Comments or suggestions? Email cm@nms.lcs.mit.edu.