Skip to content

iperf test

Linux Systems Guides
  • iPerf3 from

    • iPerf3 is a tool for active measurements of the maximum achievable bandwidth on IP networks. It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, SCTP with IPv4 and IPv6).

    • For each test it reports the bandwidth, loss, and other parameters. This is a new implementation that shares no code with the original iPerf and also is not backwards compatible.

    • iPerf was orginally developed by NLANR/DAST. iPerf3 is principally developed by ESnet / Lawrence Berkeley National Laboratory. It is released under a three-clause BSD license.

    Install iperf Debian

    apt-get install iperf3

    Starting a local server is not necessary if testing to a remote server.

    Example test server:

    iperf -c -i 2 -t 20 -r

    Start iperf 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 <ip or host/domain name>

    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 <ip or host/domain name> -d

    Bi-directional testing (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 <ip or host/domain name> -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 <ip or host/domain name> -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 <ip or host/domain name> -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

    A nice list of iPerf servers can be found at

FreeBSD Notes
  • rickR

    Screen recording can use webm as their format, it can be more simple to use a gif to embed into a website or forum, than adding scripts to host different video format.

    In this case I grabbed a screen record of the progress for writing zeros to a hard drive with dd

    Use ffmpeg to convert webm to gif:

    First create a pallet:

    Move into the directory which the webm is located, or type in the path

    Where ‘dd.webm’ is the screen recording

    ffmpeg -y -i dd.webm -vf palettegen palette.png



    Then convert the webm to gif:

    ffmpeg -y -i dd.webm -i palette.png -filter_complex paletteuse -r 10 dd.gif


    This is what I ended up with, looks like any image of any alien on the interwebz, as if shot through a potato, some tweaking of the command is in my future. None the less.


    read more

  • rickR

    Write zeros to all sectors

    Use the command ‘lsblk’ to find the drive you wish to erase

    I’m using ‘dd’ to erase things

    In this case I’m torching sdb

    Only use status=progress if you care it’s not necessary

    dd if=/dev/zero of=/dev/sdb bs=12M status=progress


    read more

  • rickR

    Remove old kernel images that are cluttering the system


    Most of these errors are due to low or not enough space left in the root partition.

    If you are using a Debian flavor:

    sudo apt-get autoremove --purge


    Inform grub whenever an old kernel is removed:

    update grub


    Remove the un-used kernel config files:

    These will be the files pre cursed as ‘rc’ where installed kernels use ‘ii’

    … As well as files no longer used or required due to dependencies

    This command will detect, print, and remove left over cruft from previously installed packages or scripts, that have been removed or updated.

    sudo dpkg --purge $(dpkg -l | awk '/^rc/{print $2}')


    You can re-run the following to view the installed kernel(s):

    dpkg --list | grep linux-image


    read more

  • rickR

    To list all files in current directory including dot files (hidden files or directories), as well as print permissions :

    ls -la
    read more

  • rickR
    Install Ruby on Debian

    Install rbenv

    sudo apt install rbenv

    Then initialize the environment:

    rbenv init


    nano ~/.bashrc

    Type or paste the output above, Ctrl +x to save


    source .bashrc

    Install ruby-build

    Install git:

    sudo apt install git


    mkdir -p "$(rbenv root)"/plugins

    Clone to local:

    git clone "$(rbenv root)"/plugins/ruby-build


    curl -fsSL | bash


    Now install Ruby:

    print ruby versions available

    rbenv install --list


    Install the latest version unless you have a reason otherwise:

    rbenv install 3.3.0

    On this system there was an error compiling at this point with fiddle, as well as psych: ruby-failed.png

    Therefore manually installing the following filled dependencies

    sudo apt install libtool sudo apt install libffi-dev


    rbenv global 3.3.0

    print installed ruby version

    ruby -v


    read more