Performance testing with picoquicdemo

The picoquicdemo program supports multiple applications, one of which is “quic perf” defined by Nick Banks in this draft. To quote from the draft, The QUIC performance protocol provides a simple, general-purpose protocol for testing the performance characteristics of a QUIC implementation.

To run the “perf” protocol and run a basic test scenario, do:

.\picoquicdemo -a perf test.privateoctopus.com 4433 "*1:0:-:397:5000000;"

Where -a perf means set ALPN to “perf”, and use the quicperf protocol to reach the server and the quoted argument describes a test scenario, in which:

The program can run multiple test scenarios in a single session, e.g.:

    "*1:0:-:397:5000;*1:4:0:432:4999;"

which will do one transaction on stream 0, then start another one on stream 4 once stream 0 completes.

When used as a client, the program will display statistics, e.g.:

Connection_duration_sec: 4.425348
Nb_transactions: 10000
Upload_bytes: 1000000
Download_bytes: 1000000
TPS: 2259.709293
Upload_Mbps: 1.807767
Download_Mbps: 1.807767

For more detailed statistics, or for gathering statistics on servers, picoquicdemo can provide performance logs, see .

There are lots of other arguments in picoquicdemo, but you probably don’t need them for running quicperf, although you may consider collecting quic logs using the -q option when debugging. Also, the “-h” option will produce a list of command line arguments.

    .\picoquicdemo -h

Performance logs

When doing performance measurements, the natural instinct is to turn off all logging, because writing logs slows down the program execution. On the other hand, it is very useful to have at least some logging, in order to understand what changes from run to run, and what might affected performance. The performance logs are designed to minimize the interference. The data is written to disk at the end of the connection. If the performance test involves multiple simultaneous connections, the server will keep the data in memory and write it to disk when all connections are complete.

To produce the performance logs with picoquicdemo, use the argument -F as in:

.\picoquicdemo -k key.pem -c cert.pem -p 4433 -F server_log.csv
.\picoquicdemo -q client_log.csv -a perf test.privateoctopus.com 4433 "*1:0:-:397:5000000;"

The performance logs are formatted as CSV file, with the following columns: