Я измерял производительность java 11, встроенной в инструкции AES-NI, и с включенным NI через JAVA_TOOL_OPTIONS -> -XX:+UnlockDiagnosticVMOptions -XX:+UseAES -XX:+UseAESIntrinsics
я запускаю тесты, которые присутствуют в самом open jdk, через
java -server -jar target/jmh-jdk-microbenchmarks-1.0-SNAPSHOT.jar org.openjdk.bench.javax.crypto.full.AESBench.encrypt -p algorithm=AES/ECB/NoPadding
Когда я сравниваю результаты и вычисляю пропускную способность в ГБ / с для блоков кодирования 16k, я получаю около 20% пропускной способности по сравнению с тестом производительности openssl через openssl speed -evp aes-128-ecb
.
Не знаюКажется, что нет достойного сравнения / эталона, который описывает, какой процент максимальной производительности ожидать с jdk 11, но 20% кажется довольно низким.Кто-нибудь знает о сравнении (или может иметь представление о том, где я ошибаюсь, так как это стандартные инструменты для перфорирования, я думаю, что не так много можно изменить там).
Для справки тест openssl сообщает об этом:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-ecb 825652.24k 3185957.03k 5251673.77k 5827996.33k 6027457.88k 6031906.13k
Тест openjdk сообщает об этом
Benchmark (algorithm) (dataSize) (keyLength) (provider) Mode Cnt Score Error Units
AESBench.encrypt AES/ECB/NoPadding 16384 128 thrpt 40 84543.829 ± 9034.592 ops/s
Из чего я заключаю, что для блоков 16kПроизводительность здесь составляет 85000 * 16k, или около 1,4 ГБ / с, или около 20% от числа openssl.
Это ожидается или я делаю неправильные выводы?