Skip to content

Enable ssl_poll_perf test to run as client/server.#63

Closed
Sashan wants to merge 1 commit into
openssl:mainfrom
Sashan:ssl_poll.c-s
Closed

Enable ssl_poll_perf test to run as client/server.#63
Sashan wants to merge 1 commit into
openssl:mainfrom
Sashan:ssl_poll.c-s

Conversation

@Sashan

@Sashan Sashan commented Nov 5, 2025

Copy link
Copy Markdown
Contributor

This enables as to evaluate performance of OpenSSL QUIC stack against other QUIC implementations.

@Sashan Sashan moved this to Waiting Review in Development Board Nov 5, 2025
@Sashan

Sashan commented Nov 5, 2025

Copy link
Copy Markdown
Contributor Author

those changes were tested with tqclient/tqserver:

# git clone --recurse https://github.com/Tencent/tquic
# cd tquic
# cargo build --all # to build also tools/examples
# echo $?

if build is successful tqserver can be launched:

# cd target/debug/
# ./tquic_server -l 127.0.0.1:7070 -c path/to/servercert.pem -k path/to/serverkey.pem
# echo 'payload' > payload

Feel free to use servercert.pem and serverkey.pem found in $OPENSSL_SRCDIR/test/certs.
Command above starts QUIC server listening to port 7070. Use command here to connect:

# cd $PERFTOOLS./source/build
# ./ssl_poll_perf -m c -a 0 -c 100 -b 1 -u 0 http://127.0.0.1:7070/payload

command above launches client which performs 100 connections to tquic_server. Each connection
opens single bi-directional stream and fetches file payload.

to run tquic_client against ssl_poll_perf server, launch server first:

# cd $PERFTOOLS./source/build
# ./ssl_poll_perf -p 8080  -m s -a 0 path/to/servercert.pem path/to/serverkey.pem

To download 7 bytes from server above use URL http://127.0.0.1:8080/7 using
tquic_client command below:

./tquic_client \
    -t 1 \ # use one thread
    --max-concurrent-conns 100 \ # 100 concurrent connections
    --max-concurrent-requests 100 \ # 100 concurrent requests
    --max-requests-per-conn 1 \ # one request per connection
    --total-requests-per-thread 100 \ # 100 requests
    -d 0 # wait until all requests are completed
    -a http/0.9 # use http/0.9
    http://127.0.0.1:8080/7

@Sashan Sashan requested review from nhorman and quarckster and removed request for quarckster November 5, 2025 12:20
@quarckster

Copy link
Copy Markdown
Member

I'm wondering how to better run this in our performance benchmark lab. Is it enough to run both server and client on the same machine? Or the client and the server must be resided on separate hosts. In that case does it matter the platform of the counterpart? It will also bring questions of the simultaneous access to the counterpart from different testing machines. How will it affect on the results?

@jogme jogme left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First iteration

Comment thread README.md Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
@t8m

t8m commented Nov 6, 2025

Copy link
Copy Markdown
Member

I'm wondering how to better run this in our performance benchmark lab. Is it enough to run both server and client on the same machine? Or the client and the server must be resided on separate hosts. In that case does it matter the platform of the counterpart? It will also bring questions of the simultaneous access to the counterpart from different testing machines. How will it affect on the results?

IMO it SHOULD run on the same machine over loopback to avoid network latencies, etc.

@Sashan

Sashan commented Nov 6, 2025

Copy link
Copy Markdown
Contributor Author

I'm wondering how to better run this in our performance benchmark lab. Is it enough to run both server and client on the same machine? Or the client and the server must be resided on separate hosts. In that case does it matter the platform of the counterpart? It will also bring questions of the simultaneous access to the counterpart from different testing machines. How will it affect on the results?

this is should be sufficient:

lifty$ ./ssl_poll_perf -t /path/to/certs/servercert.pem /path/to/certs/serverkey.pem  
268.1150

The output is the time it took to establish 10 connections. each connection opens 10 bidirectional streams and 10 unidirectional stream pairs. each stream performs http/1.0 request to obtaub 64bytes. This is a default pre-set. We can either change defaults here:

3405     const char *ccountstr = "10";
3406     const char *bstreamstr = "10";
3407     const char *ustreamstr = "10";
3408     const char *rep_sizestr = "64";
3409     const char *req_sizestr = "64";

Or you can pass commandline options which control those settings. command below performs the same workload as ./ssl_poll_perf -t /path/to/certs//... comands

./ssl_poll_test -c 10 -b 10 -u 10 -w 64 -s 64 -t /path/to/certs/servercert.pem /path/to/certs/serverkey.pem  

Or are you asking how to cross test OpenSSL quic stack with other QUIC clients/servers?

@Sashan Sashan requested a review from jogme November 6, 2025 10:06
Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c
@Sashan Sashan requested a review from jogme November 6, 2025 11:50
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c Outdated
Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c

@jogme jogme left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, thank you!

Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c
Comment thread source/ssl_poll_perf.c
@github-project-automation github-project-automation Bot moved this from Waiting Review to Waiting Merge in Development Board Nov 19, 2025
This enables us to evaluate performance of OpenSSL QUIC stack
against other QUIC implementations.
Sashan added a commit that referenced this pull request Nov 21, 2025
This enables us to evaluate performance of OpenSSL QUIC stack
against other QUIC implementations.

Reviewed-by: Norbert Pocs <norbertp@openssl.org>
(Merged from #63)
@Sashan

Sashan commented Nov 21, 2025

Copy link
Copy Markdown
Contributor Author

merged via 513dec3

@Sashan Sashan closed this Nov 21, 2025
@github-project-automation github-project-automation Bot moved this from Waiting Merge to Done in Development Board Nov 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants