PCP Simulator

Here is the tarball containing the source code for the simulation system used in the paper
entitled "PCP: Efficient Endpoint Congestion Control".

Instructions for running the simulator:

1) Download the source code from here.

2) Unpack the source code and make it:
       tar xzf pcpsim.tar.gz
       cd pcpsim
       make

3) Run the executable "tscp".  Sample usage:
       ./tscp tcp 5000 25 1250 100 100 60 100000 200000

    Arg 1: "tcp" use the tcp protocol over a FIFO link.  Alternatives: "pcp" and "fq".
                "pcp" simulates pcp over a FIFO link, while "fq" simulates fairqueueing
                over a fairqueueing link.

    Arg 2: Bottleneck bandwidth in KB/s.

    Arg 3: Average round-trip time in ms.

    Arg 4: Packet size (or MSS).

    Arg 5: Number of pairs of sender/receiver nodes.  The topology is
                the simple topology described in the paper, with each pair
                of sender-receiver sharing the bottleneck link.  The access
                links to the bottleneck link are over-provisioned.

    Arg 6: Flow size in number of packets.

    Arg 7: Start time for simulation in milliseconds.  This is to prime the
                system to reach steady state.

    Arg 8: End time for the simulation.

The program outputs the average response time, standard-deviation of
response time, loss rate of bottleneck link, throughput of bottleneck link.
and the average queue size of bottleneck link.

User-level PCP test code

This is a user-level test code for PCP's mechanisms.  Simply
compile the "pcp" and "server" executables and run them on
different machines.

Download the source code from here.

1) the receiver code is in "server".  Usage:

./server portnumber

The "server" executable just ACKs packets received on the
UDP port "portnumber" with the timestamp of packet reception.

2) pcp sender code is in "pcp".  Usage:

pcp srvrIp srvrPort payload numflows poll-interval init-rate

where "srvrIp" is the IP address of the machine running
the receiver code.  srvrPort is the port number on which
the receiver is listening.  payload is the size of the
transfer.  numflows is the number of concurrent flows
initiated by the sender, each sending payload bytes.
poll-interval is the rate at which the user-level process
is polling for events -- it is expressed in seconds to
represent the interval between successive polls.  init-rate
is the rate to initialize the history of the connection,
and it could be one.

The kernel source code for implementing PCP would
be released by June 2006.  If you have any questions,
please contact Arvind Krishnamurthy (arvind at cs.washington.edu).