Nice.

On 22/04/2022 6:47 am, Daniel Jeliński wrote:
On Thu, 21 Apr 2022 19:58:39 GMT, Daniel Jeliński <djelin...@openjdk.org> wrote:

Profiling the TLS handshakes using SSLHandshake benchmark shows that a large 
portion of time is spent in HandshakeContext initialization, specifically in 
DisabledAlgorithmConstraints class.

There are only a few instances of that class, and they are immutable. Caching 
the results should be a low-risk operation.

The cache is implemented as a softly reachable ConcurrentHashMap; this way it 
can be removed from memory after a period of inactivity. Under normal 
circumstances the cache holds no more than 100 algorithms.
before:

Benchmark                 (resume)  (tlsVersion)   Mode  Cnt     Score      
Error  Units
SSLHandshake.doHandshake      true       TLSv1.2  thrpt    5  2165.081 ± 
440.204  ops/s
SSLHandshake.doHandshake      true           TLS  thrpt    5   534.681 ± 
146.931  ops/s
SSLHandshake.doHandshake     false       TLSv1.2  thrpt    5   369.104 ±  
11.143  ops/s
SSLHandshake.doHandshake     false           TLS  thrpt    5   253.903 ±  
58.056  ops/s

after:

Benchmark                 (resume)  (tlsVersion)   Mode  Cnt      Score     
Error  Units
SSLHandshake.doHandshake      true       TLSv1.2  thrpt    5  10440.501 ± 
478.177  ops/s
SSLHandshake.doHandshake      true           TLS  thrpt    5    762.995 ±  
33.842  ops/s
SSLHandshake.doHandshake     false       TLSv1.2  thrpt    5    440.471 ±  
52.867  ops/s
SSLHandshake.doHandshake     false           TLS  thrpt    5    305.928 ±  
57.847  ops/s

After this patch the HandshakeContext initialization practically disappears 
from the CPU profile; it only takes ~5% in TLS1.2 resumption, and much less in 
the remaining scenarios.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8349

--
Regards,
Peter Firmstone
0498 286 363
Zeus Project Services Pty Ltd.

Reply via email to