diff --git a/.gitignore b/.gitignore index 0cb86de..26cf493 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ dependency-reduced-pom.xml .classpath .settings .factorypath -target \ No newline at end of file +target +docker/jars +docker/data \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e0b16e2 --- /dev/null +++ b/readme.md @@ -0,0 +1,28 @@ +# JAX-RS compliant kernels test + +## Build time (for reference only) + +| Kernel | time | +| ------------------------ | ------- | +| quarkus-resteasy-jackson | 1.463 s | +| quarkus-resteasy-jsonb | 0.943 s | +| jersey-grizzly2 | 1.029 s | +| jersey-jdk-http | 0.350 s | +| jersey-simple-http | 0.370 s | +| jersey-jetty | 0.465 s | +| jersey-netty | 0.596 s | +| jersey-netty | 0.596 s | +| jersey-netty | 0.596 s | +| jersey-netty | 0.596 s | +| rawnetty | 0.659 s | +| jooby-netty | 0.497 s | +| jooby-jetty | 0.360 s | +| jooby-undertow | 0.410 s | +| resteasy-jdk-http | 0.319 s | +| resteasy-netty | 0.603 s | +| resteasy-reactor-netty | 0.813 s | +| resteasy-vertx | 0.648 s | +| resteasy-undertow | 0.568 s | +| cxf-jetty | 0.572 s | +| cxf-netty | 0.618 s | +| cxf-undertow | 0.691 s | diff --git a/scripts/collect-jars.sh b/scripts/collect-jars.sh new file mode 100755 index 0000000..b02a66b --- /dev/null +++ b/scripts/collect-jars.sh @@ -0,0 +1,49 @@ +if [ ! -d ../docker/jars ]; then rm -rf ../docker/jars; fi +mkdir -p ../docker/jars + +if [ ! -d ../docker/data ]; then rm -rf ../docker/data; fi +mkdir -p ../docker/data + +mkdir -p ../docker/jars/cxf-jetty +cp ../modules/cxf-jetty/target/cxf-jetty-1.0-SNAPSHOT.jar ../docker/jars/cxf-jetty/app.jar +mkdir -p ../docker/jars/cxf-netty +cp ../modules/cxf-netty/target/cxf-netty-1.0-SNAPSHOT.jar ../docker/jars/cxf-netty/app.jar +mkdir -p ../docker/jars/cxf-undertow +cp ../modules/cxf-undertow/target/cxf-undertow-1.0-SNAPSHOT.jar ../docker/jars/cxf-undertow/app.jar + +mkdir -p ../docker/jars/jersey-grizzly2 +cp ../modules/jersey-grizzly2/target/jersey-grizzly2-1.0-SNAPSHOT.jar ../docker/jars/jersey-grizzly2/app.jar +mkdir -p ../docker/jars/jersey-jdk-http +cp ../modules/jersey-jdk-http/target/jersey-jdk-http-1.0-SNAPSHOT.jar ../docker/jars/jersey-jdk-http/app.jar +mkdir -p ../docker/jars/jersey-jetty +cp ../modules/jersey-jetty/target/jersey-jetty-1.0-SNAPSHOT.jar ../docker/jars/jersey-jetty/app.jar +mkdir -p ../docker/jars/jersey-netty +cp ../modules/jersey-netty/target/jersey-netty-1.0-SNAPSHOT.jar ../docker/jars/jersey-netty/app.jar +mkdir -p ../docker/jars/jersey-simple-http +cp ../modules/jersey-simple-http/target/jersey-simple-http-1.0-SNAPSHOT.jar ../docker/jars/jersey-simple-http/app.jar + +mkdir -p ../docker/jars/jooby-jetty +cp ../modules/jooby-jetty/target/jooby-jetty-1.0-SNAPSHOT.jar ../docker/jars/jooby-jetty/app.jar +mkdir -p ../docker/jars/jooby-netty +cp ../modules/jooby-netty/target/jooby-netty-1.0-SNAPSHOT.jar ../docker/jars/jooby-netty/app.jar +mkdir -p ../docker/jars/jooby-undertow +cp ../modules/jooby-undertow/target/jooby-undertow-1.0-SNAPSHOT.jar ../docker/jars/jooby-undertow/app.jar + +cp -r ../modules/quarkus-resteasy-jackson/target/quarkus-app ../docker/jars/quarkus-resteasy-jackson +mv ../docker/jars/quarkus-resteasy-jackson/quarkus-run.jar ../docker/jars/quarkus-resteasy-jackson/app.jar +cp -r ../modules/quarkus-resteasy-jsonb/target/quarkus-app ../docker/jars/quarkus-resteasy-jsonb +mv ../docker/jars/quarkus-resteasy-jsonb/quarkus-run.jar ../docker/jars/quarkus-resteasy-jsonb/app.jar + +mkdir -p ../docker/jars/rawnetty +cp ../modules/rawnetty/target/rawnetty-1.0-SNAPSHOT.jar ../docker/jars/rawnetty/app.jar + +mkdir -p ../docker/jars/resteasy-jdk-http +cp ../modules/resteasy-jdk-http/target/resteasy-jdk-http-1.0-SNAPSHOT.jar ../docker/jars/resteasy-jdk-http/app.jar +mkdir -p ../docker/jars/resteasy-netty +cp ../modules/resteasy-netty/target/resteasy-netty-1.0-SNAPSHOT.jar ../docker/jars/resteasy-netty/app.jar +mkdir -p ../docker/jars/resteasy-reactor-netty +cp ../modules/resteasy-reactor-netty/target/resteasy-reactor-netty-1.0-SNAPSHOT.jar ../docker/jars/resteasy-reactor-netty/app.jar +mkdir -p ../docker/jars/resteasy-undertow +cp ../modules/resteasy-undertow/target/resteasy-undertow-1.0-SNAPSHOT.jar ../docker/jars/resteasy-undertow/app.jar +mkdir -p ../docker/jars/resteasy-vertx +cp ../modules/resteasy-vertx/target/resteasy-vertx-1.0-SNAPSHOT.jar ../docker/jars/resteasy-vertx/app.jar diff --git a/scripts/lua/dump_get.lua b/scripts/lua/dump_get.lua new file mode 100644 index 0000000..55c63c0 --- /dev/null +++ b/scripts/lua/dump_get.lua @@ -0,0 +1,28 @@ + +function done(summary, latency, requests) + file = io.open('docker/data/get.json', 'w') + io.output(file) + + io.write(string.format("{\n")) + + io.write(string.format(" \"summary\": {\n")) + io.write(string.format(" \"duration_microseconds\": %d,\n", summary.duration)) + io.write(string.format(" \"num_requests\": %d,\n", summary.requests)) + io.write(string.format(" \"total_bytes\": %d,\n", summary.bytes)) + io.write(string.format(" \"requests_per_sec\": %.2f,\n", summary.requests/(summary.duration))) + io.write(string.format(" \"bytes_per_sec\": \"%.2f\"\n", summary.bytes/summary.duration)) + io.write(string.format(" },\n")) + + io.write(string.format(" \"latency\": {\n")) + io.write(string.format(" \"min_microseconds\": %.2f,\n", latency.min)) + io.write(string.format(" \"max_microseconds\": %.2f,\n", latency.max)) + io.write(string.format(" \"mean_microseconds\": %.2f,\n", latency.mean)) + io.write(string.format(" \"stdev_microseconds\": %.2f,\n", latency.stdev)) + io.write(string.format(" \"percentile_90_microseconds\": %.2f,\n", latency:percentile(90.0))) + io.write(string.format(" \"percentile_95_microseconds\": %.2f,\n", latency:percentile(95.0))) + io.write(string.format(" \"percentile_99_microseconds\": %.2f\n", latency:percentile(99.0))) + io.write(string.format(" }\n")) + + + io.write(string.format("}\n")) + end \ No newline at end of file diff --git a/scripts/lua/dump_index.lua b/scripts/lua/dump_index.lua new file mode 100644 index 0000000..8da2237 --- /dev/null +++ b/scripts/lua/dump_index.lua @@ -0,0 +1,28 @@ + +function done(summary, latency, requests) + file = io.open('docker/data/index.json', 'w') + io.output(file) + + io.write(string.format("{\n")) + + io.write(string.format(" \"summary\": {\n")) + io.write(string.format(" \"duration_microseconds\": %d,\n", summary.duration)) + io.write(string.format(" \"num_requests\": %d,\n", summary.requests)) + io.write(string.format(" \"total_bytes\": %d,\n", summary.bytes)) + io.write(string.format(" \"requests_per_sec\": %.2f,\n", summary.requests/(summary.duration))) + io.write(string.format(" \"bytes_per_sec\": \"%.2f\"\n", summary.bytes/summary.duration)) + io.write(string.format(" },\n")) + + io.write(string.format(" \"latency\": {\n")) + io.write(string.format(" \"min_microseconds\": %.2f,\n", latency.min)) + io.write(string.format(" \"max_microseconds\": %.2f,\n", latency.max)) + io.write(string.format(" \"mean_microseconds\": %.2f,\n", latency.mean)) + io.write(string.format(" \"stdev_microseconds\": %.2f,\n", latency.stdev)) + io.write(string.format(" \"percentile_90_microseconds\": %.2f,\n", latency:percentile(90.0))) + io.write(string.format(" \"percentile_95_microseconds\": %.2f,\n", latency:percentile(95.0))) + io.write(string.format(" \"percentile_99_microseconds\": %.2f\n", latency:percentile(99.0))) + io.write(string.format(" }\n")) + + + io.write(string.format("}\n")) + end \ No newline at end of file diff --git a/scripts/lua/dump_post.lua b/scripts/lua/dump_post.lua new file mode 100644 index 0000000..b935fd4 --- /dev/null +++ b/scripts/lua/dump_post.lua @@ -0,0 +1,29 @@ +wrk.method = "POST" + +function done(summary, latency, requests) + file = io.open('docker/data/post.json', 'w') + io.output(file) + + io.write(string.format("{\n")) + + io.write(string.format(" \"summary\": {\n")) + io.write(string.format(" \"duration_microseconds\": %d,\n", summary.duration)) + io.write(string.format(" \"num_requests\": %d,\n", summary.requests)) + io.write(string.format(" \"total_bytes\": %d,\n", summary.bytes)) + io.write(string.format(" \"requests_per_sec\": %.2f,\n", summary.requests/(summary.duration))) + io.write(string.format(" \"bytes_per_sec\": \"%.2f\"\n", summary.bytes/summary.duration)) + io.write(string.format(" },\n")) + + io.write(string.format(" \"latency\": {\n")) + io.write(string.format(" \"min_microseconds\": %.2f,\n", latency.min)) + io.write(string.format(" \"max_microseconds\": %.2f,\n", latency.max)) + io.write(string.format(" \"mean_microseconds\": %.2f,\n", latency.mean)) + io.write(string.format(" \"stdev_microseconds\": %.2f,\n", latency.stdev)) + io.write(string.format(" \"percentile_90_microseconds\": %.2f,\n", latency:percentile(90.0))) + io.write(string.format(" \"percentile_95_microseconds\": %.2f,\n", latency:percentile(95.0))) + io.write(string.format(" \"percentile_99_microseconds\": %.2f\n", latency:percentile(99.0))) + io.write(string.format(" }\n")) + + + io.write(string.format("}\n")) + end \ No newline at end of file diff --git a/scripts/wrk-test.sh b/scripts/wrk-test.sh new file mode 100755 index 0000000..52b9398 --- /dev/null +++ b/scripts/wrk-test.sh @@ -0,0 +1,12 @@ +echo "Module: $1"; +echo "Threads: $2"; +echo "Connections: $3"; +echo "Duration: $4"; + +wrk -t$2 -c$3 -d$4s -s ./scripts/lua/dump_index.lua http://127.0.0.1:8080/test/ +wrk -t$2 -c$3 -d$4s -s ./scripts/lua/dump_get.lua http://127.0.0.1:8080/test/100 +wrk -t$2 -c$3 -d$4s -s ./scripts/lua/dump_post.lua http://127.0.0.1:8080/test/100 + +mv ./docker/data/index.json ./docker/data/index-$1.json +mv ./docker/data/get.json ./docker/data/get-$1.json +mv ./docker/data/post.json ./docker/data/post-$1.json \ No newline at end of file