Skip to content

suhrm/niceperf

Repository files navigation

Niceperf

Basically iperf but with a few quality of life improvements performance tool.

TODOs

Latency

  • icmp ping (similar to ping)
    • For ICMP we need both ip seqnr and an internal counter which does not wrap in the lifetime of the measurement
    • freqency of the measurement should be configurable
    • payload size should be configurable as well configuration that includes underlaying protocol headers (ipv4, ipv6)
    • output must include timestamp
    • ability to bind to a specific interface
    • amount of infligt pings should be configurable
    • IPv6 support
    • max count of pings should be configurable
    • timeout of pings should be configurable
  • udp echo
    • Need own seqnr in packet
    • freqency of the measurement should be configurable
    • payload size should be configurable as well configuration that includes underlaying protocol headers (ipv4, ipv6)
    • output must include timestamp
    • ability to bind to a specific interface
    • amount of infligt pings should be configurable
    • IPv6 support
    • max count of pings should be configurable
    • timeout of pings should be configurable
    • ACK frequency should be configurable.
  • tcp echo (for congestion control etc...)
    • Need own seqnr in packet
    • Configurable congestion control algorithm
    • MSS should be configurable
    • Payload size should be configurable
    • freqency of the measurement should be configurable
    • TCP_NODELAY should always be sess
  • OWD (one way delay)
    • TBD potenially take a look at Media over quic RFC.
  • Output should be in a easily parsable format (json, bson (maybe))
  • Configuration should happen via a cli or config file (json) POTENTIALLY multiple tests defined in one config file

Throughput

  • TCP throughput

    • Configurable congestion control algorithm

    • MSS should be configurable

    • Payload size should be configurable

    • bandwidth target should be configurable

    • pacing timer

    • multiple streams

    • Application level jitter

    • reporting interval should be configurables

    • bind to specific interface

    • port/ip address should be configurable

    • output: throughput, retransmissions, congestion window, application jitter.

  • UDP throughput

    • Payload size should be configurable

    • pacing timer

    • bandwidth target should be configurable

    • reporting interval should be configurables

    • jitter

    • bind to specific interface

    • port/ip address should be configurable

    • output: throughput, jitter, loss, out of order.

  • QUIC throughput

    • Configurable congestion control algorithm

    • MSS should be configurable

    • Payload size should be configurable

    • bandwidth target should be configurable

    • pacing timer

    • multiple streams

    • Application level jitter

    • reporting interval should be configurables

    • bind to specific interface

    • port/ip address should be configurable

    • both support of stream and datagram.

    • output: throughput, retransmissions, congestion window, application jitter.

  • the control channel should be configurable to i.e another port or even ip address

  • affinity to specific cores should be configured via e.g. taskset

Additional Notes

  • iperf fq-rate is not the same as the actual throughput?
  • enable/disable of nagle algorithm
  • set don't fragment bit on ipv4 headers
  • get server output iperf?
  • server addrress should be public ip/reachable from outside
  • In case of udp reply to the same address as the request came from

About

Like iperf but nicer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published