Iperf cheat sheet
Category : Cheat Sheets
Iperf is an Open source network bandwidth testing application, available on Linux, Windows and Unix. Iperf can be used in two modes, client and server. The server runs on the remote host and listens for connections from the client. The client is where you issue the bandwidth test parameters, and connect to a remote server.
Install Iperf on Ubuntu
You can use apt-get install to install Iperf in Ubuntu.
apt-get install iperf
Start server
To start Iperf in server mode, use the below command.
iperf -s
Start server in daemon mode
Running the server without daemon mode keeps the process running in the terminal. Use the -D switch to run it as a daemon in the background.
iperf -s -D
Connecting to server from client
Iperf needs to run on the local host in client mode, as well as in server mode on the remote host. To connect to the remote host, add it’s IP address after the -c switch.
iperf -c 10.1.1.50
Bi-directional simultaneous (test the speed both ways at the same time)
Use the -d switch to test in the network bandwidth in both directions. This will perform two tests; one from local host to remote host, and another from the remote host to the local host.
iperf -c 10.1.1.50 -d
Bi-directional (test the speed both one after another)
Use the -r switch to test in the network bandwidth in both directions. This is similar to -d except the tests will be performed in sequence; first from local host to remote host, and another from the remote host to the local host.
iperf -c 10.1.1.50 -r
Change the window size
The TCP window size can be changed using the -w switch followed by the number of bytes to use. the below example shows a window size of 2KB. This can be used on either the server or the client.
iperf -c 10.1.1.50 -w 2048
iperf -s -w 2048
Change the port
You must use the same port on both the client and the server for the two processes to communicate with each other. Use the -p switch followed by the port number to use on both the local and remote host.
iperf -c 10.1.1.50 -p 9000
iperf -s -p 9000
Change the test duration
The default test duration of Iperf is 10 seconds. You can override the default with the -t switch followed by the time in seconds the test should last.
iperf -s -t 60
UDP instead of TCP
The default protocol for Iperf to use is TCP. You can change this to UDP with the -u switch. You will need to run both the client and server in UDP mode to perform the tests.
iperf -s -u
iperf -c -u
The result will have an extra metric for the packet loss which should be as low as possible, otherwise the packets will have to be re-transmitted using more bandwidth.
Run multiple threads
Iperf can spawn multiple threads to simultaneously send and receive data. Use the -P switch followed by the number of threads to use.
iperf -c -P 4
Check the version of Iperf
Use the -v switch to see the version of Iperf you have installed.
iperf -v
See the full list of arguments
Use the -h switch to see the full list of arguments supported by Iperf.
iperf -h
Let me know in the comments if you think anything is missing.
13 Comments
choupli
15-Apr-2014 at 11:40 pmNice, thanks! :)
kalyani
11-Sep-2015 at 11:44 amJust as in:
https://github.com/esnet/iperf/issues/217
I am not able to shutdown Iperf.exe in server mode. I run this through a process in C++ code.
Code Snippet:
runProgram(CString &exeFileName)
{
//exeFileName value is: cmd.exe /C [PATH]\IPerf.exe -s -p 5020 -y C >[PATH]\temp.txt
//and PATH is location for these files.
DWORD code,dwError;
try
{
int Result = 0;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = STARTF_USESHOWWINDOW;
si.cbReserved2 = NULL;
si.lpReserved2 = NULL;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
si.wShowWindow = false;
si.cb = sizeof(si);
BOOL ret = CreateProcess(NULL, (LPWSTR) exeFileName.asChar(),NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if(ret == TRUE)
{
GetExitCodeProcess(pi.hProcess, &code);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
GetExitCodeProcess(pi.hProcess, &code);
}
}
catch(…)
{
}
return code;
}
Thanks in advance.
kalyani
11-Sep-2015 at 11:57 amEnvironment:
(Windows 7, 64 Bit, Visual Studio 2010 for development)
Len
24-Dec-2015 at 8:10 pmWhat happens if we do not specify port numbers?
adam
6-Dec-2017 at 9:44 pmtry and find out?
Apirk
27-Jun-2017 at 5:33 amHi.
Could you please tell how to configure constant transfer rate in iPerf as the rates keep fluctuating.
Brad
4-Jan-2020 at 3:34 pmDoes anyone know how I would set up an iperf listening server deamon to run automatically on boot of a headless centos server?
NaveenKumar
14-Feb-2020 at 11:28 pmCould you please explain, How to send the packets continously using iperf3 to test through-put? which command will sent packets continously?
James
7-May-2020 at 12:51 pmGreat and simple tutorial. Only thing missing for me would be which version of iperf you were using. The controls differ a lot across the versions.
A
5-Dec-2020 at 1:04 amGreat article, but how to stop iperf3 -s Daemon mode? from iperf cmd not the kill switch ;)
Thanks
Caroline
19-Apr-2022 at 2:18 amdid you find out?
Het
29-Sep-2021 at 6:29 pmHow does iperf generate parallel streams in the background, what does happen behind -P?
anon
23-Dec-2021 at 12:20 pmiperf -t 86400 -p 50000 -c IP_ADDRESS
is iperf for 86400 seconds (iperf’s max), on address port 50000 of ip address IP_ADDRESS