четверг, 13 августа 2015 г.

Об увеличении производительности работы Java 8 на мейнфрейме IBM z13

Корпорация IBM вкладывает воистину огромные усилия в развитие платформы Java. По сути данная платформа является одним из самых важных стратегических направлений для компании. Ключевое достоинство Java-приложений - это возможность немедленно отреагировать на увеличение производительности работы аппаратного обеспечения, используя Just-In-Time (JIT) компилятор, встроенный в последние релизы Java SDK. Ранее Суровый уже рассказывал о преимуществах, которые предоставляют мейнфреймы IBM и операционная система z/OS для работы ваших Java-приложений (в частности, мы уже видели, что связка z/OS + DB2 может работать в 3 раза быстрее связки Linux + Oracle), теперь же хочу поделиться относительно свежими данными.

Новые горизонты в росте производительности работы приложений открываются при совместном использовании возможностей IBM Java 8 и z13, таких как встроенный в новые процессоры SIMD - Single Instruction Multiple Data векторный движок, выполнение вычислений в несколько потоков на одном ядре (SMT) и улучшенная функция поддержки криптографии (CPACF - CP Assist for Cryptographic Function). Использование всех данных возможностей обеспечивает двукратный рост производительности на ядро (throughput-per-core) для приложений, активно использующих криптографию, и рост до 50% для остальных приложений.

Защищенный сервер приложений

На диаграмме приведены экспериментально полученные данные, демонстрирующие более чем двукратный рост производительности приложений, доступ к которым защищен с помощью SSL. В качестве платформы использовался сервер с 1-м CP и 4 zIIP. За базу взята производительность приложений при использовании IBM Java 7 SR4 на мейнфрейме zEC12.


Разница в производительности между Java 7 и Java 8 объясняется тем, что последние версии JVM используют SIMD и другие инструкции процессора z13. Крайний правый столбик отображает увеличение производительности, вызванное включением SMT на специализированных процессорах zIIP.

Java Store Inventory и Point-of-Sale

Приложение Java Store Inventory and Point of Sale Application представляет собой stand-alone программу, основанную на IT-инфраструктуре реально существующей ритейлинговой компании. Бенчмарк объединяет точку продаж, обработку онлайн-платежей и дата-майнинг. В коде используется множество возможностей языка, а так же функции компрессии и криптографии.


Диаграмма показывает увеличение производительности, достигаемое за счет использования платформой IBM Java 8 криптографических функций (CPACF), SIMD и SMT для zIIP на мейнфрейме z13. Наглядно виден рост производительности на 36% при использовании Java 8 по сравнению с Java 7 SR4 на мейнфрейме zEC12 и дополнительные 30% прироста производительности при работе Java 8 на z13 со включенным SMT.

Обработка бизнес-правил

Строительным блоком сервисов принятия решений являются бизнес-правила, которые обеспечивают управление и поддержку процесса, и аналитики, которые гарантируют правильность принимаемых решений.


Использование Java 8 для обработки бизнес-правил задействует преимущества векторных инструкций SIMD и SMT для zIIP на мейнфрейме z13, что позволяет достигнуть существенного прироста производительности в расчете на одно ядро процессора. На диаграмме видно, что использование Java 8 на мейнфрейме z13 без SMT дает прирост производительности на 66% по сравнению с использованием Java 7 SR4 на мейнфрейме zEC12. Дополнительные 37% прироста производительности достигаются за счет включения SMT на специализированных процессорах zIIP.


Бенчмарк интенсивного использования CPU

Бенчмарк интенсивного использования CPU (CPU-Intensive benchmark) - это набор приложений, которые написаны таким образом, чтобы по максимуму задействовать функции core Java, такие как компрессия, криптография, научные вычисления с плавающей точной, сериализация, графика и обработка XML. Данный бенчмарк разработан специально для тестирования производительности процессора и кэш/памяти.


На диаграмме можно наблюдать увеличение производительности на 61% на смешанных тестах при использовании IBM Java 8 и z13. Некоторые Java-приложения при этом демонстрируют больший прирост производительности (например, криптографические утилиты - примерно в 4 раза(!), что объясняется возможностью IBM Java 8 задействовать CPACF для ускорения используемого по-умолчанию Java Cryptography Engine). За исключением библиотеки для обработки MP3 (музыка на мейнфрейме - месье понимает толк в извращениях), приложения демонстрируют как минимум 30% рост производительности при использовании IBM Java 8 на мейнфрейме z13.

Немного об утилизации SIMD со стороны Java 8

Виртуальная машина Java 8 использует новые, встроенные в процессор z13, инструкции для библиотек и функций перечисленных ниже. Данные инструкции были задействованы во всех рассмотренных нами бенчмарках, при этом специфические идиомы и операторы работали быстрее в 2 - 60 раз. Степень повышения производительности реальных Java-приложений зависит от того, как часто в коде применяются данные идиомы и операторы.

java.lang.String:
- compareTo
- compareToIgnoreCase
- contains
- contentEquals
- equals
- indexOf
- lastIndexOf
- regionMatches
- toLowerCase
- toUpperCase
- getBytes


java.util.Arrays:
- equals (primitive types)


String encoding converters:
(для ISO8859-1, ASCII, UTF8 и UTF16)
- encode (char2byte)
- decode (byte2har)


Auto SIMD:
Simple loops
(например, перемножение матриц)


Auto SIMD - это новая оптимизация Just-In-Time (JIT) компилятора, добавленная в IBM Java 8, которая прозрачно увеличивает скорость выполнения простых циклов (simple scalar loops) за счет использования векторных операций на z13. Например, умножение матриц осуществляется на 60% быстрее, если JIT задействует SIMD-инструкции.

Выводы

В данной статье мы рассмотрели как использование средой исполнения IBM Java 8 новых аппаратных возможностей мейнфрейма IBM z13 влияет на производительность типичных приложений. Из приведенных диаграмм видно, что совместное использование SMT на специализированных процессорах zIIP, SIMD-инструкций и CPACF позволяет достичь более чем двукратного роста производительности только за счет обновления Java и аппаратной платформы. Хорошая работа, не так ли?

Фактические данные взяты из статьи Clark Goodrich'а, Marcel Mitran'а и Bob St John'а, размещенной на сайте mainframeinsights.com.

Понравилось сообщение - подпишитесь на блог

Комментариев нет:

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!