You need to sign in or sign up before continuing.

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 and TCP_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 and TCP_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

Looking for hackers with the skills:

networking benchmark c

This project is part of:

Hack Week 20

Activity

  • over 3 years ago: dkirjanov joined this project.
  • over 3 years ago: mkubecek started this project.
  • over 3 years ago: mkubecek added keyword "networking" to this project.
  • over 3 years ago: mkubecek added keyword "benchmark" to this project.
  • over 3 years ago: mkubecek added keyword "c" to this project.
  • over 3 years ago: mkubecek originated this project.

  • 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...