Необходимость работы с неведомыми прежде объемами данных стимулирует появление качественно новых технологий хранения, используемых на разных архитектурных микро- и макроуровнях [1, 2]. И совсем недавно в связи с появлением твердотельных накопителей (Solid State Drive, SSD) в дополнение к этим уровням возникли решения, которые стоит отнести к «среднему уровню», ставящие целью объединить отдельные модули флэш-памяти, распределенные по серверам или по кластерам, чтобы открыть возможность для работы с объемами, превосходящими емкость одного модуля.

Нынешнюю степень развития таких систем хранения справедливо будет назвать начальной, поскольку серьезные исследования в этом направлении начались лишь три – пять лет назад и сосредоточились в ограниченном числе университетов и исследовательских центров. Для предварительной оценки происходящего достаточно обобщить сведения по трем проектам: CORFU (Microsoft Research), QuickSAN (Калифорнийский университет Сан Диего) и BlueDBM (Массачусетский технологический институт).

На протяжении предшествующих двадцати лет разработка соответствующего ПО ограничивалась созданием многочисленных алгоритмов, реализуемых на уровне трансляции флэш-памяти (Flash Translation Layer, FTL), который логически ниже уровня интеграции. Алгоритмы FTL создаются для того, чтобы адаптировать физику флэш-памяти на чипах NAND — c одноуровневыми (Single Level Cell, SLC) и многоуровневыми ячейками (Multi Level Cell, MLC) — к унаследованным файловым системам, созданным в расчете на технические особенности обычных жестких дисков. Алгоритмы FTL встраиваются в компактные и быстродействующие чипы NAND, взаимодействующие с файловыми системами на основе секторов, изначально предназначенными для жестких дисков, например FAT, NTFS и другими. Для этой цели осуществляется эмуляция работы флэш-памяти, чипы которой имеют форм-фактор традиционного блочного дискового устройства. Таким образом, открывается возможность для работы с различными накопителями на NAND, как с обычными дисками. Средствами FTL решается проблема совместимости, однако, пока основой для хранения данных оставались вращающиеся диски с неизбежными для них задержками и низкой скоростью передачи данных, первоочередной задачей разработчиков систем хранения было агрегирование дисков, позволяющее компенсировать этот недостаток. С переходом на SSD, подключаемым по скоростным каналам PCIe, ситуация развернулась на 180 градусов — производительность системы хранения стала намного выше потребности одного сервера, и возникла обратная задача: теперь необходимо найти способы распределения ее ресурсов между серверами. Именно эти новые возможности флэш-памяти раскрываются в названных выше проектах.

Из трех проектов наиболее прост CORFU (Cluster of Raw Flash Units) — кластер из серверов с памятью на простых флэш-накопителях, объединенных сетью Gigabit Ethernet. Основным средством для интеграции SSD служит программа распределенного доступа Shared Log, поддерживающая на каждом из серверов таблицу Corfu library, отражающую состояние флэш-памяти (наличие заполненных и свободных блоков памяти). API, реализованный в рамках CORFU, позволяет приложениям пополнять память, читать из нее, убирать мусор и выполнять некоторые служебные действия. По существу, CORFU позволяет создавать распределенную файловую систему, однако не решает проблемы задержки, кроме того, требуются специализированные приложения.

Проект QuickSAN представляет собой вариацию на тему классической сети хранения (Storage Area Network, SAN), адаптированной к технологическим особенностям SSD. С появлением SSD латентность обращений к носителю сократилась на порядки: если в жестких дисках она измерялась десятками миллисекунд, то теперь варьируется в пределах десятков микросекунд. Объединение таких устройств традиционными технологиями SAN лишено смысла  —  между приложениями и удаленными данными размещаются файловые системы и блочные серверы, создающие непомерно большие задержки. В QuickSAN их нет по той причине, что имеется специальный сетевой адаптер, интегрированный непосредственно в SSD, причем так, что модули SSD могут напрямую взаимодействовать между собой, а приложения — пользоваться локальными или глобальными данными без дополнительных обращений к операционной системе. QuickSAN ускоряет работу SAN за счет двух встроенных механизмов. Первый реализует транспортировку данных с аппаратным ускорением и низкой латентностью, встроен непосредственно в SSD и основан на 10-Gigabit Ethernet. Второй позволяет обходить операционную систему, но при этом обеспечивает необходимую защиту данных.

