The Congestion Manager Software
The Congestion Manager (CM) is an end-system module that:
- Enables an ensemble of multiple concurrent streams from a sender
destined to the same receiver and sharing the same congestion
properties to perform proper congestion avoidance and control.
- Allows applications to easily adapt to network congestion by
providing a platform-independent adaptation API.
The CM framework integrates congestion management across all
applications and transport protocols on a per-macroflow basis. The CM
maintains congestion parameters (available aggregate and per-stream
bandwidth, per-receiver round-trip times, etc.) and exports an API
that enables applications to learn about network characteristics, pass
information to the CM, share congestion information with each other,
and schedule data transmissions.
The CM architecture can be incrementally deployed in the Internet: the
current release (version 1.0) involves changes to the protocol stack
only at the sender, and not at any receiver. However, it does require
that CM receiver applications (e.g., TCP) provide feedback in some
form to their senders, to enable feedback-based congestion management.
Click on the links on the left for the source code, example
applications, and documentation, and here
for the copyright notice.
Experience and a 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; 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. To our knowledge, we have
not seen any data corruption or other such problems for protocols and
applications using the CM.