RFR: 8259498: Reduce overhead of MD5 and SHA digests
Valerie Peng
valeriep at openjdk.java.net
Wed Jan 13 00:59:55 UTC 2021
On Thu, 7 Jan 2021 18:50:05 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> Removing the UUID clone cache and running the microbenchmark along with the changes in #1933:
>>
>> Benchmark (size) Mode Cnt Score Error Units
>> UUIDBench.fromType3Bytes 20000 thrpt 12 2.182 ± 0.090 ops/us
>> UUIDBench.fromType3Bytes:·gc.alloc.rate 20000 thrpt 12 439.020 ± 18.241 MB/sec
>> UUIDBench.fromType3Bytes:·gc.alloc.rate.norm 20000 thrpt 12 264.022 ± 0.003 B/op
>>
>> The goal now is if to simplify the digest code and compare alternatives.
>
> I've run various tests and concluded that the `VarHandle`ized code is matching or improving upon the `Unsafe`-riddled code in `ByteArrayAccess`. I then went ahead and consolidated to use similar code pattern in `ByteArrayAccess` for consistency, which amounts to a good cleanup.
>
> With MD5 intrinsics disabled, I get this baseline:
>
> Benchmark (size) Mode Cnt Score Error Units
> UUIDBench.fromType3Bytes 20000 thrpt 12 1.245 ± 0.077 ops/us
> UUIDBench.fromType3Bytes:·gc.alloc.rate.norm 20000 thrpt 12 488.042 ± 0.004 B/op
>
> With the current patch here (not including #1933):
> Benchmark (size) Mode Cnt Score Error Units
> UUIDBench.fromType3Bytes 20000 thrpt 12 1.431 ± 0.106 ops/us
> UUIDBench.fromType3Bytes:·gc.alloc.rate.norm 20000 thrpt 12 408.035 ± 0.006 B/op
>
> If I isolate the `ByteArrayAccess` changes I'm getting performance neutral or slightly better numbers compared to baseline for these tests:
>
> Benchmark (size) Mode Cnt Score Error Units
> UUIDBench.fromType3Bytes 20000 thrpt 12 1.317 ± 0.092 ops/us
> UUIDBench.fromType3Bytes:·gc.alloc.rate.norm 20000 thrpt 12 488.042 ± 0.004 B/op
Thanks for the performance enhancement, I will take a look.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1855
More information about the security-dev
mailing list