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

  • 4 months ago: dkirjanov joined this project.
  • 4 months ago: mkubecek started this project.
  • 4 months ago: mkubecek added keyword "networking" to this project.
  • 4 months ago: mkubecek added keyword "benchmark" to this project.
  • 4 months ago: mkubecek added keyword "c" to this project.
  • 4 months ago: mkubecek originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    Test drive some Kubernetes network plugins by doreilly

    [comment]: # (Please use the project descriptio...


    Get familiar with moodle.opensuse.org by creating the training "Network basics" by mstrigl

    Create a course in moodle.opensuse.org

    Mo...


    Sharing logic between desktop and web based applications through WASM by IGonzalezSosa

    Project Description

    A few months ago, the...


    multipath-tools: improve CI by mwilck

    Project Description

    multipath-tools is ...


    Phoebe - where AI meets Linux by mvarlese

    Project Description

    Phoeβe (/ˈfiːbi/) wan...


    multipath-tools: cleaner model for path device information by mwilck

    Project Description

    Obtaining correct inf...


    multipathd: improve asynchronous behavior by mwilck

    Project Description

    multipathd is multi...


    NeoMutt: Show index and body of emails in a horizontal split by iivanov

    [comment]: # (Please use the project descriptio...