RFR: 8296746: NativePRNG SecureRandom doesn't scale with threads [v2]

Alan Bateman alanb at openjdk.org
Thu Nov 17 12:53:22 UTC 2022


On Mon, 14 Nov 2022 16:37:41 GMT, Xubo Zhang <duke at openjdk.org> wrote:

>> NativePRNG SecureRandom doesn’t scale with number of threads. The performance starts dropping as we increase the number of threads. Even going from 1 thread to 2 threads shows significant drop. The bottleneck is the singleton RandomIO instance. Making the RandomIO ThreadLocal helps in removing this bottleneck.
>> 
>> Here are the jmh  thrpt ops/s data for SecureRandomBench.nextBytes, algorithm=NativePRNGNonBlocking, datasize=64, notshared:
>> 
>> <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:///C:/Users/xbzhang/AppData/Local/Temp/msohtmlclip1/01/clip.htm">
>> <link rel=File-List
>> href="file:///C:/Users/xbzhang/AppData/Local/Temp/msohtmlclip1/01/clip_filelist.xml">
>> 
>> 
>> 
>> </head>
>> 
>> <body link="#0563C1" vlink="#954F72">
>> 
>> 
>> 
>> #threads | singleton RandomIO | ThreadLocal RandomIO
>> -- | -- | --
>> 1 | 1269133 | 1279088
>> 2 | 862923 | 1362066
>> 3 | 819734 | 1630522
>> 4 | 809128 | 1614500
>> 5 | 821514 | 1594965
>> 6 | 808795 | 1545045
>> 7 | 783050 | 1499388
>> 8 | 787236 | 1470004
>> 
>> 
>> 
>> </body>
>> 
>> </html>
>
> Xubo Zhang has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Update src/java.base/unix/classes/sun/security/provider/NativePRNG.java
>   
>   Co-authored-by: Andrey Turbanov <turbanoff at gmail.com>

This proposal doesn't look good when there are short lived threads and problematic when using virtual threads as there will eventually be a RandomIO per task. Has there been any consideration given to a shared cache of RandomIO objects where the current threadId or a ThreadLocalRandom is used to select?

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

PR: https://git.openjdk.org/jdk/pull/11069


More information about the security-dev mailing list