openjdk.ruOpenJDK на русском

JEP 207: Leverage CPU Instructions to Improve SHA Performance on SPARC

Использование инструкций процессора для повышения производительности SHA на SPARC

АвторJames Cheng
ОтветственныйVladimir Kozlov
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск8u40
Компонентhotspot / compiler
Обсуждениеhotspot dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
РецензентыMikael Vidstedt, Vladimir Kozlov
ОдобренMikael Vidstedt
Создан2014/06/06 20:35
Обновлён2014/10/06 22:14
Задача8046261

Аннотация

Повысить производительность безопасного хеширования SHA за счёт добавления интринсиков C2 для процессоров SPARC, в которых есть инструкции SHA.

Мотивация

Безопасное хеширование SHA широко используется в приложениях и протоколах, связанных с безопасностью. Оно также используется для подписи и проверки JAR-файлов. Мы должны упростить получение хорошей производительности без дополнительной настройки на процессорах, которые поддерживают инструкции SHA на аппаратном уровне.

Криптографические операции, такие как SHA, как правило, требуют больших вычислений и при частом выполнении могут стать узким местом производительности. Специализированная поддержка этих криптографических операций на уровне ISA даёт значительный прирост производительности по сравнению с обычным Java-кодом, скомпилированным JIT-компилятором. Использование инструкций SHA через нативную библиотеку даёт хороший прирост производительности, но накладные расходы JNI ограничивают выигрыш при небольших объёмах данных. Добавление интринсиков с инструкциями SHA позволит избежать накладных расходов JNI и даст лучшую производительность при любых объёмах данных.

Описание

Цель этого изменения — повысить производительность приложений, использующих SHA, без дополнительной настройки.

Компилятор HotSpot будет автоматически генерировать инструкции SHA, если процессор SPARC поддерживает такие инструкции. При необходимости это можно будет отключить с помощью флага (-XX:-UseSHA). Другие типы процессоров не затрагиваются.

Эта возможность будет реализована только в компиляторе C2 в Server VM.

Эта возможность применима, только если приложение настроено на использование провайдера безопасности SUN. Аппаратное ускорение достигается добавлением интринсиков (т. е. stub-подпрограмм) для таких методов, как sun.security.provider.SHA.implCompress, sun.security.provider.SHA2.implCompress, sun.security.provider.SHA5.implCompress и sun.security.provider.DigestBase.implCompressMultiBlock в случаях SHA/SHA2/SHA5.

Тестирование

Это изменение можно протестировать с помощью стандартных бенчмарков и наборов тестов для серверов приложений как на системах, которые поддерживают инструкции SHA процессоров SPARC, так и на системах, которые их не поддерживают, чтобы убедиться в отсутствии непредвиденных побочных эффектов.

Риски и допущения

Эта возможность применима, только если приложение настроено на использование провайдера SUN для операций SHA. Сейчас в Solaris по умолчанию провайдеры OracleUcrypto и SunPKCS11 стоят в списке провайдеров перед SUN. Предполагается, что для использования этой возможности пользователи могут изменить порядок списка провайдеров в файле свойств java.security, изменить конфигурационные файлы первых двух провайдеров так, чтобы они пропускали операции SHA, или явно запросить провайдер SUN в своём исходном коде.

Зависимости

Чтобы в большинстве случаев полностью реализовать потенциал повышения производительности, изменение компилятора HotSpot (JDK-8035968) зависит от изменения библиотеки безопасности (JDK-8035974). Изменение библиотеки помогает компилятору генерировать интринсики для циклов многоблочной обработки, которые используются, когда объём входных данных равен блоку или больше него (64 байта для SHA-1/SHA-224/SHA-256 или 128 байт для SHA-384/SHA-512).

Это изменение также зависит от изменений компилятора HotSpot (JDK-8035605), необходимых для генерации интринсиков многоблочной обработки.