iperf howto (this was written for 2.0, but 3.0 works basically the same. you just don't need to specify -u to run a udp server) Note: All test directions are Client -> Server Iperf is a very tricky beast. Most of the time you just want to run a simple TCP test. Read all the below, and see the last TCP example for what you probably want. Read this entire page before doing any testing. Don't use any of the bi-directional tests. They'll just cause you more issues until you determine if the uni-directional tests are any good. Start Simple. On the server: iperf -s On the client: iperf -c ip.of.server Further test adjustments which you'll probably want to make, and some useful options End Point TCP Settings - Linux TCP results are dependent on the TCP settings of the endpoints. For best results use Linux with the settings at the end of this page TCP window size. Start small and then try progressively larger. 4M - 16M is probably a good start. iperf will likely report whatever next size is closest, depending on the system tcp configuration. iperf -s -w 16M iperf -c 192.0.2.1 -w 16M Interval between reports (client side only - server side will report weirdly if you try) -i5 will usually be what you want. With bigger window sizes, and larger pipes, you'll need to run a longer test, with interval being greater than the time it takes iperf to fill the buffer, otherwise you'll get funny results. It will take a while to spin up due to TCP algorithms. Bigger window sizes mean more data is retransmitted if you get packet loss, so you might see the speed go up and down a bit. Time to run test (client side) -t 300 (run for 5 minutes) If you combine all the above, you'll end up with something like the following, which should be all you need to do. First do one side as server, then the other. Without much tuning this should give you a good idea of what the link is capable of depending on latency. You should get better throughput after TCP tuning on larger latency links. iperf -s -w 16M iperf -i 5 -c 192.0.2.1 -w 16M -t 300 UDP testing You can use this to test for packet loss and available bandwidth over a link. Good for testing new 3rd party tails for eg. The default UDP test is 1Mbit unless you specify the -b parameter. Server side: iperf -i 5 -u -s Client side iperf -i 5 -u -c 192.0.2.1 -b 10M The default test is 60 seconds. -t 300 will give you a 5 minute test. Don't use any other options with UDP, the above is all you need. Run one side as the server first, then the other. For All Tests Save all your output including command line options from both the server and client sides for every test. You will likely want to ping each side to include latency with your results. Linux TCP Tuning This will adjust TCP window sizes for better performance on high speed links. You can increase further up to 64MB instead of 16MB if you are testing on 10GBit links but you may not want to keep settings this high as it could cause memory issues. These tuning parameters can be installed into /etc/sysctl.conf to enable the configuration you can run sysctl -p # increase TCP max buffer size net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # increase Linux autotuning TCP buffer limits # min, default, and max number of bytes to use net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216