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