Проект BlueDBM наиболее радикален, но и у него есть свои исторические корни — его можно рассматривать как современную вариацию на тему «память со счетом» (Computational RAM), однако теперь речь идет не об оперативной памяти RAM, а о флэш-памяти. Computational RAM еще называют «процессором в памяти» (Processor-In-Memory, PIM), что точнее. Очевидно, приближение центрального процессора к памяти уменьшает латентность и увеличивает пропускную способность, однако на практике разработчики пока далеко не продвинулись по направлению к PIM — из множества начинаний наибольшую известность получил проект Intelligent RAM, или IRAM из Университета Беркли. Идея Computational RAM не получила широкого распространения в связи с быстрым прогрессом интерфейсов ввода-вывода, но во втором десятилетии XXI века о ней вспомнили благодаря особенностям SSD. Корпорация Samsung строит свои решения PIM на базе процессора ARM, но в целях интеграции флэш-памяти представляется более перспективным использовать FPGA совместно с NAND — на одной программируемой матрице можно собрать и центральный процессор, и полнофункциональный контроллер. Именно по такому пути пошли разработчики BlueDBM. Как показано на рис. 1, распределенная система хранения на флэш-памяти состоит из идентичных узлов (рис. 2), содержащих массив флэш-памяти и управляющую часть из ПК и FPGA, соединеных между собой шиной PCIe. Узлы флэш-памяти объединены двумя сетями: специализированной быстрой, связывающей непосредственно модули памяти, и Ethernet, связывающей между собой ПК. Первая сеть и составляет суть эксперимента — она имеет скорость передачи, измеряемую десятками гигабит в секунду и отличающуюся низкой латентностью благодаря реализации смешанного последовательно-параллельного способа передачи данных с применением модулей типа сериалайзер/десериалайзер (serializer/deserializer, SerDes) на FPGA.

 

Рис. 1. Экспериментальная сеть BlueDBM
Рис. 1. Экспериментальная сеть BlueDBM

 

Рис. 2. Узел сети BlueDBM
Рис. 2. Узел сети BlueDBM

 

На ПК в BlueDBM работают только приложения, а главное из задуманного реализуется в FPGA. Процедура работы выглядит следующим образом: для доступа приложения к данным система направляет запрос в локальный FPGA, при этом если данные оказываются в локальном модуле флэш-памяти, то обеспечивается прямой доступ к ним, в ином случае организуется доступ по сети к данным в другом узле. Далее данные обрабатываются ускорителем, находящимся в том же FPGA, после чего передаются в ПК в виде заготовки-полуфабриката. Для организации подобного процесса в FPGA создаются: модуль клиентского интерфейса, модуль отображения адресов, контроллер флэш-памяти, коммутатор сети и ускоритель.

Модуль клиентского интерфейса вместе с соответствующим драйвером обеспечивает контакт с ПК, абстрагируя общее пространство данных, предоставляемых приложениям. Он поддерживает файловую систему в пользовательском пространстве (Filesystem in Userspace, FUSE), которая позволяет пользователям создавать их собственные файловые системы без переписывания кода ядра. По сути, FUSE используется для написания виртуальных файловых систем, которые действуют как представление существующей файловой системы или устройства хранения.

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

Наибольший интерес представляет организация сети, объединяющей узлы BlueDBM. Функциональность этой сети весьма ограниченна, поэтому принципы ее создания заметно отличаются от положенных в основу Ethernet или TCP. Это тоже сеть с коммутацией пакетов, но с предельно упрощенной версией IP, задуманная для передачи с минимально возможной латентностью. Этот протокол «зашивается» в FPGA, что позволяет согласовывать передачу с работой контроллера и еще больше уменьшать задержку. Каждый из узлов содержит таблицу маршрутизации пакетов, что позволяет выбирать кратчайший путь, осуществлять горячую замену узлов и т. п.

В BlueDBM используются два типа ускорителей — локальные и глобальные, решающие задачи ускорения трафика и осуществляющие компрессию и декомпрессию передаваемых данных. Локальный ускоритель размещен перед маршрутизатором и ускоряет трафик в узле, а глобальный — за ним, ускоряя трафик между узлами.

***

Работы в области интеграции SSD еще только в самом начале, и пока нет ни одной компании, которая бы специализировалась в этом направлении, а большие производители к этим работам не приступали — следовательно, в ближайшее время стоит ожидать новых открытий.

Литература

  1. Леонид Черняк. Хранилище данных на кодах Рида — Соломона // Открытые системы.СУБД. — 2012. — № 2. —  С. 52–53. URL: http://www.osp.ru/os/2012/02/13014124 (дата обращения 22.05.2014).
  2. Леонид Черняк. Файловые системы для Больших Данных // Открытые системы.СУБД. — 2011. — № 5. — С.14–18. URL: http://www.osp.ru/os/2011/05/13009415 (дата обращения 22.05.2014).

Леонид Черняк (osmag@osp.ru) — научный редактор, «Открытые системы. СУБД» (Москва).