Testbed for measuring and improving TCP performance over mmWave links
Python 3, NumPy, Pandas, Matplotlib, Make, Mahimahi.
-
Build the client and server programs inside
sender_receiverby typingmake -
(optional) Test the client and server programs separately by running
sender_receiver/senderandsender_receiver/receiverin two separate shell instances. The behavior is similar to the iperf utility, and the options are a subset of the options available to iperf.-
receiverneeds a port, max number of connections before it exits, a verbose option and optional file name for logging the output. -
senderneeds the server IP address and port. Options are sending mode, block size (default: 128 KiB), congestion control algorithm to use (default: system default) and optional file name for logging. Block size is the amount of data sent in a singlesend()call. Sending mode is one of time to run (-t) in seconds, number of blocks (-b) or trace file (-f). Trace file is expected to contain one number per line showing the millisecond. The number of occurrences of a millisecond number indicates the number of packets to be sent in that single millisecond. The CC algorithm must be one of the available ones in/proc/sys/net/ipv4/tcp_available_congestion_control.
-
-
Run
runmm.pywith mandatory channel trace argument (only the name, not the full path). Channel traces are placed intraces/channels. More channel traces may be added to that directory. This program starts a Mahimahimm-linkshell to emulate the channel, runs the sender and receiver in separate subprocesses, saves the output trace and makes a plot of throughput and delay. Options torunmm.pyinclude those for the sender and receiver program and the following: buffer length in bytes for Mahimahi (default: infinite), mm side (default: "receiver"), whether to use the system iperf utility (--iperf) and whether to display/save the plots. The mm side argument should be one of "sender" or "receiver". If it is "receiver", the receiver program is run inside themm-linkshell, else the sender is run insidemm-link. Note that we have observed problems with running the sender insidemm-linkfor TCP flows so we recommend sticking to the default "receiver" option for now. The--iperfoption is currently not implemented.