-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tls
client/server/echo
handshake benchmark
#990
Merged
Merged
Changes from 96 commits
Commits
Show all changes
98 commits
Select commit
Hold shift + click to select a range
2cef977
Adjust padding to accommodate good enough headers and don't include …
akrambek d201582
Merge branch 'develop' into feature/consumer-group-cont
akrambek 76bf9de
Merge branch 'feature/consumer-group-cont' into develop
akrambek 29ae79c
Merge branch 'aklivity:develop' into develop
akrambek ec1b39e
Merge branch 'aklivity:develop' into develop
akrambek 51a9f0e
Merge branch 'aklivity:develop' into develop
akrambek 4394783
Merge branch 'aklivity:develop' into develop
akrambek e8696ce
Merge branch 'aklivity:develop' into develop
akrambek 51c37b1
Merge branch 'aklivity:develop' into develop
akrambek 5da5f04
Merge branch 'aklivity:develop' into develop
akrambek db1e17c
Merge branch 'aklivity:develop' into develop
akrambek 40f73dc
Merge branch 'aklivity:develop' into develop
akrambek d1a0492
Merge branch 'aklivity:develop' into develop
akrambek 45799ce
Merge branch 'aklivity:develop' into develop
akrambek 1e55162
Merge branch 'aklivity:develop' into develop
akrambek fedc41f
Merge branch 'aklivity:develop' into develop
akrambek 18a8d74
Merge branch 'aklivity:develop' into develop
akrambek f160aad
Merge branch 'aklivity:develop' into develop
akrambek e0e7d5a
Merge branch 'aklivity:develop' into develop
akrambek 9f4a8a6
Merge branch 'aklivity:develop' into develop
akrambek 456f111
Merge branch 'aklivity:develop' into develop
akrambek 0d27262
Merge branch 'aklivity:develop' into develop
akrambek 9fe7a91
Merge branch 'aklivity:develop' into develop
akrambek 7e3d237
Merge branch 'aklivity:develop' into develop
akrambek 33c4411
Merge branch 'aklivity:develop' into develop
akrambek fe9e318
Merge branch 'aklivity:develop' into develop
akrambek d8b5e5c
Merge branch 'aklivity:develop' into develop
akrambek ebca7ef
Merge branch 'aklivity:develop' into develop
akrambek 5e3e059
Merge branch 'aklivity:develop' into develop
akrambek ee71db9
Merge branch 'aklivity:develop' into develop
akrambek 0b7a15a
Merge branch 'aklivity:develop' into develop
akrambek be13489
Merge branch 'aklivity:develop' into develop
akrambek 95df84c
Merge branch 'aklivity:develop' into develop
akrambek 3ebdbf5
Merge branch 'aklivity:develop' into develop
akrambek 24ad9e1
Merge branch 'aklivity:develop' into develop
akrambek 6d21fec
Merge branch 'aklivity:develop' into develop
akrambek 368a0a6
Merge branch 'aklivity:develop' into develop
akrambek 7069f1a
Merge branch 'aklivity:develop' into develop
akrambek 09b7041
Merge branch 'aklivity:develop' into develop
akrambek 98f1faa
Merge branch 'aklivity:develop' into develop
akrambek 371391a
Merge branch 'aklivity:develop' into develop
akrambek c6a0882
Merge branch 'aklivity:develop' into develop
akrambek f99f009
Merge branch 'aklivity:develop' into develop
akrambek a110b68
Merge branch 'aklivity:develop' into develop
akrambek 80c4625
Merge branch 'aklivity:develop' into develop
akrambek 6617e20
Merge branch 'aklivity:develop' into develop
akrambek dea9f53
Merge branch 'aklivity:develop' into develop
akrambek b74db57
Merge branch 'aklivity:develop' into develop
akrambek 4617b54
Merge branch 'aklivity:develop' into develop
akrambek b3b421d
Merge branch 'aklivity:develop' into develop
akrambek 73d64b1
Merge branch 'aklivity:develop' into develop
akrambek 7bb546e
Merge branch 'aklivity:develop' into develop
akrambek b1c7901
Merge branch 'aklivity:develop' into develop
akrambek 949df2f
Merge branch 'aklivity:develop' into develop
akrambek ca946b8
Merge branch 'aklivity:develop' into develop
akrambek f9dcd75
Merge branch 'aklivity:develop' into develop
akrambek e1e5e75
Merge branch 'aklivity:develop' into develop
akrambek 5f50549
Merge branch 'aklivity:develop' into develop
akrambek 32725be
Merge branch 'aklivity:develop' into develop
akrambek 83b145a
Merge branch 'aklivity:develop' into develop
akrambek 75e7709
Merge branch 'aklivity:develop' into develop
akrambek d4c3117
Merge branch 'aklivity:develop' into develop
akrambek a438cfe
Merge branch 'aklivity:develop' into develop
akrambek 36f8f1e
Merge branch 'aklivity:develop' into develop
akrambek cf8a5c7
Merge branch 'aklivity:develop' into develop
akrambek 7b46270
Merge branch 'aklivity:develop' into develop
akrambek 6461ebf
Merge branch 'aklivity:develop' into develop
akrambek a97cfb3
Merge branch 'aklivity:develop' into develop
akrambek fc97dc2
Merge branch 'aklivity:develop' into develop
akrambek a5edb3f
Merge branch 'aklivity:develop' into develop
akrambek 7a79fd6
Merge branch 'aklivity:develop' into develop
akrambek 82c24c3
Merge branch 'aklivity:develop' into develop
akrambek 1f3f305
Merge branch 'aklivity:develop' into develop
akrambek 3a12b8b
Merge branch 'aklivity:develop' into develop
akrambek 7684d2a
Merge branch 'aklivity:develop' into develop
akrambek d40e2cd
Merge branch 'aklivity:develop' into develop
akrambek fcd6cd2
Merge branch 'aklivity:develop' into develop
akrambek 141a871
Merge branch 'aklivity:develop' into develop
akrambek 782b711
Merge branch 'aklivity:develop' into develop
akrambek 0c93c5f
Merge branch 'aklivity:develop' into develop
akrambek 70f2543
Merge branch 'aklivity:develop' into develop
akrambek c451d70
Merge branch 'aklivity:develop' into develop
akrambek 45f6a83
Merge branch 'aklivity:develop' into develop
akrambek 32ba7e9
Merge branch 'aklivity:develop' into develop
akrambek 95ff994
Merge branch 'aklivity:develop' into develop
akrambek 716d729
First JMH test
akrambek 7dd3d28
Fix checkstyle
akrambek 6613805
Add licence header
akrambek e191285
Update NOTICE and dependencies to execute benchmarks via shaded tests…
jfallows 3c62968
Refactor benchmark tests to different package
jfallows caa3918
WIP
akrambek ebd0de4
WIP
akrambek 0305d69
WIP
akrambek b40e377
Add support for vault
akrambek 49787e7
Merge branch 'aklivity:develop' into develop
akrambek fd6b5ad
Merge branch 'develop' into feature/961-tls
akrambek 485dd84
Apply feedback
akrambek a0c2cea
Replace current timestamp with NO_CANCEL_ID
akrambek File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
196 changes: 196 additions & 0 deletions
196
...ls/src/test/java/io/aklivity/zilla/runtime/binding/tls/internal/bench/TlsHandshakeBM.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,196 @@ | ||
/* | ||
* Copyright 2021-2023 Aklivity Inc. | ||
* | ||
* Aklivity licenses this file to you under the Apache License, | ||
* version 2.0 (the "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at: | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
* License for the specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package io.aklivity.zilla.runtime.binding.tls.internal.bench; | ||
|
||
import static io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_CONFIG_URL; | ||
import static io.aklivity.zilla.runtime.engine.config.KindConfig.CLIENT; | ||
import static io.aklivity.zilla.runtime.engine.config.KindConfig.SERVER; | ||
import static java.util.concurrent.TimeUnit.SECONDS; | ||
|
||
import java.net.URL; | ||
import java.util.List; | ||
import java.util.Properties; | ||
|
||
import org.agrona.MutableDirectBuffer; | ||
import org.agrona.concurrent.UnsafeBuffer; | ||
import org.openjdk.jmh.annotations.Benchmark; | ||
import org.openjdk.jmh.annotations.BenchmarkMode; | ||
import org.openjdk.jmh.annotations.Fork; | ||
import org.openjdk.jmh.annotations.Level; | ||
import org.openjdk.jmh.annotations.Measurement; | ||
import org.openjdk.jmh.annotations.Mode; | ||
import org.openjdk.jmh.annotations.OutputTimeUnit; | ||
import org.openjdk.jmh.annotations.Scope; | ||
import org.openjdk.jmh.annotations.Setup; | ||
import org.openjdk.jmh.annotations.State; | ||
import org.openjdk.jmh.annotations.TearDown; | ||
import org.openjdk.jmh.annotations.Warmup; | ||
import org.openjdk.jmh.infra.Control; | ||
import org.openjdk.jmh.runner.Runner; | ||
import org.openjdk.jmh.runner.RunnerException; | ||
import org.openjdk.jmh.runner.options.Options; | ||
import org.openjdk.jmh.runner.options.OptionsBuilder; | ||
|
||
import io.aklivity.zilla.runtime.binding.tls.config.TlsOptionsConfig; | ||
import io.aklivity.zilla.runtime.binding.tls.internal.types.stream.BeginFW; | ||
import io.aklivity.zilla.runtime.binding.tls.internal.types.stream.WindowFW; | ||
import io.aklivity.zilla.runtime.engine.EngineConfiguration; | ||
import io.aklivity.zilla.runtime.engine.binding.BindingHandler; | ||
import io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer; | ||
import io.aklivity.zilla.runtime.engine.config.NamespaceConfig; | ||
import io.aklivity.zilla.runtime.vault.filesystem.config.FileSystemOptionsConfig; | ||
|
||
@State(Scope.Benchmark) | ||
@BenchmarkMode(Mode.Throughput) | ||
@Fork(3) | ||
@Warmup(iterations = 10, time = 1, timeUnit = SECONDS) | ||
@Measurement(iterations = 5, time = 1, timeUnit = SECONDS) | ||
@OutputTimeUnit(SECONDS) | ||
public class TlsHandshakeBM | ||
{ | ||
private static final int BUFFER_SIZE = 1024 * 8; | ||
|
||
private final BeginFW.Builder beginRW = new BeginFW.Builder(); | ||
private final WindowFW.Builder windowRW = new WindowFW.Builder(); | ||
private final MutableDirectBuffer writeBuffer = new UnsafeBuffer(new byte[BUFFER_SIZE]); | ||
|
||
private BindingHandler streamFactory; | ||
private TlsWorker worker; | ||
|
||
@Setup(Level.Trial) | ||
public void init() | ||
{ | ||
final Properties properties = new Properties(); | ||
URL configURL = TlsHandshakeBM.class.getClassLoader().getResource("io/aklivity/zilla/specs/binding/tls/config"); | ||
properties.setProperty(ENGINE_CONFIG_URL.name(), String.format("%s/zilla.yaml", configURL.toString())); | ||
final EngineConfiguration config = new EngineConfiguration(properties); | ||
this.worker = new TlsWorker(config); | ||
|
||
NamespaceConfig namespace = NamespaceConfig.builder() | ||
.name("tls") | ||
.vault() | ||
.name("server") | ||
.type("filesystem") | ||
.options(FileSystemOptionsConfig.builder() | ||
.keys() | ||
.store("stores/server/keys") | ||
.type("pkcs12") | ||
.password("generated") | ||
.build() | ||
.trust() | ||
.store("stores/client/trust") | ||
.type("pkcs12") | ||
.password("generated") | ||
.build() | ||
.build()) | ||
.build() | ||
.binding() | ||
.name("tls_client0") | ||
.type("tls") | ||
.kind(CLIENT) | ||
.vault("server") | ||
.options(TlsOptionsConfig.builder() | ||
.trust(List.of("serverca")) | ||
.sni(List.of("localhost")) | ||
.build()) | ||
.exit("tls_server0") | ||
.build() | ||
.binding() | ||
.name("tls_server0") | ||
.type("tls") | ||
.kind(SERVER) | ||
.vault("server") | ||
.options(TlsOptionsConfig.builder() | ||
.keys(List.of("localhost")) | ||
.version("tls") | ||
.build()) | ||
.exit("echo_server0") | ||
.build() | ||
.binding() | ||
.name("echo_server0") | ||
.type("echo") | ||
.kind(SERVER) | ||
.build() | ||
.build(); | ||
|
||
worker.attach(namespace); | ||
|
||
streamFactory = worker.streamFactory(); | ||
} | ||
|
||
@TearDown(Level.Trial) | ||
public void destroy() | ||
{ | ||
} | ||
|
||
@Setup(Level.Iteration) | ||
public void reset() | ||
{ | ||
} | ||
|
||
@Benchmark | ||
public void handshake( | ||
final Control control) throws Exception | ||
{ | ||
final long initialId = worker.supplyInitialId(0L); | ||
final long replyId = worker.supplyReplyId(initialId); | ||
|
||
final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity()) | ||
.originId(0L) | ||
.routedId(4261135416L) | ||
.streamId(initialId) | ||
.sequence(0L) | ||
.acknowledge(0L) | ||
.maximum(BUFFER_SIZE) | ||
.traceId(0L) | ||
.authorization(0L) | ||
.affinity(0L) | ||
.build(); | ||
|
||
MessageConsumer sender = MessageConsumer.NOOP; | ||
MessageConsumer receiver = streamFactory.newStream( | ||
begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof(), sender); | ||
|
||
receiver.accept(begin.typeId(), begin.buffer(), begin.offset(), begin.sizeof()); | ||
|
||
final WindowFW window = windowRW.wrap(writeBuffer, 0, writeBuffer.capacity()) | ||
.originId(0L) | ||
.routedId(4261135416L) | ||
.streamId(replyId) | ||
.sequence(0L) | ||
.acknowledge(0L) | ||
.maximum(BUFFER_SIZE) | ||
.traceId(0L) | ||
.budgetId(0L) | ||
.padding(0) | ||
.build(); | ||
|
||
receiver.accept(window.typeId(), window.buffer(), window.offset(), window.sizeof()); | ||
|
||
worker.doWork(); | ||
} | ||
|
||
public static void main( | ||
String[] args) throws RunnerException | ||
{ | ||
Options opt = new OptionsBuilder() | ||
.include(TlsHandshakeBM.class.getSimpleName()) | ||
.forks(0) | ||
.build(); | ||
|
||
new Runner(opt).run(); | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please remove buffers0 from the PR. 😄