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).