On Fri, 12 Apr 2024 15:34:01 GMT, Oli Gillespie <ogilles...@openjdk.org> wrote:

> Increase buffer size in CipherInputStream from 512 bytes to 8192 bytes.
> 
> I have seen applications where this small buffer size significantly reduces 
> throughput, and I've even seen applications which use reflection to modify 
> the buffer size to work around the issue.
> 
> Using the existing `AESGCMCipherInputStream` benchmark, we can see that 8192 
> performs better in all the explored cases than 512. Sometimes other sizes 
> beat 8192, but it seems a good compromise of performance across 
> encrypt/decrypt and memory usage, plus it's in line with other JDK classes 
> like ChannelInputStream and FileInputStream.
> 
> ### Benchmark results
> 
> 
> make test 
> TEST=micro:org.openjdk.bench.javax.crypto.full.AESGCMCipherInputStream
> 
> 
> These are the results just comparing 512 and 8192. 8192 wins substantially 
> for encrypt of both data sizes, and wins noticeably for small decrypt data 
> size, while remaining roughly equal for large decrypt data size (why are the 
> error bars so wide there...?)
> 
> 
>  (benchmark)  (dataSize)        Score      Error  Units
> Before: (buffer size 512 bytes)
>    decrypt         16384    41800.053 +-  674.761  ops/s
>    decrypt       1048576      219.218 +- 4509.696  ops/s
>    encrypt         16384    59481.957 +- 2297.546  ops/s
>    encrypt       1048576     1030.822 +-   48.273  ops/s
> After: (buffer size 8192 bytes)
>    decrypt         16384    45023.512 +-  351.284  ops/s
>    decrypt       1048576      217.506 +- 4498.711  ops/s
>    encrypt         16384    71678.424 +- 1731.105  ops/s
>    encrypt       1048576     1562.457 +-   50.944  ops/s
> 
> 
> These are the full results including other candidate buffer sizes.
> 
> 
> AESGCMCipherInputStream.decrypt
>  (bufSize)  (dataSize)        Score      Error  Units
>        128       16384    36282.200 +- 3827.690  ops/s
>        512       16384    41800.053 +-  674.761  ops/s
>       2048       16384    44411.579 +- 2452.429  ops/s
>       8192       16384    45023.512 +-  351.284  ops/s
>      32768       16384    51004.362 +- 3147.855  ops/s
>     131702       16384    32111.911 +-  766.159  ops/s
>        128     1048576      200.096 +- 3972.338  ops/s
>        512     1048576      219.218 +- 4509.696  ops/s
>       2048     1048576      224.036 +- 4582.988  ops/s
>       8192     1048576      217.506 +- 4498.711  ops/s
>      32768     1048576      205.818 +- 4233.473  ops/s
>     131702     1048576      247.852 +- 5533.972  ops/s
> 
> 
> AESGCMCipherInputStream.encrypt
>  (bufSize)  (dataSize)        Score      Error  Units
>        128       16384    38352.717 +- 5030.671  o...

Please don't integrate until a Reviewer from the Security Group has reviewed 
this. Thanks.

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

PR Comment: https://git.openjdk.org/jdk/pull/18763#issuecomment-2052072764

Reply via email to