Proposal for New Performance Tool

Tool requirements

High level

  • Support multiple protocols by design including session based protocols. (Initial wish list is UDP, TCP, TLS, HTTPS and QUIC)

  • Support emulating ~30,000 clients on a single server/VM

  • Support configuration to describe client populations e.g.

    • 10% of clients send at maximum rate the connection can sustain
    • 50% send at X qps and use 2s idle timeout
    • 40% send at Y qps use 10s idle timeout
  • Read query names from a file or autogenerate them based on a simple algorithm

  • Detailed statistics on throughput, latency and handshake overhead.

  • Robust recovery from TCP/TLS connection failures or packet loss. 

More detailed

  • General configuration will included (with sensible defaults were applicable)
    • server address
    • server port
    • local address to send from
    • local port to send from
    • Query file OR query name generation algorithm
    • Timeout for query completion
    • Num of time to run through query file OR duration of test run
    • Maximum outstanding queries
    • Limit queries per second sent
    • Num of clients to emulate
    • Socket send/receive buffer size
    • Use EDNS(0)?
    • Set the DO bit?
    • TSIG key to use
    • Transport selection 
  • TCP/TLS configuration (for each client population)
    • Override on queries per second sent, query timeout, max outstanding queries, buffer size.
    • Number of queries sent per connection OR connection duration
    • Client ‘idle’ timeout - how long the client leaves the connection open before re-cycling
    • Delay between subsequent connections
    • EDNS(0) padding
  • TLS configuration (for each client population)
    • TLS version/cipher suites
    • Handshake attributes (TFO, Session resumption, etc.)