From 12c0043f77b6a0efba8ec0ddf06aeae3e27beb96 Mon Sep 17 00:00:00 2001 From: Per Hjeltman Date: Sun, 9 Aug 2026 09:48:32 +0000 Subject: [PATCH 1/7] Cardigan: initial HttpArena submission --- frameworks/cardigan-grpc-tls/build.sh | 9 + frameworks/cardigan-grpc-tls/meta.json | 16 + frameworks/cardigan-grpc/build.sh | 9 + frameworks/cardigan-grpc/meta.json | 16 + frameworks/cardigan-h2/build.sh | 9 + frameworks/cardigan-h2/meta.json | 16 + frameworks/cardigan-h2c/build.sh | 9 + frameworks/cardigan-h2c/meta.json | 15 + frameworks/cardigan-json-tls/build.sh | 9 + frameworks/cardigan-json-tls/meta.json | 15 + frameworks/cardigan/.dockerignore | 1 + frameworks/cardigan/Dockerfile | 36 ++ frameworks/cardigan/LICENSE | 373 ++++++++++++++++++ frameworks/cardigan/build.sh | 8 + frameworks/cardigan/meta.json | 17 + frameworks/cardigan/pom.xml | 86 ++++ frameworks/cardigan/proto/benchmark.proto | 25 ++ .../httparena/HttpArenaController.java | 80 ++++ .../cardigan/httparena/HttpArenaDataset.java | 203 ++++++++++ .../httparena/HttpArenaGrpcController.java | 333 ++++++++++++++++ .../httparena/HttpArenaJsonController.java | 29 ++ .../dev/cardigan/httparena/HttpArenaMain.java | 113 ++++++ .../httparena/HttpArenaStaticController.java | 367 +++++++++++++++++ 23 files changed, 1794 insertions(+) create mode 100755 frameworks/cardigan-grpc-tls/build.sh create mode 100644 frameworks/cardigan-grpc-tls/meta.json create mode 100755 frameworks/cardigan-grpc/build.sh create mode 100644 frameworks/cardigan-grpc/meta.json create mode 100755 frameworks/cardigan-h2/build.sh create mode 100644 frameworks/cardigan-h2/meta.json create mode 100755 frameworks/cardigan-h2c/build.sh create mode 100644 frameworks/cardigan-h2c/meta.json create mode 100755 frameworks/cardigan-json-tls/build.sh create mode 100644 frameworks/cardigan-json-tls/meta.json create mode 100644 frameworks/cardigan/.dockerignore create mode 100644 frameworks/cardigan/Dockerfile create mode 100644 frameworks/cardigan/LICENSE create mode 100755 frameworks/cardigan/build.sh create mode 100644 frameworks/cardigan/meta.json create mode 100644 frameworks/cardigan/pom.xml create mode 100644 frameworks/cardigan/proto/benchmark.proto create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaController.java create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaDataset.java create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaGrpcController.java create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaJsonController.java create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaMain.java create mode 100644 frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaStaticController.java diff --git a/frameworks/cardigan-grpc-tls/build.sh b/frameworks/cardigan-grpc-tls/build.sh new file mode 100755 index 000000000..e836994cc --- /dev/null +++ b/frameworks/cardigan-grpc-tls/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +CONTEXT_DIR="$(cd "$SCRIPT_DIR/../cardigan" && pwd -P)" +docker build -t httparena-cardigan-grpc-tls \ + --build-arg CARDIGAN_HTTPARENA_MODE=grpc-tls \ + "$CONTEXT_DIR" diff --git a/frameworks/cardigan-grpc-tls/meta.json b/frameworks/cardigan-grpc-tls/meta.json new file mode 100644 index 000000000..73e6c4007 --- /dev/null +++ b/frameworks/cardigan-grpc-tls/meta.json @@ -0,0 +1,16 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Cardigan gRPC over HTTP/2 and TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "unary-grpc-tls", + "stream-grpc-tls" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan-grpc/build.sh b/frameworks/cardigan-grpc/build.sh new file mode 100755 index 000000000..7e8fcda62 --- /dev/null +++ b/frameworks/cardigan-grpc/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +CONTEXT_DIR="$(cd "$SCRIPT_DIR/../cardigan" && pwd -P)" +docker build -t httparena-cardigan-grpc \ + --build-arg CARDIGAN_HTTPARENA_MODE=grpc \ + "$CONTEXT_DIR" diff --git a/frameworks/cardigan-grpc/meta.json b/frameworks/cardigan-grpc/meta.json new file mode 100644 index 000000000..e3046de35 --- /dev/null +++ b/frameworks/cardigan-grpc/meta.json @@ -0,0 +1,16 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Cardigan gRPC over cleartext HTTP/2 prior knowledge.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "unary-grpc", + "stream-grpc" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan-h2/build.sh b/frameworks/cardigan-h2/build.sh new file mode 100755 index 000000000..c6316309c --- /dev/null +++ b/frameworks/cardigan-h2/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +CONTEXT_DIR="$(cd "$SCRIPT_DIR/../cardigan" && pwd -P)" +docker build -t httparena-cardigan-h2 \ + --build-arg CARDIGAN_HTTPARENA_MODE=h2 \ + "$CONTEXT_DIR" diff --git a/frameworks/cardigan-h2/meta.json b/frameworks/cardigan-h2/meta.json new file mode 100644 index 000000000..c8678b420 --- /dev/null +++ b/frameworks/cardigan-h2/meta.json @@ -0,0 +1,16 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Cardigan HTTP/2 over TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "baseline-h2", + "static-h2" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan-h2c/build.sh b/frameworks/cardigan-h2c/build.sh new file mode 100755 index 000000000..2fc95d435 --- /dev/null +++ b/frameworks/cardigan-h2c/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +CONTEXT_DIR="$(cd "$SCRIPT_DIR/../cardigan" && pwd -P)" +docker build -t httparena-cardigan-h2c \ + --build-arg CARDIGAN_HTTPARENA_MODE=h2c \ + "$CONTEXT_DIR" diff --git a/frameworks/cardigan-h2c/meta.json b/frameworks/cardigan-h2c/meta.json new file mode 100644 index 000000000..95db4f98b --- /dev/null +++ b/frameworks/cardigan-h2c/meta.json @@ -0,0 +1,15 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Cardigan HTTP/2 over cleartext prior knowledge.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "baseline-h2c" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan-json-tls/build.sh b/frameworks/cardigan-json-tls/build.sh new file mode 100755 index 000000000..20dd25062 --- /dev/null +++ b/frameworks/cardigan-json-tls/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +CONTEXT_DIR="$(cd "$SCRIPT_DIR/../cardigan" && pwd -P)" +docker build -t httparena-cardigan-json-tls \ + --build-arg CARDIGAN_HTTPARENA_MODE=json-tls \ + "$CONTEXT_DIR" diff --git a/frameworks/cardigan-json-tls/meta.json b/frameworks/cardigan-json-tls/meta.json new file mode 100644 index 000000000..34296e67f --- /dev/null +++ b/frameworks/cardigan-json-tls/meta.json @@ -0,0 +1,15 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Cardigan HTTP/1.1 over TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "json-tls" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan/.dockerignore b/frameworks/cardigan/.dockerignore new file mode 100644 index 000000000..2f7896d1d --- /dev/null +++ b/frameworks/cardigan/.dockerignore @@ -0,0 +1 @@ +target/ diff --git a/frameworks/cardigan/Dockerfile b/frameworks/cardigan/Dockerfile new file mode 100644 index 000000000..8b286def2 --- /dev/null +++ b/frameworks/cardigan/Dockerfile @@ -0,0 +1,36 @@ +FROM maven:3.9-eclipse-temurin-26 AS build + +WORKDIR /src +COPY pom.xml ./ +RUN mvn -q -DskipTests dependency:go-offline +COPY LICENSE ./ +COPY src ./src +RUN mvn -q -DskipTests package dependency:copy-dependencies \ + -DincludeScope=runtime -DoutputDirectory=/deps + +FROM eclipse-temurin:26-jre + +RUN apt-get update \ + && apt-get install -y --no-install-recommends libssl3 \ + && rm -rf /var/lib/apt/lists/* + +ARG CARDIGAN_HTTPARENA_MODE=h1 +ENV CARDIGAN_HTTPARENA_MODE=${CARDIGAN_HTTPARENA_MODE} + +WORKDIR /app +COPY --from=build /src/target/cardigan-httparena.jar ./cardigan-httparena.jar +COPY --from=build /deps ./lib + +EXPOSE 8080 8081 8082 8443 + +ENTRYPOINT ["java", \ + "--enable-preview", \ + "--enable-native-access=ALL-UNNAMED", \ + "--add-opens", "java.base/java.lang=ALL-UNNAMED", \ + "--add-modules", "jdk.incubator.vector", \ + "-Xms512m", "-Xmx2g", \ + "-XX:MaxInlineSize=150", \ + "-XX:FreqInlineSize=600", \ + "-Dcardigan.tls.handshake.max.pending.per.loop=256", \ + "-cp", "/app/cardigan-httparena.jar:/app/lib/*", \ + "dev.cardigan.httparena.HttpArenaMain"] diff --git a/frameworks/cardigan/LICENSE b/frameworks/cardigan/LICENSE new file mode 100644 index 000000000..d0a1fa148 --- /dev/null +++ b/frameworks/cardigan/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/frameworks/cardigan/build.sh b/frameworks/cardigan/build.sh new file mode 100755 index 000000000..c9968b8ca --- /dev/null +++ b/frameworks/cardigan/build.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" +docker build -t httparena-cardigan \ + --build-arg CARDIGAN_HTTPARENA_MODE=h1 \ + "$SCRIPT_DIR" diff --git a/frameworks/cardigan/meta.json b/frameworks/cardigan/meta.json new file mode 100644 index 000000000..109ddae99 --- /dev/null +++ b/frameworks/cardigan/meta.json @@ -0,0 +1,17 @@ +{ + "display_name": "Cardigan", + "language": "Java", + "type": "engine", + "engine": "io_uring", + "description": "Java HTTP engine built on io_uring, Panama FFI, virtual threads, and thread-per-core event loops.", + "repo": "https://github.com/phjeltman/cardigan", + "enabled": true, + "tests": [ + "baseline", + "pipelined", + "limited-conn" + ], + "maintainers": [ + "phjeltman" + ] +} diff --git a/frameworks/cardigan/pom.xml b/frameworks/cardigan/pom.xml new file mode 100644 index 000000000..79c82b6c3 --- /dev/null +++ b/frameworks/cardigan/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + dev.cardigan.internal + cardigan-httparena + 0.1.0-SNAPSHOT + Cardigan HttpArena submission + HttpArena routes and launcher for the Cardigan framework + + + 26 + UTF-8 + true + 0.1.0-alpha1 + 5.11.0 + + + + + dev.cardigan + cardigan + ${cardigan.version} + + + org.junit.jupiter + junit-jupiter + ${junit.jupiter.version} + test + + + + + cardigan-httparena + + + ${project.basedir} + META-INF + + LICENSE + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + + --add-modules + jdk.incubator.vector + --enable-preview + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.2 + + --enable-preview --enable-native-access=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-modules jdk.incubator.vector + + + + org.apache.maven.plugins + maven-jar-plugin + 3.4.2 + + + + dev.cardigan.httparena.HttpArenaMain + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.8.1 + + + + diff --git a/frameworks/cardigan/proto/benchmark.proto b/frameworks/cardigan/proto/benchmark.proto new file mode 100644 index 000000000..a9156ab24 --- /dev/null +++ b/frameworks/cardigan/proto/benchmark.proto @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MPL-2.0 + +syntax = "proto3"; + +package benchmark; + +service BenchmarkService { + rpc GetSum (SumRequest) returns (SumReply); + rpc StreamSum (StreamRequest) returns (stream SumReply); +} + +message SumRequest { + int32 a = 1; + int32 b = 2; +} + +message StreamRequest { + int32 a = 1; + int32 b = 2; + int32 count = 3; +} + +message SumReply { + int32 result = 1; +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaController.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaController.java new file mode 100644 index 000000000..02b954308 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaController.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.http.Get; +import dev.cardigan.http.Post; +import dev.cardigan.http.QueryParam; +import dev.cardigan.http.RequestBody; +import dev.cardigan.http.Response; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; + +/** The small arithmetic endpoints shared by the HttpArena transports. */ +public final class HttpArenaController { + @Get("/baseline11") + public Response baseline11( + @QueryParam("a") int a, + @QueryParam("b") int b) { + return Response.text(Long.toString((long) a + b)); + } + + @Post("/baseline11") + public Response baseline11( + @QueryParam("a") int a, + @QueryParam("b") int b, + RequestBody body) { + long sum = (long) a + b; + try (Arena arena = Arena.ofConfined()) { + MemorySegment scratch = arena.allocate(64); + sum += readLong(body, scratch); + } + return Response.text(Long.toString(sum)); + } + + @Get("/pipeline") + public Response pipeline() { + return Response.text("ok"); + } + + @Get("/baseline2") + public Response baseline2( + @QueryParam("a") int a, + @QueryParam("b") int b) { + return Response.text(Long.toString((long) a + b)); + } + + private static long readLong(RequestBody body, MemorySegment scratch) { + long value = 0; + boolean negative = false; + boolean started = false; + int count; + while ((count = body.read(scratch)) >= 0) { + for (int index = 0; index < count; index++) { + byte current = scratch.get(ValueLayout.JAVA_BYTE, index); + if (!started && (current == ' ' || current == '\t' + || current == '\r' || current == '\n')) { + continue; + } + if (!started && current == '-') { + negative = true; + started = true; + continue; + } + if (current < '0' || current > '9') { + throw new IllegalArgumentException( + "baseline body must be an integer"); + } + started = true; + value = value * 10 + current - '0'; + } + } + if (!started) { + throw new IllegalArgumentException( + "baseline body must be an integer"); + } + return negative ? -value : value; + } +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaDataset.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaDataset.java new file mode 100644 index 000000000..f264dd663 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaDataset.java @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.http.StreamingBody; +import dev.cardigan.serdes.Serdes; +import dev.cardigan.simdjson.ondemand.Value; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** Immutable startup representation of HttpArena's mounted JSON dataset. */ +final class HttpArenaDataset { + private static final byte[] PREFIX = + "{\"items\":[".getBytes(StandardCharsets.US_ASCII); + private static final byte[] TOTAL = + ",\"total\":".getBytes(StandardCharsets.US_ASCII); + private static final byte[] COUNT = + "],\"count\":".getBytes(StandardCharsets.US_ASCII); + + private final byte[][] itemPrefixes; + private final long[] baseTotals; + + private HttpArenaDataset(byte[][] itemPrefixes, long[] baseTotals) { + this.itemPrefixes = itemPrefixes; + this.baseTotals = baseTotals; + } + + static HttpArenaDataset load(Path path) throws IOException { + byte[] source = Files.readAllBytes(path); + List ranges = itemRanges(source); + byte[][] prefixes = new byte[ranges.size()][]; + long[] totals = new long[ranges.size()]; + for (int index = 0; index < ranges.size(); index++) { + int[] range = ranges.get(index); + int close = range[1] - 1; + while (close > range[0] && isWhitespace(source[close])) { + close--; + } + if (source[close] != '}') { + throw new IllegalArgumentException( + "Dataset item is not a JSON object"); + } + prefixes[index] = Arrays.copyOfRange( + source, range[0], close); + Value item = Serdes.parseOnDemand( + MemorySegment.ofArray(source), + range[0], range[1] - range[0]); + totals[index] = Math.multiplyExact( + item.get("price").getLong(), + item.get("quantity").getLong()); + } + if (prefixes.length < 50) { + throw new IllegalArgumentException( + "HttpArena dataset must contain at least 50 items"); + } + return new HttpArenaDataset(prefixes, totals); + } + + StreamingBody render(int requestedCount, long multiplier) { + int count = Math.max(0, Math.min(requestedCount, itemPrefixes.length)); + int length = PREFIX.length + COUNT.length + digits(count) + 1; + for (int index = 0; index < count; index++) { + length += itemPrefixes[index].length + TOTAL.length + 1; + length += digits(Math.multiplyExact(baseTotals[index], multiplier)); + if (index != 0) { + length++; + } + } + + byte[] output = new byte[length]; + int offset = copy(PREFIX, output, 0); + for (int index = 0; index < count; index++) { + if (index != 0) { + output[offset++] = ','; + } + offset = copy(itemPrefixes[index], output, offset); + offset = copy(TOTAL, output, offset); + offset = writeLong( + output, offset, + Math.multiplyExact(baseTotals[index], multiplier)); + output[offset++] = '}'; + } + offset = copy(COUNT, output, offset); + offset = writeLong(output, offset, count); + output[offset++] = '}'; + if (offset != output.length) { + throw new IllegalStateException("Incorrect JSON response length"); + } + + MemorySegment bytes = MemorySegment.ofArray(output); + return StreamingBody.of(output.length, new StreamingBody.Reader() { + private int position; + + @Override + public int read(MemorySegment destination) { + if (position == output.length) { + return -1; + } + int amount = Math.min( + output.length - position, + Math.toIntExact(destination.byteSize())); + MemorySegment.copy( + bytes, position, destination, 0, amount); + position += amount; + return amount; + } + }); + } + + int size() { + return itemPrefixes.length; + } + + private static List itemRanges(byte[] source) { + List ranges = new ArrayList<>(); + boolean string = false; + boolean escaped = false; + int arrayDepth = 0; + int objectDepth = 0; + int start = -1; + for (int index = 0; index < source.length; index++) { + byte current = source[index]; + if (string) { + if (escaped) { + escaped = false; + } else if (current == '\\') { + escaped = true; + } else if (current == '"') { + string = false; + } + continue; + } + if (current == '"') { + string = true; + } else if (current == '[') { + arrayDepth++; + } else if (current == ']') { + arrayDepth--; + } else if (current == '{') { + if (arrayDepth == 1 && objectDepth == 0) { + start = index; + } + objectDepth++; + } else if (current == '}') { + objectDepth--; + if (arrayDepth == 1 && objectDepth == 0 && start >= 0) { + ranges.add(new int[] {start, index + 1}); + start = -1; + } + } + if (arrayDepth < 0 || objectDepth < 0) { + throw new IllegalArgumentException("Malformed JSON dataset"); + } + } + if (string || arrayDepth != 0 || objectDepth != 0 || ranges.isEmpty()) { + throw new IllegalArgumentException("Malformed JSON dataset"); + } + return ranges; + } + + private static int copy(byte[] source, byte[] target, int offset) { + System.arraycopy(source, 0, target, offset, source.length); + return offset + source.length; + } + + private static int digits(long value) { + int result = value < 0 ? 2 : 1; + while (value <= -10 || value >= 10) { + value /= 10; + result++; + } + return result; + } + + private static int writeLong(byte[] target, int offset, long value) { + int length = digits(value); + int end = offset + length; + int cursor = end; + boolean negative = value < 0; + do { + long remainder = value % 10; + target[--cursor] = (byte) ('0' + Math.abs(remainder)); + value /= 10; + } while (value != 0); + if (negative) { + target[offset] = '-'; + } + return end; + } + + private static boolean isWhitespace(byte value) { + return value == ' ' || value == '\t' + || value == '\r' || value == '\n'; + } +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaGrpcController.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaGrpcController.java new file mode 100644 index 000000000..5f1a39333 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaGrpcController.java @@ -0,0 +1,333 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.http.DecodedBody; +import dev.cardigan.http.LongBodyDecoder; +import dev.cardigan.http.Post; +import dev.cardigan.http.Response; +import dev.cardigan.http.ResponseHeaders; +import dev.cardigan.http.StreamingBody; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.ByteOrder; + +/** Implements the two gRPC methods exercised by HttpArena. */ +public final class HttpArenaGrpcController { + private static final String CONTENT_TYPE = "application/grpc"; + private static final int MAX_STREAM_REPLIES = 1_000_000; + private static final long INVALID_REQUEST = 0xffff_ffff_0000_0000L; + private static final ValueLayout.OfInt BIG_ENDIAN_INT = + ValueLayout.JAVA_INT_UNALIGNED.withOrder(ByteOrder.BIG_ENDIAN); + private static final ResponseHeaders OK_TRAILERS = + ResponseHeaders.builder().add("grpc-status", "0").build(); + private static final ResponseHeaders INVALID_ARGUMENT_TRAILERS = + ResponseHeaders.builder().add("grpc-status", "3").build(); + + @Post("/benchmark.BenchmarkService/GetSum") + public Response getSum( + @DecodedBody(GetSumDecoder.class) long decoded + ) { + if ((int) (decoded >>> 32) < 0) { + return failure(INVALID_ARGUMENT_TRAILERS); + } + return replies((int) decoded, 1); + } + + @Post("/benchmark.BenchmarkService/StreamSum") + public Response streamSum( + @DecodedBody(StreamSumDecoder.class) long decoded + ) { + int count = (int) (decoded >>> 32); + if (count < 0 || count > MAX_STREAM_REPLIES) { + return failure(INVALID_ARGUMENT_TRAILERS); + } + return replies((int) decoded, count); + } + + private static Response replies(int first, int count) { + if (count == 0) { + return new Response(200, CONTENT_TYPE, null) + .withTrailers(OK_TRAILERS); + } + int length = encodedLength(first, count); + StreamingBody body = StreamingBody.of( + length, new ReplyReader(first, count)); + return Response.stream(CONTENT_TYPE, body) + .withTrailers(OK_TRAILERS); + } + + private static Response failure(ResponseHeaders trailers) { + return new Response(200, CONTENT_TYPE, null) + .withTrailers(trailers); + } + + /** + * Returns {@code count << 32 | sum}. The canonical requests contain only + * int32 varints, but unknown fixed- and length-delimited fields are skipped + * according to the protobuf wire format. + */ + private static long decodeRequest( + MemorySegment source, + long start, + long length, + boolean includeCount + ) { + if (source == null || length < 5 || start < 0 + || start > source.byteSize() - length) { + throw new IllegalArgumentException("truncated gRPC frame"); + } + if (source.get(ValueLayout.JAVA_BYTE, start) != 0) { + throw new IllegalArgumentException( + "compressed gRPC requests are unsupported"); + } + int messageLength = source.get(BIG_ENDIAN_INT, start + 1); + if (messageLength < 0 || messageLength != length - 5) { + throw new IllegalArgumentException("invalid gRPC frame length"); + } + + long cursor = start + 5; + long end = cursor + messageLength; + int a = 0; + int b = 0; + int count = 0; + while (cursor < end) { + long key = 0; + int shift = 0; + int current; + do { + if (cursor == end || shift >= 35) { + throw new IllegalArgumentException("invalid protobuf key"); + } + current = source.get( + ValueLayout.JAVA_BYTE, cursor++) & 0xff; + key |= (long) (current & 0x7f) << shift; + shift += 7; + } while ((current & 0x80) != 0); + + int field = (int) (key >>> 3); + int wireType = (int) key & 7; + if (field == 0) { + throw new IllegalArgumentException("invalid protobuf field"); + } + if (wireType == 0) { + long value = 0; + shift = 0; + do { + if (cursor == end || shift >= 70) { + throw new IllegalArgumentException( + "invalid protobuf varint"); + } + current = source.get( + ValueLayout.JAVA_BYTE, cursor++) & 0xff; + value |= (long) (current & 0x7f) << shift; + shift += 7; + } while ((current & 0x80) != 0); + if (field == 1) { + a = (int) value; + } else if (field == 2) { + b = (int) value; + } else if (field == 3 && includeCount) { + count = (int) value; + } + continue; + } + + long skipped = switch (wireType) { + case 1 -> 8; + case 2 -> { + long value = 0; + shift = 0; + do { + if (cursor == end || shift >= 70) { + throw new IllegalArgumentException( + "invalid protobuf length"); + } + current = source.get( + ValueLayout.JAVA_BYTE, cursor++) & 0xff; + value |= (long) (current & 0x7f) << shift; + shift += 7; + } while ((current & 0x80) != 0); + yield value; + } + case 5 -> 4; + default -> throw new IllegalArgumentException( + "unsupported protobuf wire type"); + }; + if (skipped < 0 || skipped > end - cursor) { + throw new IllegalArgumentException( + "truncated protobuf field"); + } + cursor += skipped; + } + int sum = a + b; + return ((long) count << 32) | (sum & 0xffff_ffffL); + } + + public static final class GetSumDecoder implements LongBodyDecoder { + @Override + public long decode( + MemorySegment source, + long offset, + long length + ) { + try { + return decodeRequest(source, offset, length, false); + } catch (IllegalArgumentException invalid) { + return INVALID_REQUEST; + } + } + } + + public static final class StreamSumDecoder implements LongBodyDecoder { + @Override + public long decode( + MemorySegment source, + long offset, + long length + ) { + try { + return decodeRequest(source, offset, length, true); + } catch (IllegalArgumentException invalid) { + return INVALID_REQUEST; + } + } + } + + private static int encodedLength(int first, int count) { + long length = 0; + for (int index = 0; index < count; index++) { + length += 6L + varintLength(first + index); + } + if (length > Integer.MAX_VALUE) { + throw new IllegalArgumentException("gRPC response is too large"); + } + return (int) length; + } + + private static int varintLength(int value) { + if (value < 0) { + return 10; + } + int bits = Integer.SIZE - Integer.numberOfLeadingZeros(value); + return Math.max(1, (bits + 6) / 7); + } + + private static final class ReplyReader implements StreamingBody.Reader { + private final int first; + private final int count; + private int index; + private long carryLow; + private long carryHigh; + private int carryOffset; + private int carryLength; + + private ReplyReader(int first, int count) { + this.first = first; + this.count = count; + } + + @Override + public int read(MemorySegment destination) { + int capacity = Math.toIntExact(destination.byteSize()); + int output = 0; + while (output < capacity && carryOffset < carryLength) { + destination.set( + ValueLayout.JAVA_BYTE, + output++, + carryByte(carryOffset++) + ); + } + if (carryOffset == carryLength) { + carryOffset = 0; + carryLength = 0; + } + + while (output < capacity && index < count) { + int result = first + index; + int frameLength = 6 + varintLength(result); + if (capacity - output >= frameLength) { + output += writeFrame(destination, output, result); + index++; + continue; + } + encodeCarry(result); + index++; + while (output < capacity && carryOffset < carryLength) { + destination.set( + ValueLayout.JAVA_BYTE, + output++, + carryByte(carryOffset++) + ); + } + if (carryOffset == carryLength) { + carryOffset = 0; + carryLength = 0; + } + } + return output == 0 ? -1 : output; + } + + private static int writeFrame( + MemorySegment destination, + int offset, + int result + ) { + int valueLength = varintLength(result); + destination.set(ValueLayout.JAVA_BYTE, offset, (byte) 0); + destination.set(BIG_ENDIAN_INT, offset + 1, 1 + valueLength); + destination.set(ValueLayout.JAVA_BYTE, offset + 5, (byte) 8); + long value = result; + int cursor = offset + 6; + while ((value & ~0x7fL) != 0) { + destination.set( + ValueLayout.JAVA_BYTE, + cursor++, + (byte) ((value & 0x7f) | 0x80) + ); + value >>>= 7; + } + destination.set( + ValueLayout.JAVA_BYTE, cursor++, (byte) value); + return cursor - offset; + } + + private void encodeCarry(int result) { + carryLow = 0; + carryHigh = 0; + carryOffset = 0; + int valueLength = varintLength(result); + int cursor = 0; + putCarry(cursor++, 0); + int messageLength = 1 + valueLength; + putCarry(cursor++, messageLength >>> 24); + putCarry(cursor++, messageLength >>> 16); + putCarry(cursor++, messageLength >>> 8); + putCarry(cursor++, messageLength); + putCarry(cursor++, 8); + long value = result; + while ((value & ~0x7fL) != 0) { + putCarry(cursor++, (int) ((value & 0x7f) | 0x80)); + value >>>= 7; + } + putCarry(cursor++, (int) value); + carryLength = cursor; + } + + private void putCarry(int offset, int value) { + if (offset < Long.BYTES) { + carryLow |= (long) (value & 0xff) << (offset * 8); + } else { + carryHigh |= (long) (value & 0xff) + << ((offset - Long.BYTES) * 8); + } + } + + private byte carryByte(int offset) { + long word = offset < Long.BYTES ? carryLow : carryHigh; + int shift = (offset & (Long.BYTES - 1)) * 8; + return (byte) (word >>> shift); + } + } +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaJsonController.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaJsonController.java new file mode 100644 index 000000000..cbca73b26 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaJsonController.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.http.Get; +import dev.cardigan.http.QueryParam; +import dev.cardigan.http.Response; + +/** Live JSON transformation endpoint used by HttpArena's TLS profile. */ +public final class HttpArenaJsonController { + private final HttpArenaDataset dataset; + + HttpArenaJsonController(HttpArenaDataset dataset) { + this.dataset = dataset; + } + + @Get("/json/{count}") + public Response json( + int count, + @QueryParam(value = "m", defaultValue = 1) int multiplier) { + if (count < 1 || count > dataset.size()) { + return new Response( + 400, "text/plain", Response.CT_TEXT, + "count must be between 1 and " + dataset.size()); + } + return Response.stream( + "application/json", dataset.render(count, multiplier)); + } +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaMain.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaMain.java new file mode 100644 index 000000000..9a79e7ea5 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaMain.java @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.core.CardiganServer; +import dev.cardigan.core.ProtocolMode; +import dev.cardigan.tls.TlsConfig; + +import java.nio.file.Path; + +/** Dedicated launcher for the independently scored HttpArena transports. */ +public final class HttpArenaMain { + private HttpArenaMain() { + } + + public static void main(String[] args) throws Exception { + String mode = args.length == 0 + ? System.getenv().getOrDefault( + "CARDIGAN_HTTPARENA_MODE", "h1") + : args[0]; + int threads = Integer.parseInt( + System.getenv().getOrDefault( + "CARDIGAN_THREADS", + Integer.toString( + Runtime.getRuntime().availableProcessors()))); + System.setProperty( + "jdk.virtualThreadScheduler.parallelism", + Integer.toString(threads)); + System.setProperty( + "jdk.virtualThreadScheduler.maxPoolSize", + Integer.toString(threads)); + + int port = switch (mode) { + case "h1", "grpc" -> 8080; + case "json-tls" -> 8081; + case "h2c" -> 8082; + case "h2", "grpc-tls" -> 8443; + default -> throw new IllegalArgumentException( + "Unknown HttpArena mode: " + mode); + }; + Path certificate = environmentPath( + "CARDIGAN_CERTIFICATE", "/certs/server.crt"); + Path privateKey = environmentPath( + "CARDIGAN_PRIVATE_KEY", "/certs/server.key"); + boolean tlsMode = mode.equals("json-tls") + || mode.equals("h2") || mode.equals("grpc-tls"); + TlsConfig tls = tlsMode + ? new TlsConfig(certificate, privateKey) + : null; + ProtocolMode protocol = switch (mode) { + case "h2", "h2c", "grpc", "grpc-tls" -> + ProtocolMode.HTTP2_ONLY; + case "h1", "json-tls" -> ProtocolMode.HTTP1_ONLY; + default -> throw new AssertionError(mode); + }; + + CardiganServer.Builder builder = CardiganServer.builder() + .port(port) + .eventLoops(threads) + .protocol(protocol) + .routes(new HttpArenaController()); + if (tls == null) { + builder.plaintext(); + } else { + builder.tls(tls); + } + if (mode.equals("json-tls")) { + builder.routes(new HttpArenaJsonController( + HttpArenaDataset.load(environmentPath( + "CARDIGAN_DATASET", "/data/dataset.json")))); + } else if (mode.equals("h2")) { + builder.routes(new HttpArenaStaticController( + environmentPath( + "CARDIGAN_STATIC_DIR", "/data/static"))); + } else if (mode.equals("grpc") || mode.equals("grpc-tls")) { + builder.routes(new HttpArenaGrpcController()); + } + + CardiganServer plaintext = mode.equals("json-tls") + ? CardiganServer.builder() + .port(8080) + .eventLoops(1) + .protocol(ProtocolMode.HTTP1_ONLY) + .plaintext() + .routes(new HttpArenaController()) + .build() + : null; + try (plaintext; CardiganServer server = builder.build()) { + Runtime.getRuntime().addShutdownHook( + Thread.ofPlatform() + .name("cardigan-httparena-shutdown") + .unstarted(() -> { + server.close(); + if (plaintext != null) plaintext.close(); + })); + if (plaintext != null) { + plaintext.start(); + System.out.println( + "Cardigan HttpArena baseline readiness is listening" + + " on 8080"); + } + server.start(); + System.out.println( + "Cardigan HttpArena mode " + mode + + " is listening on " + port); + Thread.currentThread().join(); + } + } + + private static Path environmentPath(String name, String fallback) { + return Path.of(System.getenv().getOrDefault(name, fallback)); + } +} diff --git a/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaStaticController.java b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaStaticController.java new file mode 100644 index 000000000..c18f4cda0 --- /dev/null +++ b/frameworks/cardigan/src/main/java/dev/cardigan/httparena/HttpArenaStaticController.java @@ -0,0 +1,367 @@ +// SPDX-License-Identifier: MPL-2.0 + +package dev.cardigan.httparena; + +import dev.cardigan.http.Get; +import dev.cardigan.http.HttpRequest; +import dev.cardigan.http.Response; +import dev.cardigan.http.ResponseHeaders; +import dev.cardigan.http.StaticBody; +import dev.cardigan.http.Utf8Slice; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.file.Files; +import java.nio.file.Path; + +/** Preloads the fixed HttpArena static corpus into Cardigan native bodies. */ +public final class HttpArenaStaticController { + private static final ResponseHeaders VARY_ENCODING = + ResponseHeaders.of("vary", "Accept-Encoding"); + private static final ResponseHeaders BROTLI_ENCODING = + ResponseHeaders.builder() + .add("content-encoding", "br") + .add("vary", "Accept-Encoding") + .build(); + + private final StaticAsset resetCss; + private final StaticAsset layoutCss; + private final StaticAsset themeCss; + private final StaticAsset componentsCss; + private final StaticAsset utilitiesCss; + private final StaticAsset analyticsJs; + private final StaticAsset helpersJs; + private final StaticAsset appJs; + private final StaticAsset vendorJs; + private final StaticAsset routerJs; + private final StaticAsset headerHtml; + private final StaticAsset footerHtml; + private final StaticAsset regularWoff2; + private final StaticAsset boldWoff2; + private final StaticAsset logoSvg; + private final StaticAsset iconSpriteSvg; + private final StaticAsset heroWebp; + private final StaticAsset thumb1Webp; + private final StaticAsset thumb2Webp; + private final StaticAsset manifestJson; + + HttpArenaStaticController(Path directory) throws IOException { + resetCss = load(directory, "reset.css", "text/css"); + layoutCss = load(directory, "layout.css", "text/css"); + themeCss = load(directory, "theme.css", "text/css"); + componentsCss = load(directory, "components.css", "text/css"); + utilitiesCss = load(directory, "utilities.css", "text/css"); + analyticsJs = load( + directory, "analytics.js", "application/javascript"); + helpersJs = load( + directory, "helpers.js", "application/javascript"); + appJs = load(directory, "app.js", "application/javascript"); + vendorJs = load(directory, "vendor.js", "application/javascript"); + routerJs = load(directory, "router.js", "application/javascript"); + headerHtml = load(directory, "header.html", "text/html"); + footerHtml = load(directory, "footer.html", "text/html"); + regularWoff2 = load(directory, "regular.woff2", "font/woff2"); + boldWoff2 = load(directory, "bold.woff2", "font/woff2"); + logoSvg = load(directory, "logo.svg", "image/svg+xml"); + iconSpriteSvg = load( + directory, "icon-sprite.svg", "image/svg+xml"); + heroWebp = load(directory, "hero.webp", "image/webp"); + thumb1Webp = load(directory, "thumb1.webp", "image/webp"); + thumb2Webp = load(directory, "thumb2.webp", "image/webp"); + manifestJson = load( + directory, "manifest.json", "application/json"); + } + + @Get("/static/reset.css") + public Response resetCss(HttpRequest request) { + return resetCss.select(request); + } + + @Get("/static/layout.css") + public Response layoutCss(HttpRequest request) { + return layoutCss.select(request); + } + + @Get("/static/theme.css") + public Response themeCss(HttpRequest request) { + return themeCss.select(request); + } + + @Get("/static/components.css") + public Response componentsCss(HttpRequest request) { + return componentsCss.select(request); + } + + @Get("/static/utilities.css") + public Response utilitiesCss(HttpRequest request) { + return utilitiesCss.select(request); + } + + @Get("/static/analytics.js") + public Response analyticsJs(HttpRequest request) { + return analyticsJs.select(request); + } + + @Get("/static/helpers.js") + public Response helpersJs(HttpRequest request) { + return helpersJs.select(request); + } + + @Get("/static/app.js") + public Response appJs(HttpRequest request) { + return appJs.select(request); + } + + @Get("/static/vendor.js") + public Response vendorJs(HttpRequest request) { + return vendorJs.select(request); + } + + @Get("/static/router.js") + public Response routerJs(HttpRequest request) { + return routerJs.select(request); + } + + @Get("/static/header.html") + public Response headerHtml(HttpRequest request) { + return headerHtml.select(request); + } + + @Get("/static/footer.html") + public Response footerHtml(HttpRequest request) { + return footerHtml.select(request); + } + + @Get("/static/regular.woff2") + public Response regularWoff2(HttpRequest request) { + return regularWoff2.select(request); + } + + @Get("/static/bold.woff2") + public Response boldWoff2(HttpRequest request) { + return boldWoff2.select(request); + } + + @Get("/static/logo.svg") + public Response logoSvg(HttpRequest request) { + return logoSvg.select(request); + } + + @Get("/static/icon-sprite.svg") + public Response iconSpriteSvg(HttpRequest request) { + return iconSpriteSvg.select(request); + } + + @Get("/static/hero.webp") + public Response heroWebp(HttpRequest request) { + return heroWebp.select(request); + } + + @Get("/static/thumb1.webp") + public Response thumb1Webp(HttpRequest request) { + return thumb1Webp.select(request); + } + + @Get("/static/thumb2.webp") + public Response thumb2Webp(HttpRequest request) { + return thumb2Webp.select(request); + } + + @Get("/static/manifest.json") + public Response manifestJson(HttpRequest request) { + return manifestJson.select(request); + } + + private static StaticAsset load( + Path directory, String filename, String contentType) + throws IOException { + Path identityPath = directory.resolve(filename); + Response identity = response(identityPath, contentType); + Path brotliPath = directory.resolve(filename + ".br"); + if (!Files.isRegularFile(brotliPath)) { + return new StaticAsset(identity, null); + } + return new StaticAsset( + identity.withHeaders(VARY_ENCODING), + response(brotliPath, contentType).withHeaders(BROTLI_ENCODING)); + } + + private static Response response(Path path, String contentType) + throws IOException { + return new Response( + 200, contentType, + StaticBody.copyOf(Files.readAllBytes(path))); + } + + static boolean acceptsBrotli(Utf8Slice value) { + if (value == null || value.length() == 0) { + return false; + } + MemorySegment bytes = value.segment(); + long cursor = value.offset(); + long end = cursor + value.length(); + int explicit = -1; + int wildcard = -1; + while (cursor < end) { + cursor = skipDelimiters(bytes, cursor, end); + long tokenStart = cursor; + while (cursor < end && isToken(byteAt(bytes, cursor))) { + cursor++; + } + long tokenEnd = cursor; + int quality = 1_000; + while (cursor < end && byteAt(bytes, cursor) != ',') { + cursor = skipWhitespace(bytes, cursor, end); + if (cursor >= end || byteAt(bytes, cursor) == ',') { + break; + } + if (byteAt(bytes, cursor) != ';') { + cursor++; + continue; + } + cursor = skipWhitespace(bytes, cursor + 1, end); + long nameStart = cursor; + while (cursor < end && isToken(byteAt(bytes, cursor))) { + cursor++; + } + long nameEnd = cursor; + cursor = skipWhitespace(bytes, cursor, end); + if (cursor >= end || byteAt(bytes, cursor) != '=') { + continue; + } + cursor = skipWhitespace(bytes, cursor + 1, end); + long parameterStart = cursor; + while (cursor < end) { + byte current = byteAt(bytes, cursor); + if (current == ';' || current == ',') { + break; + } + cursor++; + } + long parameterEnd = trimWhitespace( + bytes, parameterStart, cursor); + if (equalsIgnoreCase( + bytes, nameStart, nameEnd, "q")) { + quality = parseQuality( + bytes, parameterStart, parameterEnd); + } + } + if (equalsIgnoreCase(bytes, tokenStart, tokenEnd, "br")) { + explicit = Math.max(explicit, quality); + } else if (tokenEnd - tokenStart == 1 + && byteAt(bytes, tokenStart) == '*') { + wildcard = Math.max(wildcard, quality); + } + if (cursor < end) { + cursor++; + } + } + return explicit >= 0 ? explicit != 0 : wildcard > 0; + } + + private static int parseQuality( + MemorySegment bytes, long start, long end) { + if (start >= end) { + return 0; + } + byte whole = byteAt(bytes, start++); + if (whole != '0' && whole != '1') { + return 0; + } + int quality = whole == '1' ? 1_000 : 0; + if (start == end) { + return quality; + } + if (byteAt(bytes, start++) != '.' || end - start > 3) { + return 0; + } + int place = 100; + while (start < end) { + byte digit = byteAt(bytes, start++); + if (digit < '0' || digit > '9' + || whole == '1' && digit != '0') { + return 0; + } + quality += (digit - '0') * place; + place /= 10; + } + return quality; + } + + private static long skipDelimiters( + MemorySegment bytes, long cursor, long end) { + while (cursor < end) { + byte current = byteAt(bytes, cursor); + if (current != ',' && current != ' ' && current != '\t') { + break; + } + cursor++; + } + return cursor; + } + + private static long skipWhitespace( + MemorySegment bytes, long cursor, long end) { + while (cursor < end) { + byte current = byteAt(bytes, cursor); + if (current != ' ' && current != '\t') { + break; + } + cursor++; + } + return cursor; + } + + private static long trimWhitespace( + MemorySegment bytes, long start, long end) { + while (end > start) { + byte current = byteAt(bytes, end - 1); + if (current != ' ' && current != '\t') { + break; + } + end--; + } + return end; + } + + private static boolean equalsIgnoreCase( + MemorySegment bytes, long start, long end, String expected) { + if (end - start != expected.length()) { + return false; + } + for (int index = 0; index < expected.length(); index++) { + int actual = byteAt(bytes, start + index); + if (actual >= 'A' && actual <= 'Z') { + actual += 'a' - 'A'; + } + if (actual != expected.charAt(index)) { + return false; + } + } + return true; + } + + private static boolean isToken(byte value) { + return value > 0x20 && value < 0x7f + && switch (value) { + case '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', + '/', '[', ']', '?', '=', '{', '}' -> false; + default -> true; + }; + } + + private static byte byteAt(MemorySegment bytes, long offset) { + return bytes.get(ValueLayout.JAVA_BYTE, offset); + } + + private record StaticAsset(Response identity, Response brotli) { + Response select(HttpRequest request) { + if (brotli == null) { + return identity; + } + return acceptsBrotli(request.getHeader("Accept-Encoding")) + ? brotli : identity; + } + } +} From e2bdfa5d1c183b19b33e653cd718047adfe6b8c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:25:29 +0000 Subject: [PATCH 2/7] Benchmark results: cardigan [skip ci] --- site/data/frameworks.json | 68 +++++++-- site/data/results/cardigan.json | 123 ++++++++++++++++ site/static/logs/baseline/4096/cardigan.log | 135 ++++++++++++++++++ site/static/logs/baseline/512/cardigan.log | 135 ++++++++++++++++++ .../logs/limited-conn/4096/cardigan.log | 135 ++++++++++++++++++ .../static/logs/limited-conn/512/cardigan.log | 135 ++++++++++++++++++ site/static/logs/pipelined/4096/cardigan.log | 135 ++++++++++++++++++ site/static/logs/pipelined/512/cardigan.log | 135 ++++++++++++++++++ 8 files changed, 993 insertions(+), 8 deletions(-) create mode 100644 site/data/results/cardigan.json create mode 100644 site/static/logs/baseline/4096/cardigan.log create mode 100644 site/static/logs/baseline/512/cardigan.log create mode 100644 site/static/logs/limited-conn/4096/cardigan.log create mode 100644 site/static/logs/limited-conn/512/cardigan.log create mode 100644 site/static/logs/pipelined/4096/cardigan.log create mode 100644 site/static/logs/pipelined/512/cardigan.log diff --git a/site/data/frameworks.json b/site/data/frameworks.json index 79b0a35d5..edfcb4479 100644 --- a/site/data/frameworks.json +++ b/site/data/frameworks.json @@ -170,6 +170,50 @@ "engine": "bun", "mode": "tuned" }, + "Cardigan": { + "dir": "cardigan", + "description": "Java HTTP engine built on io_uring, Panama FFI, virtual threads, and thread-per-core event loops.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring", + "variants": [ + { + "dir": "cardigan-grpc", + "description": "Cardigan gRPC over cleartext HTTP/2 prior knowledge.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring" + }, + { + "dir": "cardigan-grpc-tls", + "description": "Cardigan gRPC over HTTP/2 and TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring" + }, + { + "dir": "cardigan-h2", + "description": "Cardigan HTTP/2 over TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring" + }, + { + "dir": "cardigan-h2c", + "description": "Cardigan HTTP/2 over cleartext prior knowledge.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring" + }, + { + "dir": "cardigan-json-tls", + "description": "Cardigan HTTP/1.1 over TLS.", + "repo": "https://github.com/phjeltman/cardigan", + "type": "engine", + "engine": "io_uring" + } + ] + }, "dart-io": { "dir": "dart-io", "description": "Stock Dart HttpServer baseline in the same SDK lineage as dart-zig, with optional JIT/AOT runtime mode via DART_IO_MODE for direct PR comparisons.", @@ -574,6 +618,14 @@ "engine": "v8", "mode": "tuned" }, + "pedestal": { + "dir": "pedestal", + "description": "Pedestal connector-map benchmark entry using the standard Jetty-backed server.", + "repo": "https://github.com/pedestal/pedestal", + "type": "emerging", + "engine": "Jetty", + "mode": "standard" + }, "phoenix-bandit": { "dir": "phoenix-bandit", "description": "High-performance Elixir framework using Phoenix and Bandit HTTP server, leveraging Erlang/OTP for concurrent networking and asynchronous database operations.", @@ -669,14 +721,6 @@ "engine": "robaho-httpserver", "mode": "standard" }, - "ring": { - "dir": "ring", - "description": "Ring application using the official Ring Jetty adapter and standard Ring middleware.", - "repo": "https://github.com/ring-clojure/ring", - "type": "emerging", - "engine": "Jetty", - "mode": "standard" - }, "ring-jetty9-adapter": { "dir": "ring-jetty9-adapter", "description": "Ring application using the Sunng ring-jetty9-adapter on modern Jetty.", @@ -685,6 +729,14 @@ "engine": "Jetty", "mode": "standard" }, + "ring": { + "dir": "ring", + "description": "Ring application using the official Ring Jetty adapter and standard Ring middleware.", + "repo": "https://github.com/ring-clojure/ring", + "type": "emerging", + "engine": "Jetty", + "mode": "standard" + }, "ringzero-ws": { "dir": "ringzero-ws", "description": "Hand-rolled WebSocket echo server on raw io_uring (liburing) \u2014 no WebSocket library. Multishot accept + multishot recv into a provided buffer ring for zero-copy ingest, one ring per core with SO_REUSEPORT, and a from-scratch RFC 6455 handshake (hand-written SHA-1 + base64) and frame parser/masking.", diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json new file mode 100644 index 000000000..053cbc51d --- /dev/null +++ b/site/data/results/cardigan.json @@ -0,0 +1,123 @@ +{ + "framework": "Cardigan", + "results": { + "baseline-4096": { + "framework": "Cardigan", + "language": "Java", + "rps": 3644808, + "avg_latency": "1.12ms", + "p99_latency": "3.48ms", + "cpu": "6400.4%", + "memory": "5.8GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "312.74MB/s", + "input_bw": "281.55MB/s", + "reconnects": 0, + "status_2xx": 18224041, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-512": { + "framework": "Cardigan", + "language": "Java", + "rps": 3612505, + "avg_latency": "141us", + "p99_latency": "343us", + "cpu": "6362.6%", + "memory": "5.3GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "309.96MB/s", + "input_bw": "279.06MB/s", + "reconnects": 0, + "status_2xx": 18062528, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-4096": { + "framework": "Cardigan", + "language": "Java", + "rps": 2625469, + "avg_latency": "1.43ms", + "p99_latency": "2.50ms", + "cpu": "6020.7%", + "memory": "5.9GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "225.27MB/s", + "input_bw": "202.81MB/s", + "reconnects": 1312390, + "status_2xx": 13127349, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "limited-conn-512": { + "framework": "Cardigan", + "language": "Java", + "rps": 2478558, + "avg_latency": "192us", + "p99_latency": "628us", + "cpu": "5626.4%", + "memory": "5.2GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "212.62MB/s", + "input_bw": "191.46MB/s", + "reconnects": 1239275, + "status_2xx": 12392793, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-4096": { + "framework": "Cardigan", + "language": "Java", + "rps": 39349212, + "avg_latency": "1.66ms", + "p99_latency": "6.40ms", + "cpu": "6406.3%", + "memory": "5.8GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "3.30GB/s", + "reconnects": 0, + "status_2xx": 196746064, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "pipelined-512": { + "framework": "Cardigan", + "language": "Java", + "rps": 41904988, + "avg_latency": "194us", + "p99_latency": "418us", + "cpu": "6383.8%", + "memory": "5.3GiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "3.51GB/s", + "reconnects": 0, + "status_2xx": 209524944, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + } + } +} diff --git a/site/static/logs/baseline/4096/cardigan.log b/site/static/logs/baseline/4096/cardigan.log new file mode 100644 index 000000000..a084e0b32 --- /dev/null +++ b/site/static/logs/baseline/4096/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 67 listening on socket FD 139 +Loop 11 listening on socket FD 154 +Loop 23 listening on socket FD 196 +Loop 0 listening on socket FD 177 +Loop 91 listening on socket FD 180 +Loop 5 listening on socket FD 176 +Loop 86 listening on socket FD 168 +Loop 28 listening on socket FD 147 +Loop 90 listening on socket FD 157 +Loop 13 listening on socket FD 165 +Loop 29 listening on socket FD 179 +Loop 31 listening on socket FD 169 +Loop 7 listening on socket FD 142 +Loop 88 listening on socket FD 167 +Loop 65 listening on socket FD 181 +Loop 69 listening on socket FD 172 +Loop 25 listening on socket FD 192 +Loop 18 listening on socket FD 197 +Loop 75 listening on socket FD 155 +Loop 64 listening on socket FD 137 +Loop 16 listening on socket FD 152 +Loop 2 listening on socket FD 144 +Loop 76 listening on socket FD 195 +Loop 89 listening on socket FD 163 +Loop 66 listening on socket FD 171 +Loop 70 listening on socket FD 189 +Loop 27 listening on socket FD 135 +Loop 8 listening on socket FD 145 +Loop 77 listening on socket FD 148 +Loop 78 listening on socket FD 191 +Loop 84 listening on socket FD 182 +Loop 30 listening on socket FD 173 +Loop 92 listening on socket FD 166 +Loop 24 listening on socket FD 161 +Loop 73 listening on socket FD 158 +Loop 9 listening on socket FD 138 +Loop 85 listening on socket FD 187 +Loop 68 listening on socket FD 190 +Loop 87 listening on socket FD 146 +Loop 15 listening on socket FD 194 +Loop 10 listening on socket FD 160 +Loop 17 listening on socket FD 183 +Loop 93 listening on socket FD 193 +Loop 12 listening on socket FD 140 +Loop 72 listening on socket FD 149 +Loop 3 listening on socket FD 178 +Loop 1 listening on socket FD 164 +Loop 14 listening on socket FD 159 +Loop 95 listening on socket FD 136 +Loop 26 listening on socket FD 162 +Loop 4 listening on socket FD 174 +Loop 6 listening on socket FD 141 +Loop 79 listening on socket FD 143 +Loop 71 listening on socket FD 188 +Loop 19 listening on socket FD 151 +Loop 82 listening on socket FD 175 +Loop 80 listening on socket FD 134 +Loop 20 listening on socket FD 170 +Loop 22 listening on socket FD 150 +Loop 74 listening on socket FD 186 +Loop 94 listening on socket FD 184 +Loop 21 listening on socket FD 156 +Loop 81 listening on socket FD 153 +Loop 83 listening on socket FD 185 +Cardigan HttpArena mode h1 is listening on 8080 diff --git a/site/static/logs/baseline/512/cardigan.log b/site/static/logs/baseline/512/cardigan.log new file mode 100644 index 000000000..d32980684 --- /dev/null +++ b/site/static/logs/baseline/512/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 19 listening on socket FD 176 +Loop 17 listening on socket FD 138 +Loop 92 listening on socket FD 183 +Loop 95 listening on socket FD 134 +Loop 94 listening on socket FD 164 +Loop 3 listening on socket FD 148 +Loop 81 listening on socket FD 140 +Loop 15 listening on socket FD 155 +Loop 77 listening on socket FD 154 +Loop 0 listening on socket FD 152 +Loop 64 listening on socket FD 146 +Loop 7 listening on socket FD 168 +Loop 25 listening on socket FD 143 +Loop 66 listening on socket FD 149 +Loop 26 listening on socket FD 141 +Loop 84 listening on socket FD 160 +Loop 23 listening on socket FD 157 +Loop 71 listening on socket FD 174 +Loop 10 listening on socket FD 197 +Loop 11 listening on socket FD 189 +Loop 9 listening on socket FD 139 +Loop 73 listening on socket FD 159 +Loop 8 listening on socket FD 163 +Loop 72 listening on socket FD 193 +Loop 12 listening on socket FD 181 +Loop 78 listening on socket FD 136 +Loop 75 listening on socket FD 165 +Loop 87 listening on socket FD 190 +Loop 74 listening on socket FD 172 +Loop 18 listening on socket FD 137 +Loop 82 listening on socket FD 194 +Loop 21 listening on socket FD 158 +Loop 88 listening on socket FD 177 +Loop 65 listening on socket FD 195 +Loop 69 listening on socket FD 185 +Loop 5 listening on socket FD 179 +Loop 13 listening on socket FD 147 +Loop 31 listening on socket FD 156 +Loop 14 listening on socket FD 170 +Loop 83 listening on socket FD 184 +Loop 22 listening on socket FD 135 +Loop 16 listening on socket FD 175 +Loop 1 listening on socket FD 186 +Loop 85 listening on socket FD 162 +Loop 20 listening on socket FD 151 +Loop 79 listening on socket FD 161 +Loop 30 listening on socket FD 150 +Loop 28 listening on socket FD 153 +Loop 86 listening on socket FD 191 +Loop 29 listening on socket FD 187 +Loop 80 listening on socket FD 169 +Loop 70 listening on socket FD 166 +Loop 90 listening on socket FD 178 +Loop 76 listening on socket FD 145 +Loop 24 listening on socket FD 142 +Loop 91 listening on socket FD 192 +Loop 2 listening on socket FD 171 +Loop 27 listening on socket FD 196 +Loop 68 listening on socket FD 144 +Loop 4 listening on socket FD 180 +Loop 89 listening on socket FD 182 +Loop 93 listening on socket FD 167 +Loop 6 listening on socket FD 173 +Loop 67 listening on socket FD 188 +Cardigan HttpArena mode h1 is listening on 8080 diff --git a/site/static/logs/limited-conn/4096/cardigan.log b/site/static/logs/limited-conn/4096/cardigan.log new file mode 100644 index 000000000..5c34314ca --- /dev/null +++ b/site/static/logs/limited-conn/4096/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 81 listening on socket FD 189 +Loop 17 listening on socket FD 191 +Loop 23 listening on socket FD 173 +Loop 28 listening on socket FD 139 +Loop 0 listening on socket FD 193 +Loop 6 listening on socket FD 181 +Loop 70 listening on socket FD 161 +Loop 9 listening on socket FD 149 +Loop 93 listening on socket FD 138 +Loop 64 listening on socket FD 176 +Loop 21 listening on socket FD 136 +Loop 67 listening on socket FD 158 +Loop 10 listening on socket FD 135 +Loop 72 listening on socket FD 148 +Loop 66 listening on socket FD 168 +Loop 85 listening on socket FD 185 +Loop 1 listening on socket FD 152 +Loop 24 listening on socket FD 186 +Loop 29 listening on socket FD 172 +Loop 13 listening on socket FD 164 +Loop 14 listening on socket FD 153 +Loop 16 listening on socket FD 143 +Loop 88 listening on socket FD 144 +Loop 19 listening on socket FD 174 +Loop 31 listening on socket FD 142 +Loop 8 listening on socket FD 166 +Loop 12 listening on socket FD 162 +Loop 3 listening on socket FD 140 +Loop 73 listening on socket FD 163 +Loop 91 listening on socket FD 195 +Loop 5 listening on socket FD 194 +Loop 69 listening on socket FD 182 +Loop 26 listening on socket FD 180 +Loop 90 listening on socket FD 155 +Loop 74 listening on socket FD 165 +Loop 15 listening on socket FD 187 +Loop 77 listening on socket FD 196 +Loop 78 listening on socket FD 134 +Loop 2 listening on socket FD 177 +Loop 76 listening on socket FD 151 +Loop 84 listening on socket FD 167 +Loop 75 listening on socket FD 171 +Loop 11 listening on socket FD 137 +Loop 7 listening on socket FD 150 +Loop 68 listening on socket FD 154 +Loop 89 listening on socket FD 145 +Loop 92 listening on socket FD 184 +Loop 30 listening on socket FD 197 +Loop 20 listening on socket FD 157 +Loop 82 listening on socket FD 159 +Loop 27 listening on socket FD 179 +Loop 83 listening on socket FD 141 +Loop 25 listening on socket FD 190 +Loop 79 listening on socket FD 156 +Loop 22 listening on socket FD 147 +Loop 65 listening on socket FD 146 +Loop 4 listening on socket FD 178 +Loop 18 listening on socket FD 170 +Loop 80 listening on socket FD 188 +Loop 71 listening on socket FD 192 +Loop 87 listening on socket FD 175 +Loop 94 listening on socket FD 183 +Loop 95 listening on socket FD 169 +Loop 86 listening on socket FD 160 +Cardigan HttpArena mode h1 is listening on 8080 diff --git a/site/static/logs/limited-conn/512/cardigan.log b/site/static/logs/limited-conn/512/cardigan.log new file mode 100644 index 000000000..25cc66ce6 --- /dev/null +++ b/site/static/logs/limited-conn/512/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 80 listening on socket FD 176 +Loop 83 listening on socket FD 152 +Loop 75 listening on socket FD 137 +Loop 82 listening on socket FD 174 +Loop 19 listening on socket FD 161 +Loop 12 listening on socket FD 193 +Loop 94 listening on socket FD 147 +Loop 29 listening on socket FD 153 +Loop 28 listening on socket FD 189 +Loop 93 listening on socket FD 166 +Loop 92 listening on socket FD 180 +Loop 14 listening on socket FD 175 +Loop 16 listening on socket FD 177 +Loop 67 listening on socket FD 156 +Loop 78 listening on socket FD 173 +Loop 15 listening on socket FD 159 +Loop 79 listening on socket FD 168 +Loop 90 listening on socket FD 167 +Loop 86 listening on socket FD 149 +Loop 22 listening on socket FD 139 +Loop 89 listening on socket FD 195 +Loop 25 listening on socket FD 157 +Loop 73 listening on socket FD 169 +Loop 2 listening on socket FD 178 +Loop 11 listening on socket FD 145 +Loop 68 listening on socket FD 142 +Loop 6 listening on socket FD 185 +Loop 66 listening on socket FD 182 +Loop 7 listening on socket FD 171 +Loop 24 listening on socket FD 155 +Loop 8 listening on socket FD 192 +Loop 13 listening on socket FD 188 +Loop 21 listening on socket FD 151 +Loop 84 listening on socket FD 179 +Loop 23 listening on socket FD 162 +Loop 72 listening on socket FD 134 +Loop 88 listening on socket FD 141 +Loop 31 listening on socket FD 150 +Loop 71 listening on socket FD 197 +Loop 10 listening on socket FD 154 +Loop 18 listening on socket FD 144 +Loop 85 listening on socket FD 196 +Loop 0 listening on socket FD 140 +Loop 95 listening on socket FD 172 +Loop 81 listening on socket FD 183 +Loop 70 listening on socket FD 194 +Loop 77 listening on socket FD 186 +Loop 9 listening on socket FD 136 +Loop 30 listening on socket FD 181 +Loop 74 listening on socket FD 135 +Loop 20 listening on socket FD 164 +Loop 69 listening on socket FD 160 +Loop 27 listening on socket FD 148 +Loop 5 listening on socket FD 170 +Loop 1 listening on socket FD 184 +Loop 76 listening on socket FD 187 +Loop 3 listening on socket FD 158 +Loop 87 listening on socket FD 138 +Loop 64 listening on socket FD 146 +Loop 65 listening on socket FD 165 +Loop 26 listening on socket FD 143 +Loop 4 listening on socket FD 163 +Loop 17 listening on socket FD 191 +Loop 91 listening on socket FD 190 +Cardigan HttpArena mode h1 is listening on 8080 diff --git a/site/static/logs/pipelined/4096/cardigan.log b/site/static/logs/pipelined/4096/cardigan.log new file mode 100644 index 000000000..91e11a01a --- /dev/null +++ b/site/static/logs/pipelined/4096/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 24 listening on socket FD 134 +Loop 28 listening on socket FD 190 +Loop 95 listening on socket FD 154 +Loop 30 listening on socket FD 184 +Loop 27 listening on socket FD 155 +Loop 73 listening on socket FD 192 +Loop 10 listening on socket FD 179 +Loop 66 listening on socket FD 196 +Loop 70 listening on socket FD 140 +Loop 84 listening on socket FD 191 +Loop 21 listening on socket FD 178 +Loop 23 listening on socket FD 183 +Loop 20 listening on socket FD 142 +Loop 85 listening on socket FD 151 +Loop 86 listening on socket FD 166 +Loop 3 listening on socket FD 158 +Loop 69 listening on socket FD 193 +Loop 68 listening on socket FD 150 +Loop 65 listening on socket FD 182 +Loop 25 listening on socket FD 144 +Loop 91 listening on socket FD 176 +Loop 78 listening on socket FD 162 +Loop 15 listening on socket FD 165 +Loop 79 listening on socket FD 185 +Loop 14 listening on socket FD 180 +Loop 13 listening on socket FD 170 +Loop 76 listening on socket FD 181 +Loop 7 listening on socket FD 141 +Loop 81 listening on socket FD 168 +Loop 19 listening on socket FD 139 +Loop 16 listening on socket FD 175 +Loop 89 listening on socket FD 143 +Loop 12 listening on socket FD 159 +Loop 83 listening on socket FD 136 +Loop 90 listening on socket FD 146 +Loop 87 listening on socket FD 189 +Loop 74 listening on socket FD 152 +Loop 93 listening on socket FD 160 +Loop 80 listening on socket FD 138 +Loop 2 listening on socket FD 157 +Loop 92 listening on socket FD 167 +Loop 77 listening on socket FD 145 +Loop 82 listening on socket FD 186 +Loop 29 listening on socket FD 149 +Loop 9 listening on socket FD 194 +Loop 18 listening on socket FD 174 +Loop 31 listening on socket FD 187 +Loop 67 listening on socket FD 164 +Loop 0 listening on socket FD 156 +Loop 64 listening on socket FD 169 +Loop 88 listening on socket FD 148 +Loop 1 listening on socket FD 161 +Loop 94 listening on socket FD 153 +Loop 75 listening on socket FD 172 +Loop 72 listening on socket FD 173 +Loop 71 listening on socket FD 177 +Loop 6 listening on socket FD 163 +Loop 26 listening on socket FD 135 +Loop 22 listening on socket FD 188 +Loop 17 listening on socket FD 197 +Loop 8 listening on socket FD 195 +Loop 5 listening on socket FD 171 +Loop 4 listening on socket FD 137 +Loop 11 listening on socket FD 147 +Cardigan HttpArena mode h1 is listening on 8080 diff --git a/site/static/logs/pipelined/512/cardigan.log b/site/static/logs/pipelined/512/cardigan.log new file mode 100644 index 000000000..de2e0637a --- /dev/null +++ b/site/static/logs/pipelined/512/cardigan.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 22 listening on socket FD 142 +Loop 4 listening on socket FD 184 +Loop 71 listening on socket FD 185 +Loop 31 listening on socket FD 136 +Loop 11 listening on socket FD 169 +Loop 87 listening on socket FD 174 +Loop 81 listening on socket FD 143 +Loop 17 listening on socket FD 162 +Loop 18 listening on socket FD 135 +Loop 65 listening on socket FD 177 +Loop 84 listening on socket FD 193 +Loop 5 listening on socket FD 154 +Loop 92 listening on socket FD 166 +Loop 90 listening on socket FD 153 +Loop 88 listening on socket FD 155 +Loop 89 listening on socket FD 148 +Loop 21 listening on socket FD 146 +Loop 25 listening on socket FD 150 +Loop 95 listening on socket FD 140 +Loop 29 listening on socket FD 141 +Loop 24 listening on socket FD 157 +Loop 94 listening on socket FD 161 +Loop 68 listening on socket FD 187 +Loop 82 listening on socket FD 156 +Loop 15 listening on socket FD 178 +Loop 93 listening on socket FD 137 +Loop 26 listening on socket FD 165 +Loop 0 listening on socket FD 186 +Loop 14 listening on socket FD 160 +Loop 77 listening on socket FD 158 +Loop 91 listening on socket FD 183 +Loop 80 listening on socket FD 191 +Loop 16 listening on socket FD 163 +Loop 8 listening on socket FD 151 +Loop 72 listening on socket FD 152 +Loop 9 listening on socket FD 168 +Loop 10 listening on socket FD 197 +Loop 74 listening on socket FD 170 +Loop 6 listening on socket FD 164 +Loop 75 listening on socket FD 175 +Loop 70 listening on socket FD 179 +Loop 7 listening on socket FD 176 +Loop 13 listening on socket FD 189 +Loop 64 listening on socket FD 145 +Loop 3 listening on socket FD 172 +Loop 76 listening on socket FD 138 +Loop 2 listening on socket FD 181 +Loop 28 listening on socket FD 167 +Loop 73 listening on socket FD 194 +Loop 12 listening on socket FD 182 +Loop 1 listening on socket FD 171 +Loop 20 listening on socket FD 192 +Loop 30 listening on socket FD 139 +Loop 23 listening on socket FD 173 +Loop 27 listening on socket FD 180 +Loop 66 listening on socket FD 196 +Loop 67 listening on socket FD 190 +Loop 78 listening on socket FD 149 +Loop 86 listening on socket FD 144 +Loop 69 listening on socket FD 188 +Loop 79 listening on socket FD 134 +Loop 83 listening on socket FD 195 +Loop 19 listening on socket FD 159 +Loop 85 listening on socket FD 147 +Cardigan HttpArena mode h1 is listening on 8080 From 0e63db94d3f732879375ed52dae11f7bf583447e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:28:09 +0000 Subject: [PATCH 3/7] Benchmark results: cardigan-h2 [skip ci] --- site/data/results/cardigan.json | 76 +++++++++ .../logs/baseline-h2/1024/cardigan-h2.log | 156 ++++++++++++++++++ .../logs/baseline-h2/256/cardigan-h2.log | 156 ++++++++++++++++++ .../logs/static-h2/1024/cardigan-h2.log | 156 ++++++++++++++++++ .../static/logs/static-h2/256/cardigan-h2.log | 156 ++++++++++++++++++ 5 files changed, 700 insertions(+) create mode 100644 site/static/logs/baseline-h2/1024/cardigan-h2.log create mode 100644 site/static/logs/baseline-h2/256/cardigan-h2.log create mode 100644 site/static/logs/static-h2/1024/cardigan-h2.log create mode 100644 site/static/logs/static-h2/256/cardigan-h2.log diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json index 053cbc51d..141707d00 100644 --- a/site/data/results/cardigan.json +++ b/site/data/results/cardigan.json @@ -41,6 +41,44 @@ "status_4xx": 0, "status_5xx": 0 }, + "baseline-h2-1024": { + "framework": "Cardigan", + "language": "Java", + "rps": 13897916, + "avg_latency": "3.53ms", + "p99_latency": "110.26ms", + "cpu": "1767.2%", + "memory": "5.6GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "495.31MB/s", + "reconnects": 0, + "status_2xx": 70184476, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2-256": { + "framework": "Cardigan", + "language": "Java", + "rps": 14527331, + "avg_latency": "1.12ms", + "p99_latency": "21.48ms", + "cpu": "2017.8%", + "memory": "5.6GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "514.66MB/s", + "reconnects": 0, + "status_2xx": 72927204, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, "limited-conn-4096": { "framework": "Cardigan", "language": "Java", @@ -118,6 +156,44 @@ "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 + }, + "static-h2-1024": { + "framework": "Cardigan", + "language": "Java", + "rps": 710171, + "avg_latency": "42.42ms", + "p99_latency": "1.19s", + "cpu": "2909.9%", + "memory": "7.0GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "10.92GB/s", + "reconnects": 0, + "status_2xx": 3586365, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "static-h2-256": { + "framework": "Cardigan", + "language": "Java", + "rps": 735295, + "avg_latency": "10.92ms", + "p99_latency": "192.15ms", + "cpu": "2915.3%", + "memory": "6.0GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "11.26GB/s", + "reconnects": 0, + "status_2xx": 3698536, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 } } } diff --git a/site/static/logs/baseline-h2/1024/cardigan-h2.log b/site/static/logs/baseline-h2/1024/cardigan-h2.log new file mode 100644 index 000000000..502c1b55b --- /dev/null +++ b/site/static/logs/baseline-h2/1024/cardigan-h2.log @@ -0,0 +1,156 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [GET] /static/reset.css -> HttpArenaStaticController.resetCss +Registered Route: [GET] /static/layout.css -> HttpArenaStaticController.layoutCss +Registered Route: [GET] /static/theme.css -> HttpArenaStaticController.themeCss +Registered Route: [GET] /static/components.css -> HttpArenaStaticController.componentsCss +Registered Route: [GET] /static/utilities.css -> HttpArenaStaticController.utilitiesCss +Registered Route: [GET] /static/analytics.js -> HttpArenaStaticController.analyticsJs +Registered Route: [GET] /static/helpers.js -> HttpArenaStaticController.helpersJs +Registered Route: [GET] /static/app.js -> HttpArenaStaticController.appJs +Registered Route: [GET] /static/vendor.js -> HttpArenaStaticController.vendorJs +Registered Route: [GET] /static/router.js -> HttpArenaStaticController.routerJs +Registered Route: [GET] /static/header.html -> HttpArenaStaticController.headerHtml +Registered Route: [GET] /static/footer.html -> HttpArenaStaticController.footerHtml +Registered Route: [GET] /static/regular.woff2 -> HttpArenaStaticController.regularWoff2 +Registered Route: [GET] /static/bold.woff2 -> HttpArenaStaticController.boldWoff2 +Registered Route: [GET] /static/logo.svg -> HttpArenaStaticController.logoSvg +Registered Route: [GET] /static/icon-sprite.svg -> HttpArenaStaticController.iconSpriteSvg +Registered Route: [GET] /static/hero.webp -> HttpArenaStaticController.heroWebp +Registered Route: [GET] /static/thumb1.webp -> HttpArenaStaticController.thumb1Webp +Registered Route: [GET] /static/thumb2.webp -> HttpArenaStaticController.thumb2Webp +Registered Route: [GET] /static/manifest.json -> HttpArenaStaticController.manifestJson +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 12 listening on socket FD 178 +Loop 3 listening on socket FD 192 +Loop 66 listening on socket FD 143 +Loop 15 listening on socket FD 154 +Loop 75 listening on socket FD 153 +Loop 84 listening on socket FD 149 +Loop 64 listening on socket FD 144 +Loop 30 listening on socket FD 160 +Loop 93 listening on socket FD 186 +Loop 1 listening on socket FD 155 +Loop 18 listening on socket FD 182 +Loop 81 listening on socket FD 187 +Loop 71 listening on socket FD 169 +Loop 16 listening on socket FD 177 +Loop 65 listening on socket FD 152 +Loop 80 listening on socket FD 138 +Loop 10 listening on socket FD 137 +Loop 8 listening on socket FD 183 +Loop 72 listening on socket FD 161 +Loop 21 listening on socket FD 170 +Loop 23 listening on socket FD 134 +Loop 7 listening on socket FD 184 +Loop 89 listening on socket FD 180 +Loop 6 listening on socket FD 197 +Loop 69 listening on socket FD 159 +Loop 22 listening on socket FD 172 +Loop 90 listening on socket FD 163 +Loop 2 listening on socket FD 140 +Loop 28 listening on socket FD 158 +Loop 76 listening on socket FD 141 +Loop 4 listening on socket FD 185 +Loop 29 listening on socket FD 175 +Loop 19 listening on socket FD 148 +Loop 74 listening on socket FD 135 +Loop 25 listening on socket FD 165 +Loop 27 listening on socket FD 167 +Loop 94 listening on socket FD 190 +Loop 70 listening on socket FD 191 +Loop 13 listening on socket FD 189 +Loop 0 listening on socket FD 147 +Loop 17 listening on socket FD 142 +Loop 86 listening on socket FD 139 +Loop 92 listening on socket FD 181 +Loop 91 listening on socket FD 196 +Loop 5 listening on socket FD 193 +Loop 79 listening on socket FD 176 +Loop 78 listening on socket FD 151 +Loop 26 listening on socket FD 179 +Loop 67 listening on socket FD 171 +Loop 95 listening on socket FD 157 +Loop 31 listening on socket FD 136 +Loop 87 listening on socket FD 195 +Loop 82 listening on socket FD 150 +Loop 24 listening on socket FD 162 +Loop 73 listening on socket FD 194 +Loop 88 listening on socket FD 188 +Loop 77 listening on socket FD 156 +Loop 14 listening on socket FD 168 +Loop 83 listening on socket FD 164 +Loop 85 listening on socket FD 145 +Loop 20 listening on socket FD 166 +Loop 11 listening on socket FD 173 +Loop 68 listening on socket FD 146 +Loop 9 listening on socket FD 174 +Cardigan HttpArena mode h2 is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false diff --git a/site/static/logs/baseline-h2/256/cardigan-h2.log b/site/static/logs/baseline-h2/256/cardigan-h2.log new file mode 100644 index 000000000..e0f7fddc2 --- /dev/null +++ b/site/static/logs/baseline-h2/256/cardigan-h2.log @@ -0,0 +1,156 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [GET] /static/reset.css -> HttpArenaStaticController.resetCss +Registered Route: [GET] /static/layout.css -> HttpArenaStaticController.layoutCss +Registered Route: [GET] /static/theme.css -> HttpArenaStaticController.themeCss +Registered Route: [GET] /static/components.css -> HttpArenaStaticController.componentsCss +Registered Route: [GET] /static/utilities.css -> HttpArenaStaticController.utilitiesCss +Registered Route: [GET] /static/analytics.js -> HttpArenaStaticController.analyticsJs +Registered Route: [GET] /static/helpers.js -> HttpArenaStaticController.helpersJs +Registered Route: [GET] /static/app.js -> HttpArenaStaticController.appJs +Registered Route: [GET] /static/vendor.js -> HttpArenaStaticController.vendorJs +Registered Route: [GET] /static/router.js -> HttpArenaStaticController.routerJs +Registered Route: [GET] /static/header.html -> HttpArenaStaticController.headerHtml +Registered Route: [GET] /static/footer.html -> HttpArenaStaticController.footerHtml +Registered Route: [GET] /static/regular.woff2 -> HttpArenaStaticController.regularWoff2 +Registered Route: [GET] /static/bold.woff2 -> HttpArenaStaticController.boldWoff2 +Registered Route: [GET] /static/logo.svg -> HttpArenaStaticController.logoSvg +Registered Route: [GET] /static/icon-sprite.svg -> HttpArenaStaticController.iconSpriteSvg +Registered Route: [GET] /static/hero.webp -> HttpArenaStaticController.heroWebp +Registered Route: [GET] /static/thumb1.webp -> HttpArenaStaticController.thumb1Webp +Registered Route: [GET] /static/thumb2.webp -> HttpArenaStaticController.thumb2Webp +Registered Route: [GET] /static/manifest.json -> HttpArenaStaticController.manifestJson +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 11 listening on socket FD 151 +Loop 67 listening on socket FD 175 +Loop 79 listening on socket FD 145 +Loop 76 listening on socket FD 195 +Loop 24 listening on socket FD 192 +Loop 13 listening on socket FD 154 +Loop 16 listening on socket FD 190 +Loop 8 listening on socket FD 183 +Loop 22 listening on socket FD 180 +Loop 90 listening on socket FD 161 +Loop 72 listening on socket FD 159 +Loop 6 listening on socket FD 185 +Loop 85 listening on socket FD 163 +Loop 23 listening on socket FD 157 +Loop 80 listening on socket FD 189 +Loop 15 listening on socket FD 169 +Loop 26 listening on socket FD 150 +Loop 70 listening on socket FD 188 +Loop 20 listening on socket FD 194 +Loop 14 listening on socket FD 182 +Loop 91 listening on socket FD 197 +Loop 18 listening on socket FD 142 +Loop 30 listening on socket FD 173 +Loop 66 listening on socket FD 141 +Loop 12 listening on socket FD 170 +Loop 88 listening on socket FD 165 +Loop 19 listening on socket FD 187 +Loop 7 listening on socket FD 168 +Loop 0 listening on socket FD 176 +Loop 5 listening on socket FD 184 +Loop 10 listening on socket FD 135 +Loop 74 listening on socket FD 186 +Loop 29 listening on socket FD 174 +Loop 65 listening on socket FD 139 +Loop 93 listening on socket FD 152 +Loop 78 listening on socket FD 166 +Loop 89 listening on socket FD 160 +Loop 4 listening on socket FD 177 +Loop 77 listening on socket FD 147 +Loop 31 listening on socket FD 193 +Loop 87 listening on socket FD 156 +Loop 84 listening on socket FD 155 +Loop 64 listening on socket FD 140 +Loop 25 listening on socket FD 146 +Loop 28 listening on socket FD 181 +Loop 3 listening on socket FD 196 +Loop 82 listening on socket FD 164 +Loop 17 listening on socket FD 153 +Loop 94 listening on socket FD 138 +Loop 81 listening on socket FD 136 +Loop 2 listening on socket FD 162 +Loop 73 listening on socket FD 179 +Loop 9 listening on socket FD 137 +Loop 83 listening on socket FD 143 +Loop 75 listening on socket FD 172 +Loop 86 listening on socket FD 191 +Loop 21 listening on socket FD 158 +Loop 71 listening on socket FD 178 +Loop 68 listening on socket FD 134 +Loop 92 listening on socket FD 149 +Loop 69 listening on socket FD 171 +Loop 27 listening on socket FD 167 +Loop 95 listening on socket FD 148 +Loop 1 listening on socket FD 144 +Cardigan HttpArena mode h2 is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false diff --git a/site/static/logs/static-h2/1024/cardigan-h2.log b/site/static/logs/static-h2/1024/cardigan-h2.log new file mode 100644 index 000000000..da31c240d --- /dev/null +++ b/site/static/logs/static-h2/1024/cardigan-h2.log @@ -0,0 +1,156 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [GET] /static/reset.css -> HttpArenaStaticController.resetCss +Registered Route: [GET] /static/layout.css -> HttpArenaStaticController.layoutCss +Registered Route: [GET] /static/theme.css -> HttpArenaStaticController.themeCss +Registered Route: [GET] /static/components.css -> HttpArenaStaticController.componentsCss +Registered Route: [GET] /static/utilities.css -> HttpArenaStaticController.utilitiesCss +Registered Route: [GET] /static/analytics.js -> HttpArenaStaticController.analyticsJs +Registered Route: [GET] /static/helpers.js -> HttpArenaStaticController.helpersJs +Registered Route: [GET] /static/app.js -> HttpArenaStaticController.appJs +Registered Route: [GET] /static/vendor.js -> HttpArenaStaticController.vendorJs +Registered Route: [GET] /static/router.js -> HttpArenaStaticController.routerJs +Registered Route: [GET] /static/header.html -> HttpArenaStaticController.headerHtml +Registered Route: [GET] /static/footer.html -> HttpArenaStaticController.footerHtml +Registered Route: [GET] /static/regular.woff2 -> HttpArenaStaticController.regularWoff2 +Registered Route: [GET] /static/bold.woff2 -> HttpArenaStaticController.boldWoff2 +Registered Route: [GET] /static/logo.svg -> HttpArenaStaticController.logoSvg +Registered Route: [GET] /static/icon-sprite.svg -> HttpArenaStaticController.iconSpriteSvg +Registered Route: [GET] /static/hero.webp -> HttpArenaStaticController.heroWebp +Registered Route: [GET] /static/thumb1.webp -> HttpArenaStaticController.thumb1Webp +Registered Route: [GET] /static/thumb2.webp -> HttpArenaStaticController.thumb2Webp +Registered Route: [GET] /static/manifest.json -> HttpArenaStaticController.manifestJson +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 64 listening on socket FD 144 +Loop 67 listening on socket FD 197 +Loop 69 listening on socket FD 136 +Loop 84 listening on socket FD 163 +Loop 21 listening on socket FD 148 +Loop 81 listening on socket FD 159 +Loop 73 listening on socket FD 149 +Loop 88 listening on socket FD 178 +Loop 93 listening on socket FD 135 +Loop 6 listening on socket FD 182 +Loop 72 listening on socket FD 154 +Loop 25 listening on socket FD 167 +Loop 29 listening on socket FD 140 +Loop 31 listening on socket FD 145 +Loop 70 listening on socket FD 153 +Loop 7 listening on socket FD 134 +Loop 5 listening on socket FD 169 +Loop 68 listening on socket FD 156 +Loop 4 listening on socket FD 143 +Loop 87 listening on socket FD 152 +Loop 14 listening on socket FD 164 +Loop 80 listening on socket FD 142 +Loop 3 listening on socket FD 150 +Loop 82 listening on socket FD 166 +Loop 95 listening on socket FD 186 +Loop 20 listening on socket FD 157 +Loop 22 listening on socket FD 190 +Loop 86 listening on socket FD 165 +Loop 0 listening on socket FD 179 +Loop 76 listening on socket FD 173 +Loop 13 listening on socket FD 174 +Loop 71 listening on socket FD 147 +Loop 91 listening on socket FD 168 +Loop 24 listening on socket FD 160 +Loop 27 listening on socket FD 177 +Loop 77 listening on socket FD 184 +Loop 89 listening on socket FD 180 +Loop 75 listening on socket FD 172 +Loop 83 listening on socket FD 185 +Loop 17 listening on socket FD 146 +Loop 12 listening on socket FD 158 +Loop 8 listening on socket FD 195 +Loop 65 listening on socket FD 175 +Loop 66 listening on socket FD 192 +Loop 1 listening on socket FD 141 +Loop 26 listening on socket FD 170 +Loop 15 listening on socket FD 196 +Loop 79 listening on socket FD 194 +Loop 90 listening on socket FD 139 +Loop 28 listening on socket FD 191 +Loop 92 listening on socket FD 155 +Loop 78 listening on socket FD 181 +Loop 19 listening on socket FD 187 +Loop 23 listening on socket FD 176 +Loop 9 listening on socket FD 162 +Loop 85 listening on socket FD 151 +Loop 74 listening on socket FD 171 +Loop 30 listening on socket FD 183 +Loop 18 listening on socket FD 137 +Loop 16 listening on socket FD 161 +Loop 94 listening on socket FD 138 +Loop 10 listening on socket FD 189 +Loop 2 listening on socket FD 188 +Loop 11 listening on socket FD 193 +Cardigan HttpArena mode h2 is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false diff --git a/site/static/logs/static-h2/256/cardigan-h2.log b/site/static/logs/static-h2/256/cardigan-h2.log new file mode 100644 index 000000000..abc4570d0 --- /dev/null +++ b/site/static/logs/static-h2/256/cardigan-h2.log @@ -0,0 +1,156 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [GET] /static/reset.css -> HttpArenaStaticController.resetCss +Registered Route: [GET] /static/layout.css -> HttpArenaStaticController.layoutCss +Registered Route: [GET] /static/theme.css -> HttpArenaStaticController.themeCss +Registered Route: [GET] /static/components.css -> HttpArenaStaticController.componentsCss +Registered Route: [GET] /static/utilities.css -> HttpArenaStaticController.utilitiesCss +Registered Route: [GET] /static/analytics.js -> HttpArenaStaticController.analyticsJs +Registered Route: [GET] /static/helpers.js -> HttpArenaStaticController.helpersJs +Registered Route: [GET] /static/app.js -> HttpArenaStaticController.appJs +Registered Route: [GET] /static/vendor.js -> HttpArenaStaticController.vendorJs +Registered Route: [GET] /static/router.js -> HttpArenaStaticController.routerJs +Registered Route: [GET] /static/header.html -> HttpArenaStaticController.headerHtml +Registered Route: [GET] /static/footer.html -> HttpArenaStaticController.footerHtml +Registered Route: [GET] /static/regular.woff2 -> HttpArenaStaticController.regularWoff2 +Registered Route: [GET] /static/bold.woff2 -> HttpArenaStaticController.boldWoff2 +Registered Route: [GET] /static/logo.svg -> HttpArenaStaticController.logoSvg +Registered Route: [GET] /static/icon-sprite.svg -> HttpArenaStaticController.iconSpriteSvg +Registered Route: [GET] /static/hero.webp -> HttpArenaStaticController.heroWebp +Registered Route: [GET] /static/thumb1.webp -> HttpArenaStaticController.thumb1Webp +Registered Route: [GET] /static/thumb2.webp -> HttpArenaStaticController.thumb2Webp +Registered Route: [GET] /static/manifest.json -> HttpArenaStaticController.manifestJson +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 28 listening on socket FD 177 +Loop 93 listening on socket FD 145 +Loop 30 listening on socket FD 166 +Loop 74 listening on socket FD 188 +Loop 91 listening on socket FD 150 +Loop 4 listening on socket FD 180 +Loop 79 listening on socket FD 169 +Loop 2 listening on socket FD 144 +Loop 31 listening on socket FD 195 +Loop 0 listening on socket FD 167 +Loop 22 listening on socket FD 164 +Loop 70 listening on socket FD 193 +Loop 94 listening on socket FD 153 +Loop 73 listening on socket FD 192 +Loop 5 listening on socket FD 155 +Loop 17 listening on socket FD 137 +Loop 16 listening on socket FD 184 +Loop 83 listening on socket FD 187 +Loop 81 listening on socket FD 194 +Loop 6 listening on socket FD 174 +Loop 75 listening on socket FD 175 +Loop 25 listening on socket FD 156 +Loop 11 listening on socket FD 134 +Loop 90 listening on socket FD 135 +Loop 20 listening on socket FD 160 +Loop 72 listening on socket FD 143 +Loop 14 listening on socket FD 163 +Loop 80 listening on socket FD 181 +Loop 76 listening on socket FD 173 +Loop 12 listening on socket FD 165 +Loop 10 listening on socket FD 141 +Loop 88 listening on socket FD 152 +Loop 23 listening on socket FD 159 +Loop 21 listening on socket FD 154 +Loop 67 listening on socket FD 196 +Loop 64 listening on socket FD 149 +Loop 85 listening on socket FD 142 +Loop 89 listening on socket FD 136 +Loop 24 listening on socket FD 158 +Loop 87 listening on socket FD 148 +Loop 69 listening on socket FD 191 +Loop 95 listening on socket FD 190 +Loop 78 listening on socket FD 179 +Loop 13 listening on socket FD 161 +Loop 65 listening on socket FD 147 +Loop 86 listening on socket FD 162 +Loop 7 listening on socket FD 182 +Loop 8 listening on socket FD 157 +Loop 71 listening on socket FD 170 +Loop 77 listening on socket FD 189 +Loop 82 listening on socket FD 197 +Loop 84 listening on socket FD 139 +Loop 18 listening on socket FD 138 +Loop 68 listening on socket FD 171 +Loop 29 listening on socket FD 185 +Loop 92 listening on socket FD 146 +Loop 9 listening on socket FD 140 +Loop 19 listening on socket FD 186 +Loop 66 listening on socket FD 168 +Loop 15 listening on socket FD 176 +Loop 26 listening on socket FD 151 +Loop 27 listening on socket FD 178 +Loop 3 listening on socket FD 172 +Loop 1 listening on socket FD 183 +Cardigan HttpArena mode h2 is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false From 54996a31e0dd5a1d4d99526d8db96ae491fdb255 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:30:23 +0000 Subject: [PATCH 4/7] Benchmark results: cardigan-h2c [skip ci] --- site/data/results/cardigan.json | 57 ++++++++ .../logs/baseline-h2c/1024/cardigan-h2c.log | 135 ++++++++++++++++++ .../logs/baseline-h2c/256/cardigan-h2c.log | 135 ++++++++++++++++++ .../logs/baseline-h2c/4096/cardigan-h2c.log | 135 ++++++++++++++++++ 4 files changed, 462 insertions(+) create mode 100644 site/static/logs/baseline-h2c/1024/cardigan-h2c.log create mode 100644 site/static/logs/baseline-h2c/256/cardigan-h2c.log create mode 100644 site/static/logs/baseline-h2c/4096/cardigan-h2c.log diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json index 141707d00..7cdecc085 100644 --- a/site/data/results/cardigan.json +++ b/site/data/results/cardigan.json @@ -79,6 +79,63 @@ "status_4xx": 0, "status_5xx": 0 }, + "baseline-h2c-1024": { + "framework": "Cardigan", + "language": "Java", + "rps": 14518361, + "avg_latency": "4.20ms", + "p99_latency": "48.47ms", + "cpu": "1516.9%", + "memory": "5.4GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "518.45MB/s", + "reconnects": 0, + "status_2xx": 73462908, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2c-256": { + "framework": "Cardigan", + "language": "Java", + "rps": 14534155, + "avg_latency": "1.18ms", + "p99_latency": "13.79ms", + "cpu": "1487.5%", + "memory": "5.3GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "515.93MB/s", + "reconnects": 0, + "status_2xx": 73106800, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "baseline-h2c-4096": { + "framework": "Cardigan", + "language": "Java", + "rps": 13673578, + "avg_latency": "18.27ms", + "p99_latency": "260.95ms", + "cpu": "1308.0%", + "memory": "6.3GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "491.19MB/s", + "reconnects": 0, + "status_2xx": 69598515, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, "limited-conn-4096": { "framework": "Cardigan", "language": "Java", diff --git a/site/static/logs/baseline-h2c/1024/cardigan-h2c.log b/site/static/logs/baseline-h2c/1024/cardigan-h2c.log new file mode 100644 index 000000000..37406bf57 --- /dev/null +++ b/site/static/logs/baseline-h2c/1024/cardigan-h2c.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8082 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 95 listening on socket FD 135 +Loop 9 listening on socket FD 148 +Loop 29 listening on socket FD 176 +Loop 81 listening on socket FD 179 +Loop 15 listening on socket FD 168 +Loop 92 listening on socket FD 188 +Loop 75 listening on socket FD 152 +Loop 30 listening on socket FD 184 +Loop 94 listening on socket FD 146 +Loop 78 listening on socket FD 156 +Loop 21 listening on socket FD 138 +Loop 73 listening on socket FD 163 +Loop 10 listening on socket FD 145 +Loop 26 listening on socket FD 143 +Loop 87 listening on socket FD 169 +Loop 66 listening on socket FD 192 +Loop 14 listening on socket FD 175 +Loop 28 listening on socket FD 165 +Loop 3 listening on socket FD 185 +Loop 27 listening on socket FD 136 +Loop 71 listening on socket FD 141 +Loop 77 listening on socket FD 166 +Loop 5 listening on socket FD 139 +Loop 19 listening on socket FD 180 +Loop 25 listening on socket FD 167 +Loop 0 listening on socket FD 191 +Loop 4 listening on socket FD 161 +Loop 89 listening on socket FD 137 +Loop 31 listening on socket FD 173 +Loop 8 listening on socket FD 150 +Loop 2 listening on socket FD 182 +Loop 13 listening on socket FD 174 +Loop 69 listening on socket FD 162 +Loop 18 listening on socket FD 177 +Loop 22 listening on socket FD 187 +Loop 82 listening on socket FD 196 +Loop 12 listening on socket FD 160 +Loop 83 listening on socket FD 158 +Loop 90 listening on socket FD 178 +Loop 86 listening on socket FD 153 +Loop 6 listening on socket FD 155 +Loop 74 listening on socket FD 157 +Loop 23 listening on socket FD 142 +Loop 17 listening on socket FD 189 +Loop 80 listening on socket FD 181 +Loop 70 listening on socket FD 186 +Loop 24 listening on socket FD 144 +Loop 79 listening on socket FD 190 +Loop 20 listening on socket FD 183 +Loop 16 listening on socket FD 197 +Loop 85 listening on socket FD 171 +Loop 91 listening on socket FD 151 +Loop 72 listening on socket FD 149 +Loop 88 listening on socket FD 159 +Loop 65 listening on socket FD 147 +Loop 64 listening on socket FD 195 +Loop 1 listening on socket FD 164 +Loop 67 listening on socket FD 170 +Loop 93 listening on socket FD 194 +Loop 84 listening on socket FD 193 +Loop 11 listening on socket FD 134 +Loop 68 listening on socket FD 154 +Loop 7 listening on socket FD 140 +Loop 76 listening on socket FD 172 +Cardigan HttpArena mode h2c is listening on 8082 diff --git a/site/static/logs/baseline-h2c/256/cardigan-h2c.log b/site/static/logs/baseline-h2c/256/cardigan-h2c.log new file mode 100644 index 000000000..e6d6c0e4a --- /dev/null +++ b/site/static/logs/baseline-h2c/256/cardigan-h2c.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8082 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 93 listening on socket FD 144 +Loop 31 listening on socket FD 147 +Loop 28 listening on socket FD 194 +Loop 72 listening on socket FD 179 +Loop 64 listening on socket FD 178 +Loop 6 listening on socket FD 173 +Loop 16 listening on socket FD 189 +Loop 94 listening on socket FD 177 +Loop 81 listening on socket FD 159 +Loop 1 listening on socket FD 170 +Loop 20 listening on socket FD 139 +Loop 83 listening on socket FD 145 +Loop 69 listening on socket FD 188 +Loop 68 listening on socket FD 181 +Loop 65 listening on socket FD 185 +Loop 0 listening on socket FD 158 +Loop 86 listening on socket FD 192 +Loop 9 listening on socket FD 176 +Loop 77 listening on socket FD 190 +Loop 18 listening on socket FD 146 +Loop 5 listening on socket FD 174 +Loop 22 listening on socket FD 172 +Loop 89 listening on socket FD 137 +Loop 23 listening on socket FD 171 +Loop 82 listening on socket FD 140 +Loop 91 listening on socket FD 153 +Loop 14 listening on socket FD 182 +Loop 78 listening on socket FD 167 +Loop 8 listening on socket FD 180 +Loop 7 listening on socket FD 169 +Loop 95 listening on socket FD 161 +Loop 92 listening on socket FD 195 +Loop 88 listening on socket FD 156 +Loop 13 listening on socket FD 187 +Loop 76 listening on socket FD 183 +Loop 12 listening on socket FD 166 +Loop 11 listening on socket FD 136 +Loop 80 listening on socket FD 186 +Loop 10 listening on socket FD 152 +Loop 67 listening on socket FD 157 +Loop 85 listening on socket FD 142 +Loop 84 listening on socket FD 141 +Loop 25 listening on socket FD 134 +Loop 74 listening on socket FD 193 +Loop 30 listening on socket FD 138 +Loop 4 listening on socket FD 191 +Loop 71 listening on socket FD 151 +Loop 73 listening on socket FD 196 +Loop 27 listening on socket FD 197 +Loop 75 listening on socket FD 168 +Loop 90 listening on socket FD 143 +Loop 79 listening on socket FD 165 +Loop 26 listening on socket FD 184 +Loop 21 listening on socket FD 148 +Loop 87 listening on socket FD 162 +Loop 15 listening on socket FD 175 +Loop 2 listening on socket FD 150 +Loop 17 listening on socket FD 163 +Loop 19 listening on socket FD 155 +Loop 29 listening on socket FD 154 +Loop 70 listening on socket FD 160 +Loop 66 listening on socket FD 149 +Loop 24 listening on socket FD 135 +Loop 3 listening on socket FD 164 +Cardigan HttpArena mode h2c is listening on 8082 diff --git a/site/static/logs/baseline-h2c/4096/cardigan-h2c.log b/site/static/logs/baseline-h2c/4096/cardigan-h2c.log new file mode 100644 index 000000000..dbf206021 --- /dev/null +++ b/site/static/logs/baseline-h2c/4096/cardigan-h2c.log @@ -0,0 +1,135 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Starting Cardigan Server on port 8082 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 0 listening on socket FD 169 +Loop 66 listening on socket FD 197 +Loop 3 listening on socket FD 171 +Loop 13 listening on socket FD 138 +Loop 79 listening on socket FD 173 +Loop 30 listening on socket FD 152 +Loop 2 listening on socket FD 192 +Loop 14 listening on socket FD 175 +Loop 18 listening on socket FD 164 +Loop 84 listening on socket FD 191 +Loop 83 listening on socket FD 183 +Loop 94 listening on socket FD 165 +Loop 26 listening on socket FD 148 +Loop 67 listening on socket FD 194 +Loop 72 listening on socket FD 188 +Loop 92 listening on socket FD 154 +Loop 5 listening on socket FD 166 +Loop 71 listening on socket FD 174 +Loop 87 listening on socket FD 195 +Loop 8 listening on socket FD 159 +Loop 28 listening on socket FD 161 +Loop 95 listening on socket FD 190 +Loop 17 listening on socket FD 163 +Loop 19 listening on socket FD 141 +Loop 22 listening on socket FD 168 +Loop 86 listening on socket FD 180 +Loop 80 listening on socket FD 146 +Loop 70 listening on socket FD 158 +Loop 23 listening on socket FD 185 +Loop 85 listening on socket FD 189 +Loop 21 listening on socket FD 135 +Loop 12 listening on socket FD 177 +Loop 89 listening on socket FD 145 +Loop 91 listening on socket FD 150 +Loop 4 listening on socket FD 153 +Loop 90 listening on socket FD 170 +Loop 31 listening on socket FD 147 +Loop 29 listening on socket FD 155 +Loop 9 listening on socket FD 179 +Loop 73 listening on socket FD 136 +Loop 75 listening on socket FD 160 +Loop 74 listening on socket FD 184 +Loop 10 listening on socket FD 196 +Loop 15 listening on socket FD 134 +Loop 20 listening on socket FD 151 +Loop 25 listening on socket FD 156 +Loop 82 listening on socket FD 182 +Loop 93 listening on socket FD 186 +Loop 78 listening on socket FD 162 +Loop 81 listening on socket FD 181 +Loop 77 listening on socket FD 193 +Loop 27 listening on socket FD 149 +Loop 88 listening on socket FD 157 +Loop 68 listening on socket FD 187 +Loop 7 listening on socket FD 144 +Loop 6 listening on socket FD 137 +Loop 76 listening on socket FD 142 +Loop 1 listening on socket FD 178 +Loop 65 listening on socket FD 140 +Loop 69 listening on socket FD 143 +Loop 11 listening on socket FD 167 +Loop 24 listening on socket FD 176 +Loop 16 listening on socket FD 172 +Loop 64 listening on socket FD 139 +Cardigan HttpArena mode h2c is listening on 8082 From d3543ecd633b4a73d40516e192a34bc039418e5f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:33:22 +0000 Subject: [PATCH 5/7] Benchmark results: cardigan-json-tls [skip ci] --- site/data/results/cardigan.json | 19 +++ .../logs/json-tls/4096/cardigan-json-tls.log | 145 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 site/static/logs/json-tls/4096/cardigan-json-tls.log diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json index 7cdecc085..4d3b05dac 100644 --- a/site/data/results/cardigan.json +++ b/site/data/results/cardigan.json @@ -136,6 +136,25 @@ "status_4xx": 0, "status_5xx": 0 }, + "json-tls-4096": { + "framework": "Cardigan", + "language": "Java", + "rps": 994112, + "avg_latency": "4.80ms", + "p99_latency": "434.17ms", + "cpu": "6454.2%", + "memory": "6.8GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "5.15GB", + "reconnects": 0, + "status_2xx": 5065982, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, "limited-conn-4096": { "framework": "Cardigan", "language": "Java", diff --git a/site/static/logs/json-tls/4096/cardigan-json-tls.log b/site/static/logs/json-tls/4096/cardigan-json-tls.log new file mode 100644 index 000000000..fa4ffded4 --- /dev/null +++ b/site/static/logs/json-tls/4096/cardigan-json-tls.log @@ -0,0 +1,145 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [GET] /json/{count} -> HttpArenaJsonController.json +Starting Cardigan Server on port 8080 with 1 io_uring event loops on CPUs [0], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Loop 0 listening on socket FD 8 +Cardigan HttpArena baseline readiness is listening on 8080 +Starting Cardigan Server on port 8081 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 0 listening on socket FD 137 +Loop 3 listening on socket FD 140 +Loop 2 listening on socket FD 139 +Loop 11 listening on socket FD 147 +Loop 8 listening on socket FD 148 +Loop 1 listening on socket FD 138 +Loop 68 listening on socket FD 173 +Loop 71 listening on socket FD 178 +Loop 81 listening on socket FD 182 +Loop 85 listening on socket FD 186 +Loop 9 listening on socket FD 145 +Loop 93 listening on socket FD 195 +Loop 94 listening on socket FD 198 +Loop 6 listening on socket FD 144 +Loop 7 listening on socket FD 141 +Loop 73 listening on socket FD 200 +Loop 5 listening on socket FD 142 +Loop 4 listening on socket FD 143 +Loop 14 listening on socket FD 152 +Loop 13 listening on socket FD 151 +Loop 25 listening on socket FD 161 +Loop 10 listening on socket FD 146 +Loop 19 listening on socket FD 156 +Loop 18 listening on socket FD 155 +Loop 16 listening on socket FD 154 +Loop 17 listening on socket FD 153 +Loop 15 listening on socket FD 149 +Loop 12 listening on socket FD 150 +Loop 23 listening on socket FD 163 +Loop 21 listening on socket FD 158 +Loop 22 listening on socket FD 162 +Loop 20 listening on socket FD 157 +Loop 28 listening on socket FD 159 +Loop 64 listening on socket FD 167 +Loop 27 listening on socket FD 164 +Loop 26 listening on socket FD 165 +Loop 31 listening on socket FD 168 +Loop 65 listening on socket FD 174 +Loop 30 listening on socket FD 169 +Loop 66 listening on socket FD 170 +Loop 70 listening on socket FD 172 +Loop 77 listening on socket FD 177 +Loop 67 listening on socket FD 171 +Loop 69 listening on socket FD 175 +Loop 79 listening on socket FD 179 +Loop 76 listening on socket FD 176 +Loop 80 listening on socket FD 181 +Loop 78 listening on socket FD 180 +Loop 83 listening on socket FD 184 +Loop 82 listening on socket FD 183 +Loop 84 listening on socket FD 185 +Loop 75 listening on socket FD 188 +Loop 74 listening on socket FD 189 +Loop 24 listening on socket FD 160 +Loop 86 listening on socket FD 187 +Loop 87 listening on socket FD 191 +Loop 92 listening on socket FD 194 +Loop 90 listening on socket FD 190 +Loop 72 listening on socket FD 196 +Loop 91 listening on socket FD 197 +Loop 88 listening on socket FD 192 +Loop 89 listening on socket FD 193 +Loop 95 listening on socket FD 199 +Loop 29 listening on socket FD 166 +Cardigan HttpArena mode json-tls is listening on 8081 +TLS/OpenSSL negotiated http/1.1; kTLS TX=true, RX=true, direct RX=false From 0df0d5fc57ee5644ee8d2bb57662cfcc426ba922 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:36:33 +0000 Subject: [PATCH 6/7] Benchmark results: cardigan-grpc [skip ci] --- site/data/results/cardigan.json | 57 ++++++++ .../logs/stream-grpc/64/cardigan-grpc.log | 137 ++++++++++++++++++ .../logs/unary-grpc/1024/cardigan-grpc.log | 137 ++++++++++++++++++ .../logs/unary-grpc/256/cardigan-grpc.log | 137 ++++++++++++++++++ 4 files changed, 468 insertions(+) create mode 100644 site/static/logs/stream-grpc/64/cardigan-grpc.log create mode 100644 site/static/logs/unary-grpc/1024/cardigan-grpc.log create mode 100644 site/static/logs/unary-grpc/256/cardigan-grpc.log diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json index 4d3b05dac..276591cc0 100644 --- a/site/data/results/cardigan.json +++ b/site/data/results/cardigan.json @@ -270,6 +270,63 @@ "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 + }, + "stream-grpc-64": { + "framework": "Cardigan", + "language": "Java", + "rps": 9550000, + "avg_latency": "128.03ms", + "p99_latency": "503.99ms", + "cpu": "41.5%", + "memory": "4.9GiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "0", + "reconnects": 0, + "status_2xx": 9550, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-1024": { + "framework": "Cardigan", + "language": "Java", + "rps": 2391774, + "avg_latency": "74.38ms", + "p99_latency": "481.65ms", + "cpu": "6426.5%", + "memory": "6.2GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "168.19MB/s", + "reconnects": 0, + "status_2xx": 12078460, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-256": { + "framework": "Cardigan", + "language": "Java", + "rps": 5953600, + "avg_latency": "7.09ms", + "p99_latency": "223.94ms", + "cpu": "3208.0%", + "memory": "5.9GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "416.99MB/s", + "reconnects": 0, + "status_2xx": 29946608, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 } } } diff --git a/site/static/logs/stream-grpc/64/cardigan-grpc.log b/site/static/logs/stream-grpc/64/cardigan-grpc.log new file mode 100644 index 000000000..aae17e2d2 --- /dev/null +++ b/site/static/logs/stream-grpc/64/cardigan-grpc.log @@ -0,0 +1,137 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 66 listening on socket FD 157 +Loop 76 listening on socket FD 152 +Loop 95 listening on socket FD 148 +Loop 72 listening on socket FD 140 +Loop 94 listening on socket FD 156 +Loop 67 listening on socket FD 167 +Loop 21 listening on socket FD 158 +Loop 65 listening on socket FD 192 +Loop 88 listening on socket FD 166 +Loop 13 listening on socket FD 153 +Loop 15 listening on socket FD 179 +Loop 85 listening on socket FD 185 +Loop 93 listening on socket FD 139 +Loop 6 listening on socket FD 188 +Loop 69 listening on socket FD 141 +Loop 80 listening on socket FD 178 +Loop 24 listening on socket FD 190 +Loop 26 listening on socket FD 174 +Loop 86 listening on socket FD 187 +Loop 17 listening on socket FD 169 +Loop 27 listening on socket FD 183 +Loop 9 listening on socket FD 150 +Loop 7 listening on socket FD 177 +Loop 83 listening on socket FD 143 +Loop 91 listening on socket FD 181 +Loop 30 listening on socket FD 160 +Loop 20 listening on socket FD 151 +Loop 22 listening on socket FD 164 +Loop 84 listening on socket FD 144 +Loop 74 listening on socket FD 194 +Loop 71 listening on socket FD 145 +Loop 89 listening on socket FD 175 +Loop 19 listening on socket FD 193 +Loop 81 listening on socket FD 162 +Loop 75 listening on socket FD 176 +Loop 73 listening on socket FD 184 +Loop 29 listening on socket FD 163 +Loop 77 listening on socket FD 149 +Loop 28 listening on socket FD 159 +Loop 3 listening on socket FD 161 +Loop 10 listening on socket FD 135 +Loop 68 listening on socket FD 170 +Loop 12 listening on socket FD 173 +Loop 92 listening on socket FD 147 +Loop 14 listening on socket FD 155 +Loop 18 listening on socket FD 189 +Loop 90 listening on socket FD 154 +Loop 79 listening on socket FD 191 +Loop 0 listening on socket FD 137 +Loop 5 listening on socket FD 136 +Loop 23 listening on socket FD 172 +Loop 78 listening on socket FD 196 +Loop 8 listening on socket FD 165 +Loop 11 listening on socket FD 142 +Loop 64 listening on socket FD 138 +Loop 1 listening on socket FD 195 +Loop 2 listening on socket FD 171 +Loop 87 listening on socket FD 134 +Loop 16 listening on socket FD 197 +Loop 70 listening on socket FD 182 +Loop 82 listening on socket FD 146 +Loop 4 listening on socket FD 180 +Loop 31 listening on socket FD 168 +Loop 25 listening on socket FD 186 +Cardigan HttpArena mode grpc is listening on 8080 diff --git a/site/static/logs/unary-grpc/1024/cardigan-grpc.log b/site/static/logs/unary-grpc/1024/cardigan-grpc.log new file mode 100644 index 000000000..33cbb6612 --- /dev/null +++ b/site/static/logs/unary-grpc/1024/cardigan-grpc.log @@ -0,0 +1,137 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 7 listening on socket FD 166 +Loop 75 listening on socket FD 182 +Loop 79 listening on socket FD 148 +Loop 18 listening on socket FD 168 +Loop 19 listening on socket FD 154 +Loop 77 listening on socket FD 190 +Loop 28 listening on socket FD 138 +Loop 14 listening on socket FD 165 +Loop 81 listening on socket FD 171 +Loop 17 listening on socket FD 170 +Loop 68 listening on socket FD 156 +Loop 65 listening on socket FD 146 +Loop 89 listening on socket FD 142 +Loop 16 listening on socket FD 153 +Loop 88 listening on socket FD 137 +Loop 20 listening on socket FD 149 +Loop 87 listening on socket FD 143 +Loop 72 listening on socket FD 158 +Loop 8 listening on socket FD 183 +Loop 64 listening on socket FD 174 +Loop 85 listening on socket FD 197 +Loop 21 listening on socket FD 155 +Loop 24 listening on socket FD 185 +Loop 22 listening on socket FD 161 +Loop 86 listening on socket FD 151 +Loop 2 listening on socket FD 163 +Loop 1 listening on socket FD 164 +Loop 30 listening on socket FD 134 +Loop 29 listening on socket FD 160 +Loop 66 listening on socket FD 187 +Loop 94 listening on socket FD 162 +Loop 23 listening on socket FD 177 +Loop 74 listening on socket FD 189 +Loop 95 listening on socket FD 135 +Loop 73 listening on socket FD 152 +Loop 10 listening on socket FD 193 +Loop 70 listening on socket FD 169 +Loop 90 listening on socket FD 195 +Loop 26 listening on socket FD 141 +Loop 15 listening on socket FD 191 +Loop 93 listening on socket FD 184 +Loop 76 listening on socket FD 159 +Loop 31 listening on socket FD 196 +Loop 84 listening on socket FD 144 +Loop 6 listening on socket FD 176 +Loop 67 listening on socket FD 172 +Loop 12 listening on socket FD 188 +Loop 78 listening on socket FD 179 +Loop 3 listening on socket FD 147 +Loop 91 listening on socket FD 140 +Loop 9 listening on socket FD 167 +Loop 4 listening on socket FD 150 +Loop 27 listening on socket FD 180 +Loop 80 listening on socket FD 157 +Loop 69 listening on socket FD 192 +Loop 82 listening on socket FD 173 +Loop 83 listening on socket FD 178 +Loop 5 listening on socket FD 194 +Loop 25 listening on socket FD 139 +Loop 11 listening on socket FD 145 +Loop 0 listening on socket FD 181 +Loop 13 listening on socket FD 175 +Loop 71 listening on socket FD 186 +Loop 92 listening on socket FD 136 +Cardigan HttpArena mode grpc is listening on 8080 diff --git a/site/static/logs/unary-grpc/256/cardigan-grpc.log b/site/static/logs/unary-grpc/256/cardigan-grpc.log new file mode 100644 index 000000000..277d0cf38 --- /dev/null +++ b/site/static/logs/unary-grpc/256/cardigan-grpc.log @@ -0,0 +1,137 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8080 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=plaintext... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 90 listening on socket FD 153 +Loop 11 listening on socket FD 149 +Loop 95 listening on socket FD 150 +Loop 25 listening on socket FD 175 +Loop 66 listening on socket FD 163 +Loop 7 listening on socket FD 176 +Loop 30 listening on socket FD 187 +Loop 86 listening on socket FD 156 +Loop 65 listening on socket FD 188 +Loop 76 listening on socket FD 136 +Loop 89 listening on socket FD 139 +Loop 82 listening on socket FD 138 +Loop 6 listening on socket FD 191 +Loop 16 listening on socket FD 171 +Loop 22 listening on socket FD 181 +Loop 91 listening on socket FD 170 +Loop 67 listening on socket FD 161 +Loop 72 listening on socket FD 174 +Loop 80 listening on socket FD 185 +Loop 14 listening on socket FD 137 +Loop 13 listening on socket FD 147 +Loop 78 listening on socket FD 177 +Loop 64 listening on socket FD 140 +Loop 3 listening on socket FD 158 +Loop 17 listening on socket FD 151 +Loop 31 listening on socket FD 190 +Loop 79 listening on socket FD 194 +Loop 15 listening on socket FD 167 +Loop 5 listening on socket FD 154 +Loop 2 listening on socket FD 144 +Loop 68 listening on socket FD 142 +Loop 19 listening on socket FD 160 +Loop 27 listening on socket FD 169 +Loop 85 listening on socket FD 180 +Loop 12 listening on socket FD 155 +Loop 71 listening on socket FD 179 +Loop 83 listening on socket FD 182 +Loop 21 listening on socket FD 173 +Loop 93 listening on socket FD 165 +Loop 20 listening on socket FD 157 +Loop 69 listening on socket FD 189 +Loop 0 listening on socket FD 152 +Loop 24 listening on socket FD 195 +Loop 92 listening on socket FD 192 +Loop 88 listening on socket FD 141 +Loop 84 listening on socket FD 193 +Loop 74 listening on socket FD 162 +Loop 75 listening on socket FD 143 +Loop 73 listening on socket FD 197 +Loop 4 listening on socket FD 159 +Loop 81 listening on socket FD 196 +Loop 28 listening on socket FD 164 +Loop 29 listening on socket FD 134 +Loop 10 listening on socket FD 148 +Loop 87 listening on socket FD 184 +Loop 23 listening on socket FD 168 +Loop 94 listening on socket FD 135 +Loop 70 listening on socket FD 166 +Loop 1 listening on socket FD 183 +Loop 18 listening on socket FD 172 +Loop 26 listening on socket FD 178 +Loop 8 listening on socket FD 186 +Loop 9 listening on socket FD 145 +Loop 77 listening on socket FD 146 +Cardigan HttpArena mode grpc is listening on 8080 From 7447a7004df25118d66f2110fc23e17abbe69f04 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Aug 2026 10:38:33 +0000 Subject: [PATCH 7/7] Benchmark results: cardigan-grpc-tls [skip ci] --- site/data/results/cardigan.json | 57 ++++++++ .../stream-grpc-tls/64/cardigan-grpc-tls.log | 138 ++++++++++++++++++ .../unary-grpc-tls/1024/cardigan-grpc-tls.log | 138 ++++++++++++++++++ .../unary-grpc-tls/256/cardigan-grpc-tls.log | 138 ++++++++++++++++++ 4 files changed, 471 insertions(+) create mode 100644 site/static/logs/stream-grpc-tls/64/cardigan-grpc-tls.log create mode 100644 site/static/logs/unary-grpc-tls/1024/cardigan-grpc-tls.log create mode 100644 site/static/logs/unary-grpc-tls/256/cardigan-grpc-tls.log diff --git a/site/data/results/cardigan.json b/site/data/results/cardigan.json index 276591cc0..f8357fc69 100644 --- a/site/data/results/cardigan.json +++ b/site/data/results/cardigan.json @@ -290,6 +290,25 @@ "status_4xx": 0, "status_5xx": 0 }, + "stream-grpc-tls-64": { + "framework": "Cardigan", + "language": "Java", + "rps": 9697000, + "avg_latency": "126.73ms", + "p99_latency": "475.19ms", + "cpu": "63.6%", + "memory": "5.0GiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "0", + "reconnects": 0, + "status_2xx": 9697, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 1 + }, "unary-grpc-1024": { "framework": "Cardigan", "language": "Java", @@ -327,6 +346,44 @@ "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 + }, + "unary-grpc-tls-1024": { + "framework": "Cardigan", + "language": "Java", + "rps": 6561844, + "avg_latency": "8.40ms", + "p99_latency": "83.97ms", + "cpu": "1878.5%", + "memory": "6.1GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "462.33MB/s", + "reconnects": 0, + "status_2xx": 33202932, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, + "unary-grpc-tls-256": { + "framework": "Cardigan", + "language": "Java", + "rps": 6974014, + "avg_latency": "2.22ms", + "p99_latency": "23.70ms", + "cpu": "1689.6%", + "memory": "5.8GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "488.46MB/s", + "reconnects": 0, + "status_2xx": 35079292, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 } } } diff --git a/site/static/logs/stream-grpc-tls/64/cardigan-grpc-tls.log b/site/static/logs/stream-grpc-tls/64/cardigan-grpc-tls.log new file mode 100644 index 000000000..4c5ca1a9a --- /dev/null +++ b/site/static/logs/stream-grpc-tls/64/cardigan-grpc-tls.log @@ -0,0 +1,138 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 83 listening on socket FD 166 +Loop 69 listening on socket FD 165 +Loop 72 listening on socket FD 149 +Loop 92 listening on socket FD 146 +Loop 78 listening on socket FD 158 +Loop 1 listening on socket FD 147 +Loop 16 listening on socket FD 180 +Loop 68 listening on socket FD 137 +Loop 73 listening on socket FD 138 +Loop 65 listening on socket FD 197 +Loop 85 listening on socket FD 188 +Loop 7 listening on socket FD 191 +Loop 22 listening on socket FD 178 +Loop 15 listening on socket FD 144 +Loop 29 listening on socket FD 192 +Loop 20 listening on socket FD 187 +Loop 77 listening on socket FD 167 +Loop 12 listening on socket FD 189 +Loop 80 listening on socket FD 185 +Loop 18 listening on socket FD 154 +Loop 81 listening on socket FD 155 +Loop 75 listening on socket FD 181 +Loop 21 listening on socket FD 184 +Loop 23 listening on socket FD 171 +Loop 10 listening on socket FD 145 +Loop 4 listening on socket FD 157 +Loop 24 listening on socket FD 194 +Loop 76 listening on socket FD 172 +Loop 95 listening on socket FD 174 +Loop 71 listening on socket FD 156 +Loop 66 listening on socket FD 193 +Loop 3 listening on socket FD 176 +Loop 9 listening on socket FD 134 +Loop 67 listening on socket FD 190 +Loop 91 listening on socket FD 143 +Loop 30 listening on socket FD 139 +Loop 8 listening on socket FD 195 +Loop 31 listening on socket FD 141 +Loop 13 listening on socket FD 175 +Loop 94 listening on socket FD 136 +Loop 79 listening on socket FD 151 +Loop 87 listening on socket FD 160 +Loop 82 listening on socket FD 159 +Loop 93 listening on socket FD 152 +Loop 17 listening on socket FD 163 +Loop 0 listening on socket FD 164 +Loop 84 listening on socket FD 140 +Loop 28 listening on socket FD 135 +Loop 64 listening on socket FD 153 +Loop 11 listening on socket FD 148 +Loop 5 listening on socket FD 177 +Loop 27 listening on socket FD 161 +Loop 90 listening on socket FD 186 +Loop 70 listening on socket FD 150 +Loop 14 listening on socket FD 168 +Loop 86 listening on socket FD 142 +Loop 6 listening on socket FD 173 +Loop 19 listening on socket FD 162 +Loop 89 listening on socket FD 170 +Loop 74 listening on socket FD 196 +Loop 2 listening on socket FD 179 +Loop 26 listening on socket FD 183 +Loop 25 listening on socket FD 169 +Loop 88 listening on socket FD 182 +Cardigan HttpArena mode grpc-tls is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false diff --git a/site/static/logs/unary-grpc-tls/1024/cardigan-grpc-tls.log b/site/static/logs/unary-grpc-tls/1024/cardigan-grpc-tls.log new file mode 100644 index 000000000..e98fbd9d2 --- /dev/null +++ b/site/static/logs/unary-grpc-tls/1024/cardigan-grpc-tls.log @@ -0,0 +1,138 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 92 listening on socket FD 137 +Loop 5 listening on socket FD 158 +Loop 14 listening on socket FD 142 +Loop 82 listening on socket FD 170 +Loop 81 listening on socket FD 154 +Loop 29 listening on socket FD 190 +Loop 95 listening on socket FD 151 +Loop 7 listening on socket FD 149 +Loop 83 listening on socket FD 161 +Loop 21 listening on socket FD 191 +Loop 65 listening on socket FD 182 +Loop 69 listening on socket FD 181 +Loop 23 listening on socket FD 135 +Loop 4 listening on socket FD 179 +Loop 68 listening on socket FD 180 +Loop 20 listening on socket FD 138 +Loop 89 listening on socket FD 139 +Loop 16 listening on socket FD 156 +Loop 3 listening on socket FD 164 +Loop 0 listening on socket FD 150 +Loop 64 listening on socket FD 141 +Loop 8 listening on socket FD 165 +Loop 73 listening on socket FD 136 +Loop 9 listening on socket FD 140 +Loop 74 listening on socket FD 172 +Loop 10 listening on socket FD 145 +Loop 77 listening on socket FD 178 +Loop 75 listening on socket FD 163 +Loop 67 listening on socket FD 177 +Loop 18 listening on socket FD 187 +Loop 2 listening on socket FD 167 +Loop 91 listening on socket FD 197 +Loop 19 listening on socket FD 144 +Loop 27 listening on socket FD 160 +Loop 24 listening on socket FD 153 +Loop 76 listening on socket FD 175 +Loop 6 listening on socket FD 183 +Loop 17 listening on socket FD 155 +Loop 15 listening on socket FD 174 +Loop 85 listening on socket FD 192 +Loop 79 listening on socket FD 184 +Loop 88 listening on socket FD 162 +Loop 86 listening on socket FD 157 +Loop 80 listening on socket FD 159 +Loop 87 listening on socket FD 195 +Loop 90 listening on socket FD 169 +Loop 11 listening on socket FD 148 +Loop 66 listening on socket FD 193 +Loop 30 listening on socket FD 176 +Loop 94 listening on socket FD 143 +Loop 1 listening on socket FD 134 +Loop 70 listening on socket FD 186 +Loop 28 listening on socket FD 188 +Loop 72 listening on socket FD 196 +Loop 84 listening on socket FD 146 +Loop 12 listening on socket FD 185 +Loop 22 listening on socket FD 168 +Loop 13 listening on socket FD 152 +Loop 71 listening on socket FD 173 +Loop 26 listening on socket FD 171 +Loop 93 listening on socket FD 189 +Loop 25 listening on socket FD 147 +Loop 78 listening on socket FD 194 +Loop 31 listening on socket FD 166 +Cardigan HttpArena mode grpc-tls is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false diff --git a/site/static/logs/unary-grpc-tls/256/cardigan-grpc-tls.log b/site/static/logs/unary-grpc-tls/256/cardigan-grpc-tls.log new file mode 100644 index 000000000..21d63726c --- /dev/null +++ b/site/static/logs/unary-grpc-tls/256/cardigan-grpc-tls.log @@ -0,0 +1,138 @@ +WARNING: Using incubator modules: jdk.incubator.vector +Registered Route: [POST] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /baseline11 -> HttpArenaController.baseline11 +Registered Route: [GET] /pipeline -> HttpArenaController.pipeline +Registered Route: [GET] /baseline2 -> HttpArenaController.baseline2 +Registered Route: [POST] /benchmark.BenchmarkService/GetSum -> HttpArenaGrpcController.getSum +Registered Route: [POST] /benchmark.BenchmarkService/StreamSum -> HttpArenaGrpcController.streamSum +Starting Cardigan Server on port 8443 with 64 io_uring event loops on CPUs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], transport=TLS/OpenSSL... +Pinned cardigan-loop-0 to Linux CPU 0 +Pinned cardigan-loop-1 to Linux CPU 1 +Pinned cardigan-loop-2 to Linux CPU 2 +Pinned cardigan-loop-3 to Linux CPU 3 +Pinned cardigan-loop-4 to Linux CPU 4 +Pinned cardigan-loop-5 to Linux CPU 5 +Pinned cardigan-loop-6 to Linux CPU 6 +Pinned cardigan-loop-7 to Linux CPU 7 +Pinned cardigan-loop-8 to Linux CPU 8 +Pinned cardigan-loop-9 to Linux CPU 9 +Pinned cardigan-loop-10 to Linux CPU 10 +Pinned cardigan-loop-11 to Linux CPU 11 +Pinned cardigan-loop-12 to Linux CPU 12 +Pinned cardigan-loop-13 to Linux CPU 13 +Pinned cardigan-loop-14 to Linux CPU 14 +Pinned cardigan-loop-15 to Linux CPU 15 +Pinned cardigan-loop-16 to Linux CPU 16 +Pinned cardigan-loop-17 to Linux CPU 17 +Pinned cardigan-loop-18 to Linux CPU 18 +Pinned cardigan-loop-19 to Linux CPU 19 +Pinned cardigan-loop-20 to Linux CPU 20 +Pinned cardigan-loop-21 to Linux CPU 21 +Pinned cardigan-loop-22 to Linux CPU 22 +Pinned cardigan-loop-23 to Linux CPU 23 +Pinned cardigan-loop-24 to Linux CPU 24 +Pinned cardigan-loop-25 to Linux CPU 25 +Pinned cardigan-loop-26 to Linux CPU 26 +Pinned cardigan-loop-27 to Linux CPU 27 +Pinned cardigan-loop-28 to Linux CPU 28 +Pinned cardigan-loop-29 to Linux CPU 29 +Pinned cardigan-loop-30 to Linux CPU 30 +Pinned cardigan-loop-31 to Linux CPU 31 +Pinned cardigan-loop-64 to Linux CPU 64 +Pinned cardigan-loop-65 to Linux CPU 65 +Pinned cardigan-loop-66 to Linux CPU 66 +Pinned cardigan-loop-67 to Linux CPU 67 +Pinned cardigan-loop-68 to Linux CPU 68 +Pinned cardigan-loop-69 to Linux CPU 69 +Pinned cardigan-loop-70 to Linux CPU 70 +Pinned cardigan-loop-71 to Linux CPU 71 +Pinned cardigan-loop-72 to Linux CPU 72 +Pinned cardigan-loop-73 to Linux CPU 73 +Pinned cardigan-loop-74 to Linux CPU 74 +Pinned cardigan-loop-75 to Linux CPU 75 +Pinned cardigan-loop-76 to Linux CPU 76 +Pinned cardigan-loop-77 to Linux CPU 77 +Pinned cardigan-loop-78 to Linux CPU 78 +Pinned cardigan-loop-79 to Linux CPU 79 +Pinned cardigan-loop-80 to Linux CPU 80 +Pinned cardigan-loop-81 to Linux CPU 81 +Pinned cardigan-loop-82 to Linux CPU 82 +Pinned cardigan-loop-83 to Linux CPU 83 +Pinned cardigan-loop-84 to Linux CPU 84 +Pinned cardigan-loop-85 to Linux CPU 85 +Pinned cardigan-loop-86 to Linux CPU 86 +Pinned cardigan-loop-87 to Linux CPU 87 +Pinned cardigan-loop-88 to Linux CPU 88 +Pinned cardigan-loop-89 to Linux CPU 89 +Pinned cardigan-loop-90 to Linux CPU 90 +Pinned cardigan-loop-91 to Linux CPU 91 +Pinned cardigan-loop-92 to Linux CPU 92 +Pinned cardigan-loop-93 to Linux CPU 93 +Pinned cardigan-loop-94 to Linux CPU 94 +Pinned cardigan-loop-95 to Linux CPU 95 +Loop 29 listening on socket FD 186 +Loop 95 listening on socket FD 191 +Loop 30 listening on socket FD 165 +Loop 2 listening on socket FD 178 +Loop 82 listening on socket FD 188 +Loop 70 listening on socket FD 148 +Loop 65 listening on socket FD 180 +Loop 94 listening on socket FD 134 +Loop 12 listening on socket FD 166 +Loop 89 listening on socket FD 194 +Loop 88 listening on socket FD 149 +Loop 26 listening on socket FD 156 +Loop 10 listening on socket FD 174 +Loop 14 listening on socket FD 163 +Loop 93 listening on socket FD 143 +Loop 4 listening on socket FD 135 +Loop 68 listening on socket FD 138 +Loop 21 listening on socket FD 187 +Loop 3 listening on socket FD 192 +Loop 24 listening on socket FD 173 +Loop 19 listening on socket FD 196 +Loop 20 listening on socket FD 182 +Loop 23 listening on socket FD 179 +Loop 81 listening on socket FD 183 +Loop 17 listening on socket FD 197 +Loop 74 listening on socket FD 195 +Loop 78 listening on socket FD 154 +Loop 71 listening on socket FD 145 +Loop 90 listening on socket FD 140 +Loop 87 listening on socket FD 190 +Loop 66 listening on socket FD 181 +Loop 69 listening on socket FD 184 +Loop 18 listening on socket FD 171 +Loop 7 listening on socket FD 158 +Loop 5 listening on socket FD 150 +Loop 16 listening on socket FD 168 +Loop 92 listening on socket FD 160 +Loop 11 listening on socket FD 144 +Loop 73 listening on socket FD 164 +Loop 75 listening on socket FD 157 +Loop 13 listening on socket FD 146 +Loop 77 listening on socket FD 175 +Loop 25 listening on socket FD 155 +Loop 86 listening on socket FD 153 +Loop 9 listening on socket FD 141 +Loop 0 listening on socket FD 167 +Loop 15 listening on socket FD 176 +Loop 67 listening on socket FD 139 +Loop 28 listening on socket FD 151 +Loop 27 listening on socket FD 142 +Loop 6 listening on socket FD 162 +Loop 79 listening on socket FD 170 +Loop 72 listening on socket FD 161 +Loop 84 listening on socket FD 169 +Loop 31 listening on socket FD 159 +Loop 80 listening on socket FD 185 +Loop 83 listening on socket FD 172 +Loop 1 listening on socket FD 152 +Loop 64 listening on socket FD 189 +Loop 8 listening on socket FD 136 +Loop 91 listening on socket FD 147 +Loop 85 listening on socket FD 193 +Loop 76 listening on socket FD 177 +Loop 22 listening on socket FD 137 +Cardigan HttpArena mode grpc-tls is listening on 8443 +TLS/OpenSSL negotiated h2; kTLS TX=true, RX=true, direct RX=false