Usage

Useful Links

A lot of info cribbed from here

For a complete list of tested algorithms, see above link.

Executing the tests

Depending on where you extracted the PTH, change directory to the test_utils folder.

cd ~/perftest/pqc-performance-test/test_utils

Running the h2load test suite

Run the test with the ip address you set as TARGET_IP_LIST. In our example we used 9.46.72.93. Select 11 to test all algorithms.

./all_h2load.sh -c 6 -n 100000 -s 9.46.72.93 -t 3 -o ~/perftest/perf_results/h2load

/root/perftest/perf_results/h2load exists and will be appended.
h2load performance tests with a variety of key agreement algorithms
Retrieving assignments ...
Staring h2load container ...
Running load test using 6 clients for 100000 requests.
Choose a signature algorithm or select 'all' to test all signatures:
1. ecdsap256
2. ecdsap384
3. ecdsap521
4. dilithium2
5. dilithium3
6. dilithium5
7. p256_dilithium2
8. p384_dilithium3
9. p521_dilithium5
10. rsa3072
11. all
0. Exit
Enter your choice (1-11): 11

The test should run for a little while. In our example case, the last lines returned were the following:

2024/07/31 11:14:45: 100000 total requests with 6 concurrent connections to https://9.46.72.93 from 10.21.71.145/cluster-nfs-nfs01.fyre.ibm.com.
Request Time: Time taken for a single request and response.
Connect Time: Time to connect to the server including TLS handshake.
First Byte Time: Time to get the first byte of decrypted application data from the server.

Running the openssl test suite

We’re testing against our docker host again (9.46.72.93). Select 11 for all algorithms.

./all_openssl.sh -t 30 -s 9.46.72.93 -w / -o ~/perftest/perf_results/openssl

openssl s_time performance tests with a variety of key agreement algorithms
Retrieving assignments ...
Starting PQC client container ...
Retrieving CA Certificate ...
Choose a signature algorithm or select 'all' to test all signatures:
1. ecdsap256
2. ecdsap384
3. ecdsap521
4. dilithium2
5. dilithium3
6. dilithium5
7. p256_dilithium2
8. p384_dilithium3
9. p521_dilithium5
10. rsa3072
11. all
0. Exit

The test should run for quite a while. In our example case, the last lines returned were the following:

2024/07/31 12:01:53: 30 seconds of requests to 9.46.72.93 from 10.21.71.145/cluster-nfs-nfs01.fyre.ibm.com using cipher TLS_AES_256_GCM_SHA384.
Total Reqeusts: Total number of connections initiaged (no session reuse).
User Time: User CPU time consumed durring test loop execution.
User Rate: Connections per user CPU second.
Real Time: Wall clock time of the s_time run rounded to integer seconds.
Total Bytes: Total number of payload bytes (actual web response) returned.

Generate the visualizations

Run ./gen_visulizations.sh

We’re going to use port 8080 for our example.

./gen_visulizations.sh 
Enter infrastructure name: Test Infra
Enter the PTH Dashboard target port: 8080
[+] Building 17.5s (12/12) FINISHED                                                                                            docker:default
 => [internal] load build definition from Dockerfile                                                                                     0.1s
 => => transferring dockerfile: 895B                                                                                                     0.0s
 => [internal] load metadata for docker.io/library/node:alpine                                                                           0.8s
 => [auth] library/node:pull token for registry-1.docker.io                                                                              0.0s
 => [internal] load .dockerignore                                                                                                        0.1s
 => => transferring context: 2B                                                                                                          0.0s
 => [1/6] FROM docker.io/library/node:alpine@sha256:39005f06b2fae765764d6fdf20ad1c4d0890f5ad3e1f39b56a18768334b8ecd6                     6.9s
 => => resolve docker.io/library/node:alpine@sha256:39005f06b2fae765764d6fdf20ad1c4d0890f5ad3e1f39b56a18768334b8ecd6                     0.1s
 => => sha256:39005f06b2fae765764d6fdf20ad1c4d0890f5ad3e1f39b56a18768334b8ecd6 6.62kB / 6.62kB                                           0.0s
 => => sha256:c83e6e8aa2c458cf740b18b7b13e546751fe081d36223aac253b5ec0da2cd89d 1.72kB / 1.72kB                                           0.0s
 => => sha256:5c4cc5767575c711b99b1b077ad8afb8cfbf407aca174b7cbc998ce6db1e4f93 6.36kB / 6.36kB                                           0.0s
 => => sha256:c6a83fedfae6ed8a4f5f7cbb6a7b6f1c1ec3d86fea8cb9e5ba2e5e6673fde9f6 3.62MB / 3.62MB                                           0.3s
 => => sha256:c4f54159f74a5dccd97b9af978fab507483785736e822851638f20f275716fc3 1.39MB / 1.39MB                                           0.3s
 => => sha256:8d90f41c769e0bfd90a1e8456db9f590ae8dc42842ffa098693b6ed4bd44eba3 47.36MB / 47.36MB                                         1.0s
 => => extracting sha256:c6a83fedfae6ed8a4f5f7cbb6a7b6f1c1ec3d86fea8cb9e5ba2e5e6673fde9f6                                                0.4s
 => => sha256:6ecb2bd0d8e8f8628fe4a7cf14404c59d67a5547c6e5faa4a507f4b232bd316e 449B / 449B                                               0.4s
 => => extracting sha256:8d90f41c769e0bfd90a1e8456db9f590ae8dc42842ffa098693b6ed4bd44eba3                                                4.9s
 => => extracting sha256:c4f54159f74a5dccd97b9af978fab507483785736e822851638f20f275716fc3                                                0.1s
 => => extracting sha256:6ecb2bd0d8e8f8628fe4a7cf14404c59d67a5547c6e5faa4a507f4b232bd316e                                                0.0s
 => [internal] load build context                                                                                                        0.2s
 => => transferring context: 1.44MB                                                                                                      0.1s
 => [2/6] WORKDIR /app                                                                                                                   0.3s
 => [3/6] COPY dist/ /app/dist/                                                                                                          0.2s
 => [4/6] RUN npm install -g http-server@14.1.1                                                                                          6.9s
 => [5/6] RUN addgroup -S appuser && adduser -S appuser -G appuser                                                                       0.6s
 => [6/6] RUN chown -R appuser:appuser /app                                                                                              0.6s
 => exporting to image                                                                                                                   0.7s
 => => exporting layers                                                                                                                  0.6s
 => => writing image sha256:ce54effa6ab8dec6db3ddcee727d065728f5560907d0d6dddb90df5dbf874a2d                                             0.0s
 => => naming to docker.io/library/pth_dashboard                                                                                         0.0s
4b6dd6935d473d0f637fec4f81bf1df03f42a1656e16a4923cf38b5585308487

All output files are converted and stored. The script then builds and deploys the dashboard container

docker ps -a
CONTAINER ID   IMAGE                                            COMMAND                  CREATED          STATUS          PORTS                                                                           NAMES
4b6dd6935d47   pth_dashboard                                    "docker-entrypoint.s…"   39 seconds ago   Up 38 seconds   0.0.0.0:8080->8080/tcp                                                          pthdashboard
a7011b81d849   localhost:5000/qsc-perf-server-ubuntu:provider   "/bin/bash /opt/ngin…"   2 hours ago      Up 2 hours      0.0.0.0:9100-9563->9100-9563/tcp, 0.0.0.0:9080->80/tcp, 0.0.0.0:9043->443/tcp   qsc-perf-server

In our case, the dash can now be seen at port 8080 at our docker host

PTH-Dashboard