On Fri, 20 Nov 2020 00:14:55 GMT, Valerie Peng <valer...@openjdk.org> wrote:

>> Current `sun/security/provider/SHA2` implementation is written with lots of 
>> small method invocations on the fastpath in `implCompress0`. Normally it 
>> does not matter much, because compilers are able to inline through it, and 
>> then some compilers even intrinsify the entire `implCompress0`.
>> 
>> But it comes as major downside for platforms that do not have SHA2 
>> intrinsics, or those VM configs that blindly interpret the bytecode. Zero, 
>> for example, keeps re-entering the small methods when computing SHA2 digests 
>> during jmod/jlink generation during the build, and spends significant time 
>> there. Linux x86_64 Zero fastdebug builds **improve from 18.5 minutes to 
>> 11.0 minutes** with this change, which is a major win for development 
>> experience.
>> 
>> Note that SHA1 is already written in similar streamlined style. SHA5 is 
>> written with helper functions. This patch moves SHA2 to be closer to SHA1 
>> style-wise.
>> 
>> Performance improvement in interpreted modes is substantial, about 4x..5x, 
>> while compiler modes are not affected. As measured by: `make test 
>> TEST="micro:MessageDigests" 
>> MICRO="FORK=1;ITER=5;WARMUP_ITER=5;WARMUP_TIME=1s;TIME=1s;OPTIONS=-p 
>> digesterName=sha256 -p provider=SUN"`
>> 
>> Before:
>> 
>> Benchmark              (digesterName)  (length)  (provider)   Mode  Cnt     
>> Score   Error    Units
>> 
>> # Server, Default
>> MessageDigests.digest          sha256        64         SUN  thrpt    5  
>> 8585.532 ± 219.896  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5  
>> 1545.994 ±  73.325  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5   
>> 110.550 ±   1.576  ops/ms
>> 
>> # Server, -XX:+UnlockDiagnosticVMOptions -XX:-UseSHA256Intrinsics
>> MessageDigests.digest          sha256        64         SUN  thrpt    5  
>> 1426.117 ±  48.320  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5   
>> 188.779 ±   0.097  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5    
>> 12.512 ±   1.371  ops/ms
>> 
>> # Server, -Xint
>> MessageDigests.digest          sha256        64         SUN  thrpt    5     
>> 6.143 ±   0.126  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5     
>> 0.769 ±   0.008  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5     
>> 0.051 ±   0.001  ops/ms
>> 
>> # Zero
>> MessageDigests.digest          sha256        64         SUN  thrpt    5     
>> 5.358 ±   0.664  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5     
>> 0.686 ±   0.003  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5     
>> 0.046 ±   0.001  ops/ms
>> 
>> After:
>> 
>> Benchmark              (digesterName)  (length)  (provider)   Mode  Cnt     
>> Score   Error     Units
>> 
>> # Server, Default
>> MessageDigests.digest          sha256        64         SUN  thrpt    5  
>> 8564.689 ± 1459.552  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5  
>> 1548.582 ±   78.888  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5   
>> 110.800 ±    0.057  ops/ms
>> 
>> # Server, -XX:+UnlockDiagnosticVMOptions -XX:-UseSHA256Intrinsics
>> MessageDigests.digest          sha256        64         SUN  thrpt    5  
>> 1471.399 ±   66.622  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5   
>> 186.297 ±    0.127  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5    
>> 12.448 ±    0.099  ops/ms
>> 
>> # Server, -Xint
>> MessageDigests.digest          sha256        64         SUN  thrpt    5    
>> 27.046 ±    0.304  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5     
>> 3.538 ±    0.060  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5     
>> 0.238 ±    0.002  ops/ms
>> 
>> # Zero
>> MessageDigests.digest          sha256        64         SUN  thrpt    5    
>> 26.696 ±    0.968  ops/ms
>> MessageDigests.digest          sha256      1024         SUN  thrpt    5     
>> 3.655 ±    0.024  ops/ms
>> MessageDigests.digest          sha256     16384         SUN  thrpt    5     
>> 0.241 ±    0.002  ops/ms
>> 
>> Addtional testing:
>>  - [x] `jdk/security` with Linux x86_64 server fastdebug
>>  - [x] `jdk/security` with Linux x86_64 zero fastdebug
>
> Changes look good.

Thank you, @valeriepeng. I am not sure what is the review policy for this code, 
should I wait for another reviewer?

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

PR: https://git.openjdk.java.net/jdk/pull/1283

Reply via email to