Apache Mnemonic раскроет потенциал Optane

20 Фев 2017

Apache Mnemonic раскроет потенциал Optane

Революционные изменения в аппаратной реализации систем хра­не­ния дан­ных неизбежно отражаются на архитектуре про­грам­мно­го обес­пе­че­ния. Apache Mnemonic, Java-фреймворк с от­кры­тым ис­ход­ным кодом, ре­а­ли­зу­ет библиотеку ввода-вывода, оптимизированную для поддержки NVMe уст­ройств и энер­го­не­за­висимой памяти Op­tane. Сходство с анон­си­ро­ван­ной тех­но­ло­ги­ей Intel Apache Pass, следует хотя бы уже из наз­ва­ния про­дук­та.

 

Особенности реализации

Встроенная оптимизация для процессоров с поддержкой векторных расширений AVX и систем с NUMA-то­по­ло­гией, в идеале, должны избавить разработчиков программного обеспечения, использующих данный фреймворк, от необходимости применения интерфейса JNI (Java Native Interface) и системно-зависимых «заплаток», ли­ша­ю­щих Java-приложения их основных преимуществ, в том числе кроссплатформенности.

Сравнительная диаграмма позволяет оценить латентность при доступе к различным видам оперативных и энергонезависимых запоминающих устройств среднестатистической современной платформы
Рис 1. Сравнительная диаграмма позволяет оценить латентность при доступе к различным видам оперативных и энергонезависимых запоминающих устройств среднестатистической современной платформы

Вместе с тем, речь идет не только об очередном повышении производительности или устранении отдельных недостатков, присущих «дедушке» java.nio. Событием, отразившимся на всех уровнях программно-аппаратной инфраструктуры является возможность прямого размещения энергонезависимой памяти (persistent memory) в адресном пространстве платформы.

Hardware: режимы Apache Pass persistent memory

Рассмотрим базовые варианты модели хранения данных, согласно концепции Intel Apache Pass.

  1. Memory mode. В этом режиме оперативная память (DRAM) выполняет роль быстродействующего кеширующего буфера между процессором и сравнительно медленной энергонезависимой памятью.
  2. Storage mode. Режим накопителя, поддерживаемого драйвером как блоковое устройство.
  3. Application direct mode. В этом варианте декларируется факт наличия двух видов памяти: быстрой оперативной и сравнительно медленной энергонезависимой. Оптимизация производительности при условии сохранности данных здесь переводится в зону ответственности приложений. Оба вида памяти декларируются и доступны в адресном пространстве.

Первый и второй варианты делают акцент на совместимость, предоставляя или даже эмулируя стандартные уст­рой­ства (оперативную память и накопители) и скрывая при этом новые физические сущности (энер­го­не­за­ви­си­мую память, включенную в адресное пространство).

Третий вариант наиболее сложен с точки зрения программной поддержки, но позволяет оптимизировать стра­те­гию хранения данных, предоставив информацию об истинной физической реализации mass storage подсистемы на все уровни программно-аппаратной инфраструктуры, с расчетом на ее готовность к поддержке новых типов запоминающих устройств. Это делает возможной реализацию концепции in place computing, подразумевающей непосредственный доступ приложения к физически ресурсам подсистемы энергонезависимой памяти.

Для сравнения вспомним консервативный вариант: файлы, отображенные на память (java.nio.MappedByteBuffer). Здесь объектом, доступным в адресном пространстве является DRAM, при этом программно, с применением ме­ха­низ­ма своппинга создается только иллюзия тождественности диапазона оперативной памяти и заданной области mass storage устройства.

Software: persistent memory требует перемен

Устройства, выполненные в виде NVDIMM и подключаемые к шине DRAM, а также ряд NVMe накопителей, кон­сер­ва­тив­ных по форме, но революционных по содержанию, совмещающих интерфейс PCI Express и Direct Memory In­ter­face, как альтернативу блоковому доступу, создают иную парадигму хранения данных. Подсистему управления памятью, входящую в состав виртуальной машины JVM, а также архитектуру фреймворков, обслуживающих mass storage функции, ждут радикальные перемены.

