On Fri, 3 Nov 2023 04:08:27 GMT, Anthony Scarpino <ascarp...@openjdk.org> wrote:
> Hi, > > I need a review for a new internal buffer class called AEADBufferStream. > AEADBufferStream extends ByteArrayOutputStream, but eliminates some data > checking and copying that are not necessary for what GaloisCounterMode.java > and ChaCha20Cipher.java need. > > The changes greatest benefit is with decryption operations. > ChaCha20-Poly1305 had larger performance gains by adopting similar techniques > that AES/GCM already uses. > > The new buffer shows up to 21% bytes/sec performance increase for decryption > for ChaCha20-Poly1305 and 12% for AES/GCM. 16K data sizes saw a memory usage > reduction of 46% with and 83% with ChaCha20-Poly1305. These results come > from the JMH tests updated in this request and memory usage using the JMH gc > profile gc.alloc.rate.norm entry > > thanks > > Tony Noteworthy perf data (ops/sec) <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 15"> <link id=Main-File rel=Main-File href="file:////Users/ascarpin/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip.htm"> <link rel=File-List href="file:////Users/ascarpin/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_filelist.xml"> </head> <body link="#0563C1" vlink="#954F72"> Benchmark | dataMethod | dataSize | AEADBuffer | jdk-dev | Diff -- | -- | -- | -- | -- | -- CC20P1305ByteBuffer.decrypt | direct | 1024 | 577804.81 | 549630.383 | 105.13% CC20P1305ByteBuffer.decrypt | direct | 1500 | 424441.663 | 401452.037 | 105.73% CC20P1305ByteBuffer.decrypt | direct | 4096 | 186333.196 | 152909.993 | 121.86% CC20P1305ByteBuffer.decrypt | direct | 16384 | 49698.562 | 41966.387 | 118.42% CC20P1305ByteBuffer.decrypt | heap | 1024 | 586145.31 | 514277.384 | 113.97% CC20P1305ByteBuffer.decrypt | heap | 1500 | 429055.718 | 380859.773 | 112.65% CC20P1305ByteBuffer.decrypt | heap | 4096 | 179807.069 | 179241.327 | 100.32% CC20P1305ByteBuffer.decrypt | heap | 16384 | 51096.478 | 51097.68 | 100.00% CC20P1305ByteBuffer.decryptMultiPart | direct | 1024 | 553804.884 | 506750.657 | 109.29% CC20P1305ByteBuffer.decryptMultiPart | direct | 1500 | 399307.809 | 365691.011 | 109.19% CC20P1305ByteBuffer.decryptMultiPart | direct | 4096 | 180940.646 | 165152.892 | 109.56% CC20P1305ByteBuffer.decryptMultiPart | direct | 16384 | 49117.754 | 40808.57 | 120.36% CC20P1305ByteBuffer.decryptMultiPart | heap | 1024 | 567976.828 | 539087.765 | 105.36% CC20P1305ByteBuffer.decryptMultiPart | heap | 1500 | 415070.529 | 400061.343 | 103.75% CC20P1305ByteBuffer.decryptMultiPart | heap | 4096 | 180878.684 | 178758.204 | 101.19% CC20P1305ByteBuffer.decryptMultiPart | heap | 16384 | 48541.737 | 46645.72 | 104.06% AESGCMByteBuffer.decrypt | heap | 1024 | 1826361.53 | 1796033.97 | 101.69% AESGCMByteBuffer.decrypt | heap | 1500 | 1245406.42 | 1109318.44 | 112.27% AESGCMByteBuffer.decrypt | heap | 4096 | 641359.437 | 617315.646 | 103.89% AESGCMByteBuffer.decrypt | heap | 16384 | 247719.061 | 238448.044 | 103.89% AESGCMByteBuffer.decryptMultiPart | direct | 1024 | 1574668.85 | 1483599.15 | 106.14% AESGCMByteBuffer.decryptMultiPart | direct | 1500 | 1172906.6 | 1100561.62 | 106.57% AESGCMByteBuffer.decryptMultiPart | direct | 4096 | 545868.754 | 513626.344 | 106.28% AESGCMByteBuffer.decryptMultiPart | direct | 16384 | 170901.637 | 152173.375 | 112.31% AESGCMByteBuffer.decryptMultiPart | heap | 1024 | 1889488.77 | 1759824.14 | 107.37% AESGCMByteBuffer.decryptMultiPart | heap | 1500 | 1355897.08 | 1289243.83 | 105.17% AESGCMByteBuffer.decryptMultiPart | heap | 4096 | 650425.638 | 622200.295 | 104.54% AESGCMByteBuffer.decryptMultiPart | heap | 16384 | 235059.195 | 226745.378 | 103.67% </body></html> Memory reduction (bytes / op) <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 15"> <link id=Main-File rel=Main-File href="file:////Users/ascarpin/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip.htm"> <link rel=File-List href="file:////Users/ascarpin/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_filelist.xml"> </head> <body link="#0563C1" vlink="#954F72"> Benchmark | (dataMethod) | (dataSize) | AEADBuffer | jdk-dev | Reduction -- | -- | -- | -- | -- | -- CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | direct | 1024 | 3600.006 | 5704.006 | 36.89% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | direct | 1500 | 4080.008 | 6664.008 | 38.78% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | direct | 4096 | 6672.018 | 28280.022 | 76.41% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | direct | 16384 | 18960.069 | 102040.082 | 81.42% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | heap | 1024 | 2544.006 | 3608.007 | 29.49% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | heap | 1500 | 2544.008 | 3608.009 | 29.49% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | heap | 4096 | 2544.019 | 3608.019 | 29.49% CC20P1305ByteBuffer.decrypt:gc.alloc.rate.norm | heap | 16384 | 2544.068 | 3608.068 | 29.49% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 1024 | 3688.006 | 9352.007 | 60.56% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 1500 | 4168.009 | 11032.009 | 62.22% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 4096 | 6760.019 | 24232.021 | 72.10% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 16384 | 19048.07 | 114344.084 | 83.34% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 1024 | 4200.006 | 6728.006 | 37.57% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 1500 | 4920.008 | 7208.008 | 31.74% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 4096 | 8808.019 | 13928.019 | 36.76% CC20P1305ByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 16384 | 27240.071 | 44648.074 | 38.99% CC20P1305Bench.decrypt:gc.alloc.rate.norm | | 1024 | 2544.006 | 3608.007 | 29.49% CC20P1305Bench.decrypt:gc.alloc.rate.norm | | 1500 | 2544.008 | 3608.009 | 29.49% CC20P1305Bench.decrypt:gc.alloc.rate.norm | | 4096 | 2544.02 | 3608.019 | 29.49% CC20P1305Bench.decrypt:gc.alloc.rate.norm | | 16384 | 2544.067 | 3608.068 | 29.49% CC20P1305Bench.decryptMultiPart:gc.alloc.rate.norm | | 1024 | 4200.006 | 6728.006 | 37.57% CC20P1305Bench.decryptMultiPart:gc.alloc.rate.norm | | 1500 | 4920.008 | 7208.008 | 31.74% CC20P1305Bench.decryptMultiPart:gc.alloc.rate.norm | | 4096 | 8808.019 | 13928.019 | 36.76% CC20P1305Bench.decryptMultiPart:gc.alloc.rate.norm | | 16384 | 27240.07 | 44648.073 | 38.99% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 1024 | 3240.002 | 4248.002 | 23.73% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 1500 | 4344.003 | 5832.003 | 25.51% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 4096 | 6312.006 | 10392.007 | 39.26% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | direct | 16384 | 41704.021 | 58072.023 | 28.19% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 1024 | 1704.002 | 2184.002 | 21.98% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 1500 | 2040.003 | 2760.003 | 26.09% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 4096 | 3240.005 | 5256.006 | 38.36% AESGCMByteBuffer.decryptMultiPart:gc.alloc.rate.norm | heap | 16384 | 9328.015 | 17488.016 | 46.66% AESGCMBench.decryptMultiPart:gc.alloc.rate.norm | | 1024 | 1736.002 | 2216.002 | 21.66% AESGCMBench.decryptMultiPart:gc.alloc.rate.norm | | 1500 | 2016.002 | 2848.002 | 29.21% AESGCMBench.decryptMultiPart:gc.alloc.rate.norm | | 4096 | 3272.005 | 5288.005 | 38.12% AESGCMBench.decryptMultiPart:gc.alloc.rate.norm | | 16384 | 9304.014 | 17464.015 | 46.72% </body> </html> ------------- PR Comment: https://git.openjdk.org/jdk/pull/16487#issuecomment-1823710452