Project Description
There are multiple network benchmark tools already, most popular probably being netperf and iperf. Each of them has its pros and cons but the biggest drawback probably is that netperf runs only one connection (flow) and while iperf can use multiple connections, it still runs in a single thread. For benchmarking of contemporary fast networks like 40Gb/s or 100Gb/s ethernet, this can be a severe limitation as the performance is often CPU bound. Even on 10Gb/s ethernet, we are often unable to saturate the medium if tunneling or complex packet processing is involved.
Out of the two, only netperf seems to have public development and rewriting an application which was never intended to be multithreaded is hard and bug prone. Recently I also learned about uperf but it looks abandoned and feels rather complicated to use. So why not use the hackweek as an opportunity to see how hard is it to write a simple bencharking utility?
Goal for Hackweek 20
Essential features:
- implementation of a multithreaded client and server
- TCP throughput and latency tests (like netperf
TCP_STREAM
andTCP_RR
) - configurable basic parameters (message size, receive/send buffer size)
Nice to have features (if time allows, leave for later otherwise):
- statistical evaluation (like netperf
-i
and-I
) - flexible and future proof control protocol (netlink based?)
- optional output suitable for automated processing (XML / json?)
- more test modes (UDP, SCTP,
TCP_CRR
,TCP_CC
) - man page
- a package in OBS (compatible down to SLE11-SP4-LTSS)
End of Hackweek 20 status
Code available in github repository, tag hackweek20-end
.
Done:
- multithreaded client (nperf) and server (nperfd) utility
TCP_STREAM
andTCP_RR
tests- configurable basic test parameters
- simple, per iteration, per thread and raw data output
- basic statistical processing (averages, mean deviation)
- help text (
nperf -h
/nperfd -h
)
ToDo:
- daemonized nperfd
- statistical evaluation (like netperf
-i
and-I
) - more test modes (UDP, SCTP,
TCP_CRR
,TCP_CC
) - flexible and future proof control protocol (netlink based?)
- optional output suitable for automated processing (XML / json?)
- man page
- a package in OBS (compatible down to SLE11-SP4-LTSS)
The utilities can be used for throughput and roundtrip time measurement but there is still work to be done before they are suitable for general use.
Resources
- netperf
- iperf
github repository - project code on Github
Looking for hackers with the skills:
This project is part of:
Hack Week 20
Activity
Comments
Be the first to comment!
Similar Projects
Remote control for Adam Audio active monitor speakers by dmach
Description
I own a pair of Adam Audio A7V ...
FizzBuzz OS by mssola
Project Description
FizzBuzz OS (or just ...
Add a machine-readable output to dmidecode by jdelvare
Description
There have been repeated reques...