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