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 > > > 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 > == buffer size = 512 (current) == > 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 > > == buffer size = 8192 (this PR) == > 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 > > == other candidates (rejected) == > buffer size = 128 > decrypt 16384 36282.200 +- 3827.690 ops/s > decrypt 1048576 200.096 +- 3972.338 ops/s > encrypt 16384 38352.717 +- 5030.671 ops/s > encrypt 1048576 671.195 +- 84.134 ops/s > buffer size = 2048 > decrypt 16384 44411.579 +- 2452.429 ops/s > decrypt 1048576 224.036 +- 4582.988 ops/s > encrypt 16384 65907.313 +- 2678.562 ops/s > encrypt 1048576 1232.242 +- 53.233 ops/s > buffer size = 32768 > decrypt 16384 51004.362 +- 3147.855 ops/s > decrypt 1048576 205.818 +- 4233.473 ops/s > encrypt 16384 58716.428 +- 269.514 ops/s > encrypt 1048576 1564.075 +- 43.732 ops/s > buffer size = 131702 > decrypt 16384 32111.911 +- 766.159 ops/s > decrypt 1048576 247.852 +- 5533.972 ops/s > encrypt 16384 34678.424 +- 1869.548 ops/s > encrypt 1048576 ... Looks reasonable to me as well, thanks. ------------- Marked as reviewed by shade (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/18763#pullrequestreview-2016643047