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

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

  • Comments

    Be the first to comment!

    Similar Projects

    Exploring DPDK within containers by paolodepa

    Project Description

    Containerization is h...


    Investigate zypper/openSUSE repository refresh optimisations by dirkmueller

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


    The Missing Middle: Add an intermediate brightness setting for auxiliary LEDs in Andúril 2 by gkenion

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


    Extract generic testing framework from Linux Test Project code base by acervesato

    Project Description

    The Linux Test Projec...


    Deep Packet Inspection: compare the performance between libnetfilter_queue, NF_HOOK and eBPF XDP by nguyens

    Deep Packet Inspection: compare the performan...


    80-bit floats support on x86_64 for Valgrind by mfranc

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


    Avahi Integration and Network Connection by vojha

    Avahi Integration and Network Connection

    ...