Устройства энергонезависимой памяти, размещенные в адресном пространстве, непосредственно доступны виртуальной машине JVM и используются при размещении объектов, создаваемых приложениями
Рис 2. Устройства энергонезависимой памяти, размещенные в адресном пространстве, непосредственно доступны виртуальной машине JVM и используются при размещении объектов, создаваемых приложениями

Если запоминающая матрица накопителя, представима в виде объекта, находящегося в физическом адресном пространстве платформы, как диапазон memory-mapped IO, то такой объект или его фрагмент, может быть не­по­сред­ствен­но подключен в виртуальное адресное пространство приложения. Для этого, ОС должна установить содержимое нескольких дескрипторов, отвечающих за соответствие между виртуальным и физическим адресами.

Для сравнения, чтение данных с блокового устройства, состоящее из операции передачи команды накопителю, пересылки данных (включая транзитные буферы) и сигнализацию о завершении посредством запроса на пре­ры­ва­ние, в общей сложности займет значительно больше времени, даже если речь о накопителе с интерфейсом NVMe.

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

Не ограничиваясь улучшением производительности, связанным с новыми методами физической доставки данных приложению, разработчиками минимизируются затраты времени, обусловленные сохранением и вос­ста­нов­ле­ни­ем состояния Java-объектов (операции, известные как serialization, deserialization). Снижена нагрузка на механизм Garbage Collection (GC), асинхронно работающий в фоновом режиме и автоматически освобождающий не­ис­поль­зу­е­мую память. Вспомним, что GC часто является причиной пауз в работе JVM, момент возникновения и длительность которых в общем случае не прогнозируемы.

Накопители, фреймворки, бенчмарки

Изменения в технологиях хранения данных и эволюция программных интерфейсов потребуют особого внимания разработчиков бенчмарок. Несколько упрощая, можно сказать, что фреймворк Apache Mnemonic является «про­дви­ну­тым» функциональным аналогом популярной технологии ввода-вывода java.nio, на основе которой ре­а­ли­зо­ва­на утилита измерения производительности NIOBench, один из проектов тестовой лаборатории IC Book.

Концепция каналов и буферов, лежащая в основе java.nio, оперирует абстракциями, набор которых обусловлен клас­сической архитектурой mass storage подсистемы: каналы соответствуют накопителям (обычно блоковым уст­рой­ствам), буферы организуются в оперативной памяти. Ввод-вывод реализуется как двунаправленная передача информации между каналами и буферами.

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

В системах, использующих Intel Optane (и не только в них), в случае размещения энергонезависимой памяти в ад­рес­ном пространстве платформы, информация в ряде случаев может быть обработана на месте своего ис­ход­но­го размещения, без копирования в ОЗУ. Измерение производительности такой подсистемы сходно с измерением производительности оперативной памяти, что повлияет не только на численные значения бенчмарок, но и сам подход к оценке быстродействия mass storage подсистемы.

Своеобразное компромиссное решение допускается в презентации Microsoft. Изменение внутренней реализации процедур ОС API, обслуживающих файлы, отображенные на память, при сохранении их программного ин­тер­фей­са, теоретически позволит существующим приложениям, использующим данный API, получить некоторую при­бав­ку в скорости. Вместе с тем, титул Optane Ready, неизбежно потребует редизайна архитектуры программных комплексов, с учетом всех преимуществ persistent memory.

Вместо послесловия

Несмотря на отсутствие технологии хранения данных, одновременно обладающей производительностью DRAM и энергонезависимостью, а также продолжающийся дуализм в физической реализации запоминающих устройств, унификацию программной модели доступа к двум видам памяти уже сегодня можно признать свершившимся фак­том. Речь не только модулях NVDIMM но и некоторых NVMe накопителях, позволяющих размещать диапазон энер­го­не­за­ви­си­мой памяти в адресном пространстве платформы.

Фреймворк Apache Mnemonic предлагает методы взаимодействия с модулями памяти Intel Apache Pass и другими запоминающими устройствами обоих рассмотренных типов: прямо адресуемыми и блоковыми, эффективно ре­а­ли­зуя потенциал новых аппаратных средств, при сохранении возможности эволюционного развития систем хра­не­ния данных.

Теги: