Testing Network throughput between VMware ESX Hosts

web-image-f23fe804058174dd4b4eabfde4bedd8bHave you ever wanted to check your Network throughput between your ESX Hosts? or even between VM’s? Well I needed to do this, and I couldn’t find any straight forward how-to’s.

Having been pointed in the direction of a simple application called IPerf by Simon Gallagher I opted to use the Windows version. I’m not great with Linux, and as this is an open source application, documentation is a little hard to come by. So for me, this post is also to remind me how on IPerf works should i need to use it again.

IPerf is a single .exe which you run from the Command Line. So to start with I would recommend downloading the .exe to C:\ to make life a little easier.

IPerf needs to be run on both the Source and Destination workstations for the tests to run. To do so;

  • Start -> Run -> “cmd”
  • Navigate to where IPerf.exe is located
  • To run the Server: iperf -s
  • To run the Client: iperf -c <server ipaddress>

Once you hit Enter on the Client PC, a basic 10 second bandwidth test is performed. (IP’s removed to protect the innocent.)

throughputclient1

IPerf has lots of extra options which you can used to vary the tests. A list of options can be found either at the bottom of this post or by typing iperf -h.

This is the test i used the most: iperf -c <Server IPAddress> -t 180 -r

Using -t 180 and -r switches, i ran a 3 minute test on both incoming and outgoing connections to make sure both were approximately the same.

The information provided was basic but sufficaint for my needs.

throughputclient

Here are the available switches:

C:\>iperf -h
Usage: iperf [-s|-c host] [options]
iperf [-h|–help] [-v|–version]

Client/Server:
-f, –format    [kmKM]   format to report: Kbits, Mbits, KBytes, MBytes
-i, –interval  #        seconds between periodic bandwidth reports
-l, –len       #[KM]    length of buffer to read or write (default 8 KB)
-m, –print_mss          print TCP maximum segment size (MTU – TCP/IP header)
-o, –output    <filename> output the report or error message to this specified file
-p, –port      #        server port to listen on/connect to
-u, –udp                use UDP rather than TCP
-w, –window    #[KM]    TCP window size (socket buffer size)
-B, –bind      <host>   bind to <host>, an interface or multicast address
-C, –compatibility      for use with older versions does not sent extra msgs
-M, –mss       #        set TCP maximum segment size (MTU – 40 bytes)
-N, –nodelay            set TCP no delay, disabling Nagle’s Algorithm
-V, –IPv6Version        Set the domain to IPv6

Server specific:
-s, –server             run in server mode
-D, –daemon             run the server as a daemon
-R, –remove             remove service in win32

Client specific:
-b, –bandwidth #[KM]    for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u)
-c, –client    <host>   run in client mode, connecting to <host>
-d, –dualtest           Do a bidirectional test simultaneously
-n, –num       #[KM]    number of bytes to transmit (instead of -t)
-r, –tradeoff           Do a bidirectional test individually
-t, –time      #        time in seconds to transmit for (default 10 secs)
-F, –fileinput <name>   input the data to be transmitted from a file
-I, –stdin              input the data to be transmitted from stdin
-L, –listenport #       port to recieve bidirectional tests back on
-P, –parallel  #        number of parallel client threads to run
-T, –ttl       #        time-to-live, for multicast (default 1)

Miscellaneous:
-h, –help               print this message and quit
-v, –version            print version information and quit

[KM] Indicates options that support a K or M suffix for kilo- or mega-