RFR: 8274308: Improve efficiency for HandshakeContext initialization.
Clive Verghese
cverghese at openjdk.java.net
Sat Oct 2 05:53:54 UTC 2021
Hi,
We have identified that the `HandshakeContext` initialization takes up a close to 50% of the flame graph for startHandshake. I have moved the computation of the `activeProtocols` and `activeCipherSuites` from the HandshakeContext constructor to SSLConfiguration class because the values used to compute the two list are available in the SSLConfiguration.
In order to reuse this, I have initialized SSLConfiguration in the SSLSocketFactory and reused this when possible for Client Socket Constructors in the SSLSocketImpl.
Sockets created from the SSLSocketFactory see this improvements.
Old Benchmarks
Benchmark Mode Cnt Score Error Units
SSLStartHandshake.handshakeBenchmark thrpt 25 0.247 ± 0.011 ops/ms
SSLStartHandshake.handshakeBenchmark avgt 25 4.210 ± 0.445 ms/op
New Benchmarks
SSLStartHandshake.handshakeBenchmark thrpt 25 0.257 ± 0.017 ops/ms
SSLStartHandshake.handshakeBenchmark avgt 25 3.967 ± 0.208 ms/op
I have also attached the JFR profiles from before and after the change.
Before
<img width="2325" alt="SSLOverhead-old" src="https://user-images.githubusercontent.com/934461/135705010-a8502966-c6be-4cb5-b743-4a5b382c8e1f.png">
After
<img width="2310" alt="SSLOverhead-new" src="https://user-images.githubusercontent.com/934461/135705007-ea852b36-e10f-4741-a166-249270b34465.png">
We have been able to optimize the `TransportContext.kickstart` function by removing the `HandshakeContext.<init>` initialization and reduce the time to start the handshake by reusing `activeProtocols` and `activeCipherSuites`
In addition to the SSL and http tests, I have run tier-1 and tier-2 tests and ensure that they pass.
Looking for your feedback
-------------
Commit messages:
- 8274308: Improve efficiency for HandshakeContext initialization
- Benchmark
Changes: https://git.openjdk.java.net/jdk/pull/5793/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5793&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8274308
Stats: 796 lines in 8 files changed: 607 ins; 148 del; 41 mod
Patch: https://git.openjdk.java.net/jdk/pull/5793.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5793/head:pull/5793
PR: https://git.openjdk.java.net/jdk/pull/5793
More information about the security-dev
mailing list