<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang=DE link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Well yes, was just wondering why the options had to be enabled explicitely and why -XX:+UnlockDiagnosticVMOptions was used. But I guess that was just unrelated info.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>BTW: does the C2 warmup Problem strike here again maybe?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Gruss</p><p class=MsoNormal>Bernd</p><p class=MsoNormal>-- <br>http://bernd.eckenfels.net</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='border:none;padding:0cm'><b>Von: </b><a href="mailto:anthony.scarpino@oracle.com">Anthony Scarpino</a><br><b>Gesendet: </b>Montag, 3. Dezember 2018 21:37<br><b>An: </b><a href="mailto:ecki@zusammenkunft.net">Bernd Eckenfels</a>; <a href="mailto:security-dev@openjdk.java.net">security-dev@openjdk.java.net</a><br><b>Betreff: </b>Re: AES ctr benchmark performance</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Very slow.. Roughly 181k ops/sec vs 6100 ops/sec, for 16k datasize.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>As far as why there is a switch, mostly debugging or possible bugs in </p><p class=MsoNormal>hotspot that cause the intrinsic to break.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Tony</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 12/3/18 12:27 PM, Bernd Eckenfels wrote:</p><p class=MsoNormal>> Quick Question, why did you Need to switch it on and out of curiosity </p><p class=MsoNormal>> how do the times look like when you switch NI off?</p><p class=MsoNormal>> </p><p class=MsoNormal>> Greetings</p><p class=MsoNormal>> </p><p class=MsoNormal>> Bernd</p><p class=MsoNormal>> </p><p class=MsoNormal>> -- </p><p class=MsoNormal>> http://bernd.eckenfels.net</p><p class=MsoNormal>> </p><p class=MsoNormal>> *Von: *Anthony Scarpino <mailto:anthony.scarpino@oracle.com></p><p class=MsoNormal>> *Gesendet: *Montag, 3. Dezember 2018 21:13</p><p class=MsoNormal>> *An: *Kasper Janssens <mailto:Kasper.Janssens@wdc.com>; </p><p class=MsoNormal>> security-dev@openjdk.java.net <mailto:security-dev@openjdk.java.net></p><p class=MsoNormal>> *Betreff: *Re: AES ctr benchmark performance</p><p class=MsoNormal>> </p><p class=MsoNormal>> Hi,</p><p class=MsoNormal>> </p><p class=MsoNormal>> That is how I read it, but when I've done the test it's closer to 55%.</p><p class=MsoNormal>> </p><p class=MsoNormal>> But openssl speed and jmh are not comparable. Openssl is only running</p><p class=MsoNormal>> </p><p class=MsoNormal>> through it's algorithm, while jmh is running through the VM and java</p><p class=MsoNormal>> </p><p class=MsoNormal>> byte code. jmh has to do more work outside of pure crypto ops than openssl.</p><p class=MsoNormal>> </p><p class=MsoNormal>> Tony</p><p class=MsoNormal>> </p><p class=MsoNormal>> On 12/3/18 12:09 AM, Kasper Janssens wrote:</p><p class=MsoNormal>> </p><p class=MsoNormal>> > Hello,</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > I've been measuring the performance of the java 11 built in AES-NI</p><p class=MsoNormal>> </p><p class=MsoNormal>> > instructions and, with NI switched on through JAVA_TOOL_OPTIONS =</p><p class=MsoNormal>> </p><p class=MsoNormal>> > ‘-XX:+UnlockDiagnosticVMOptions -XX:+UseAES -XX:+UseAESIntrinsics’.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > I run the benchmarks that are present in the open jdk itself through</p><p class=MsoNormal>> </p><p class=MsoNormal>> > ‘java -server -jar target/jmh-jdk-microbenchmarks-1.0-SNAPSHOT.jar</p><p class=MsoNormal>> </p><p class=MsoNormal>> > org.openjdk.bench.javax.crypto.full.AESBench.encrypt -p</p><p class=MsoNormal>> </p><p class=MsoNormal>> > algorithm=AES/CTR/NoPadding’.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > When I compare the results and calculate the throughput in GB/s, for 16k</p><p class=MsoNormal>> </p><p class=MsoNormal>> > encoding blocks, I get about 40% of the throughput when compared to the</p><p class=MsoNormal>> </p><p class=MsoNormal>> > openssl performance test through ‘openssl speed -evp aes-128-ctr’.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > I don't seem to find a decent comparison/benchmark that describes which</p><p class=MsoNormal>> </p><p class=MsoNormal>> > percentage of the maximum performance to expect with jdk 11, but 40 %</p><p class=MsoNormal>> </p><p class=MsoNormal>> > seems rather low. Does anybody know of a comparison (or might have an</p><p class=MsoNormal>> </p><p class=MsoNormal>> > idea where I go wrong, because, as these are off the shelf perf tools I</p><p class=MsoNormal>> </p><p class=MsoNormal>> > would think not a lot can be tweaked there).</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > For reference, the openssl test reports this:</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > The 'numbers' are in 1000s of bytes per second processed.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > type 16 bytes 64 bytes 256 bytes 1024 bytes 8192</p><p class=MsoNormal>> </p><p class=MsoNormal>> > bytes 16384 bytes</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > aes-128-ctr 583576.76k 1907072.21k 4144141.40k 5612174.68k</p><p class=MsoNormal>> </p><p class=MsoNormal>> > 6252751.53k 6258371.24k</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > So, for 16k blocks, 6258371k bytes per second</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > The openjdk benchmark reports this</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > Benchmark (algorithm) (dataSize) (keyLength)</p><p class=MsoNormal>> </p><p class=MsoNormal>> > (provider) Mode Cnt Score Error Units</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > AESBench.encrypt AES/CTR/NoPadding 16384</p><p class=MsoNormal>> </p><p class=MsoNormal>> > 128 thrpt 100 168066.873 ± 488.873 ops/s</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > Out of which I conclude that, for 16k blocks, the perf here is 168066 *</p><p class=MsoNormal>> </p><p class=MsoNormal>> > 16k or about 2689056k bytes per second or about 40 % of the openssl</p><p class=MsoNormal>> </p><p class=MsoNormal>> > number, taking some liberty with rounding the numbers.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > Is that expected or am I drawing the wrong conclusions? Or am I missing</p><p class=MsoNormal>> </p><p class=MsoNormal>> > something?</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > When I print the options, the jvm reports that the AES intrinsics are</p><p class=MsoNormal>> </p><p class=MsoNormal>> > being used :</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > java -XX:+PrintFlagsFinal | grep -i AES</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > intx MaxBCEAEstimateLevel =</p><p class=MsoNormal>> </p><p class=MsoNormal>> > 5 {product} {default}</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > intx MaxBCEAEstimateSize =</p><p class=MsoNormal>> </p><p class=MsoNormal>> > 150 {product} {default}</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > bool UseAES =</p><p class=MsoNormal>> </p><p class=MsoNormal>> > true {product} {default}</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > System specs : Ubuntu 18.04</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > openjdk version "10.0.2" 2018-07-17</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed</p><p class=MsoNormal>> </p><p class=MsoNormal>> > mode)</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal>> > Kasper</p><p class=MsoNormal>> </p><p class=MsoNormal>> ></p><p class=MsoNormal>> </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>