ethmon Home Page
Tool to Measure Hardware and Network Performace using raw Ethernet frames
ethmon uses raw Ethernet frames to test the network performace between two end systems. The end host MAC addresses are used and hosts must be on the same LAN as no IP routing can be used. The programs eth_send and eth_recv just attempt to send a stream of frames between the hosts. eth_req, eth_bw_mon and eth_resp send and receive Request-Response messages between the two hosts. These programs are used in pairs to make the following measurements:
- Latency as a function of packet size - using Request-Response raw Ethernet frames.
- Histograms of the Request-Response Latency.
- Estimation of the "on-the-wire" Bandwidth, packet loss, and out of order packets as a function of packet size and packet spacing using raw Ethernet frames.
- Histograms (and analysis) of the packet jitter between the two nodes.
- Measurement of arrival times of received packets
- Estimation of the relative 1-way delay between the two nodes on a packet by packet basis.
- Measurement of the user mode and kernel mode load on all CPUs for both sending and receiving hosts.
- Measurement of the number of interrupts given by the NICs
- A time series of the round trip latency for each Request-Response.
Installation of ethmon
The distribution of ethmon is split into two tarballs: the ethmon tool and the supporting library libhj. The ethmon-a.b.c tarball creates directory ethmon-a.b.c and libhj-l.m.n creates directory libhj-l.m.n. For installation and compilation in your home directory having downloaded the corresponding ethmon and library files, start by cd to the library directory then:
./configure --prefix=$HOME
make install
$HOME/include and $HOME/lib are created. Then cd to the directory containing tcpmon and do:
./configure --prefix=$HOME --with-hj-location=$HOME
make install
$HOME/sbin is created with the ethmon programs.
Versions of ethmon
Version |
Download
ethmon |
Download
libhj library |
Write-up |
Excel plots example |
Notes |
|
|
|
|
|
|
ethmon-1.0.3 |
tar file -1.0.3 |
libhj-4.1.3 |
|
|
|
Brief help
ethmon_bw_mon
Usage: ethmon_bw_mon -option<parameter> [...]
options:
-B = <bin width of remote histo in us>
-G = <number of packets on which to return information>
-H = get remote histograms
-I = <interface name. e.g. eth1 default eth0>
-M = <min (low limit) of remote histo in us>
-S = <size of send and receive socket buffers in bytes>
-T = <Ethernet packet type (protocol) in hex >
-V = print version number
-d = <the destination MAC address aa:bb:cc:dd:ee:ff >
-e = <end value of wait time in us>
-g = <gap time to wait between bursts in us>
-h = print this help
-i = <increment for wait time in us>
-l = <no. of frames to send>
-n = <no. of bursts to send in Burst Mode>
-p = <length in bytes of mock data packet>
-t = <no. of seconds to run the test - calculates no. of frames to send >
-q = quiet - only print results
-v = turn on debug printout
-w = <wait time in us>
ethmon_resp
Usage: ethmon_resp -option<parameter> [...]
options:
-I = <interface name. e.g. eth1 default eth0 >
-S = <size of send and receive socket buffers in bytes>
-T = <Ethernet packet type (protocol) in hex >
-V = print version number
-h = print this help
-q = quiet - only print results
-v = turn on debug printout
ethmon_send
Usage: ethmon_send -option<parameter> [...]
options:
-I = <interface name. e.g. eth1 default eth0>
-S = <size of send and receive socket buffers in bytes>
-T = <Ethernet packet type (protocol) in hex >
-V = print version number
-d = <the destination mac address aa:bb:cc:dd:ee:ff>
-h = print this help
-l = <no. of frames to send>
-p = <length in bytes of mock data packet>
-t = <no. of seconds to run the test - calculates no. of frames to send >
-q = quiet - only print results
-v = turn on debug printout
-w = <wait time in us>
ethmon_recv
Usage: ethmon_recv -option<parameter> [...]
options:
-I = <interface name. e.g. eth1 default eth0 >
-S = <size of send and receive socket buffers in bytes>
-T = <Ethernet packet type (protocol) in hex >
-V = print version number
-h = print this help
-q = quiet - only print results
-v = turn on debug printout
ethmon_ping
Usage: ethmon_ping -option<parameter> [...]
options:
-H = Print histograms
-I = <interface name. e.g. eth1>
-S = <size of send and receive socket buffers in bytes>
-T = <Ethernet packet type (protocol) in hex >
-V = print version number
-b = <bin width of histo in us>
-d = <the destination MAC address aa:bb:cc:dd:ee:ff>
-e = <end value of message length in bytes>
-h = print this help
-i = <increment for message length in bytes>
-l = <no. of frames to send>
-m = <min (low limit) of histo in us>
-p = <length in bytes of mock data packet>
-q = quiet - only print results
-r = <start size of response message in bytes>
-v = turn on debug printout
-w = <wait time in us>
Example
sbin/ethmon_req -d 00:30:48:20:E0:EF -Ieth0 -p64 -r1000 -w50000 -H -b100 -l2000
Will send 2000 requests 64 bytes long to the remote node asking for 1000 byte responses. It will wait 50ms between requests and histogram the round trip times with a bin size of 100 us.
Adding -G1000 to the above line would produce a time series of the first 1000 requests.