RFR: 8308118: Avoid multiarray allocations in AESCrypt.makeSessionKey

Aleksey Shipilev shade at openjdk.org
Tue May 16 06:31:45 UTC 2023


On Mon, 15 May 2023 20:51:21 GMT, Xue-Lei Andrew Fan <xuelei at openjdk.org> wrote:

>> One of our services has a hot path with AES/GCM cipher reuse. The JDK code reinitializes the session key on that path, and [JDK-8308105](https://bugs.openjdk.org/browse/JDK-8308105) shows up prominently there. While [JDK-8308105](https://bugs.openjdk.org/browse/JDK-8308105) is being fixed, it would take significantly more work: there are multiple issues of differing complexity, impact, and risk. 
>> 
>> Meanwhile, we can work this issue around by avoiding the multiarray allocations in AESCrypt.makeSessionKey. This workaround is straight-forward and backportable.
>> 
>> Example profile is in the bug.
>> 
>> On new benchmark and M1 Mac:
>> 
>> 
>> Benchmark       Mode  Cnt    Score   Error  Units
>> 
>> # Before
>> AESReinit.test  avgt   15  873,842 ± 6,911  ns/op
>> 
>> # After
>> AESReinit.test  avgt   15  533,018 ± 4,048  ns/op
>> 
>> 
>> Additional testing:
>>  - [x] Benchmarks
>>  - [x] macos-aarch64-server-release, `jdk_security`
>>  - [ ] linux-x86_64-server-fastdebug, `tier1 tier2`
>>  - [x] linux-aarch64-server-fastdebug, `tier1 tier2`
>
> src/java.base/share/classes/com/sun/crypto/provider/AESCrypt.java line 1372:
> 
>> 1370: 
>> 1371:         // It is significantly faster to allocate individual arrays,
>> 1372:         // instead of doing the multi-array allocation. See JDK-8308105.
> 
> Alternatively, could the multi-array allocation get improved?

Yes, it could and it eventually would, but it would take significantly more work: there are multiple issues of differing complexity, impact, and risk. This workaround, on the other hand, is straight-forward and backportable.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13996#discussion_r1194673153



More information about the security-dev mailing list