Компании-производители систем хранения данных перестали фокусироваться на объемах и все чаще предлагают заказчикам планировать решения, исходя из количества требуемых элементарных операций чтения-записи. Действительно, объемы хранения на один диск ежегодно растут, а показатель IOPS (InOut Per Second) для одного диска долго остается постоянным. Вместе с  тем  остаются в поле внимания такие традиционные критерии, как пропускная способность, однако они актуальны для линейной нагрузки, а сегодня более распространены случайные нагрузки в соотношении  70  и 30% операций чтения и записи блоками данных по  4–8  Кбайт. Такой профиль обусловлен как особенностями работы популярных СУБД, так и накоплением больших объемов неструктурированных  данных  и, как следствие, развитием инструментов анализа Больших Данных. Кроме того, на этапе закупки или модернизации оборудования под конкретную задачу могут быть интересны такие показатели, как количество контроллеров, «сырая» емкость системы и  т. д.  Однако сегодня основной акцент заказчики делают на  соблюдении  соглашений об уровне обслуживания SLA по предоставлению IOPS приложениям, а какие конкретно показатели объема дискового  пространства,  позволяющие достигнуть  требуемого уровня  обслуживания,  имеет система хранения —  вторично.

Из технологических новшеств, влияющих на рынок систем хранения, можно отметить рост популярности твердотельных накопителей (Solid State Drive, SSD), флэш-массивов и решений, позволяющих использовать оперативную память как емкость жесткого  диска, —  все это реакция на проблемы с физическими ограничениями для традиционных шпиндельных дисков. Кроме того, наметилась тенденция к абстрагированию систем хранения данных для использования в облачных решениях и в различных программно-определяемых комплексах, например в программно-конфигурируемых ЦОД (Software Defined Data Center, SDDC). Все это влияет на архитектуры систем хранения.

На рис. 1 представлена традиционная архитектура систем хранения  —  каждой RAID-группе соответствует свой набор дисков (включая диски горячей замены), на котором размещаются логические объемы данных (LUN). Таким образом, производительность тома LUN ограничена производительностью его RAID-группы. Для достижения требуемой  производительности,  RAID-группы объединяют в RAID-пулы и используют многоуровневое хранение данных (tiering), предполагающее размещение данных на разных носителях в зависимости от частоты обращения к ним.

 

Рис. 1. Традиционная архитектура систем хранения
Рис. 1. Традиционная архитектура систем хранения

 

Альтернативная архитектура организации RAID (рис. 2), предлагаемая, например, компаниями HP и Huawei  (и отчасти EMC),  предусматривает деление каждого физического диска в массиве на куски дисков определенного размера, чанклеты (от англ. сhunk  —  ячейка, кусок, фрагмент диска небольшого объема  —  64, 128, 256  Мбайт  и  т. д.),  из которых далее собираются виртуальные диски, и уже из виртуальных дисков затем собираются пулы с требуемым уровнем RAID. Таким образом, RAID получается  «размазанным»  по всем дискам системы, а сам физический диск, в свою очередь, может быть участником RAID любого уровня (0, 1, 5, 6, 10, 50 и  т. д.). 

 

Рис. 2. Альтернативная архитектура организации RAID
Рис. 2. Альтернативная архитектура организации RAID

 

Основной недостаток такого подхода — еще более существенная потеря производительности для шпиндельных дисков (до 50% при определенных шаблонах нагрузки, так как эти шаблоны применяются к разным RAID-группам). Основные плюсы  —  уменьшение на порядок времени восстановления данных при физическом отказе диска, а также снятие требования к минимальному числу дисков в RAID после достижения максимального количества дисков для максимального уровня RAID на массиве (каждый уровень имеет свое минимальное число  дисков:  для RAID0 и 1  —  это два диска, для RAID5  —  три, RAID6  —  четыре).

Обе архитектуры на сегодняшний день получили наибольшее  распространение,  и на их основе построено  90–95%  коммерческих систем хранения.

Производители систем хранения вынуждены применять различные методы ускорения и оптимизации работы с данными для сохранения конкурентоспособности своих решений. Основным методом оптимизации является кэширование данных в оперативной памяти систем хранения непосредственно перед их записью или чтением с дисковой подсистемы, при этом используются такие функции, как: упреждающее чтение, при котором контроллер обнаруживает факт последовательного чтения данных и заранее читает больше данных, чем запрашивается, и если последовательность подтверждается, то хост получает данные из кэша; оптимизация записи данных на диск  —  переупорядочивание данных на основе статистики их использования с записью более «горячих» данных ближе к центру диска (чтение из центральных областей происходит немного быстрее, чем из периферических); предсказание, заложенное в систему хранения данных (для четных RAID возможны различные решения, позволяющие обойти write penalty  —  «штраф», который налагается на дисковую подсистему при организации RAID для записи  данных) — например,  иногда выгоднее считать один-два блока, недостающих для сегментирования данных (full stripe). Не будет лишним напомнить, что в RAID1 (зеркало из двух  дисков),  для  того  чтобы записать один блок, требуется в два раза больше операций, чем в случае одного диска или RAID0. Для RAID5 значение такого штрафа будет «четыре»  —  для записи одного блока  потребуются  четыре, а не одна операция, как в случае с RAID0, для RAID6  —  шесть операций.

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

Альтернатива традиционным дискам

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

В корпоративном сегменте, где используются централизованные системы хранения, естественным шагом стал полный или частичный переход от стандартных жестких дисков к флэш-массивам  —  сегодня практически все производители предлагают системы с дисками SSD, используемыми либо как стандартное хранилище, либо как средство промежуточного уровня хранения  (кэша)  для «горячих» данных. Дисковые массивы с SSD обеспечивают феноменальные показатели быстродействия операций ввода-вывода и доступа к данным, однако  узким  местом становится интерфейс передачи данных. Один накопитель способен обеспечить скорость передачи данных около 500 Мбайт/с, и флэш-массив быстро насыщает всю полосу пропускания сети, причем проблему полностью не решает даже использование высокоскоростных интерфейсов вроде Fibre Channel 32 Гбит/с, Ethernet 40 Гбит/с или Infiniband.

В ряде случаев обойти дорогой путь увеличения полосы пропускания и приобретения/обновления системы хранения с флэш-накопителями можно, используя технологию кэширования на стороне сервера. Идея заключается в оснащении серверов, наиболее требовательных к операциям ввода-вывода, локальными высокопроизводительными подсистемами хранения, используемыми в качестве промежуточного звена (кэша) между приложением и сетевой системой хранения для временного хранения и быстрого доступа к «горячим» данным. Это позволяет оптимизировать работу только отдельных высоконагруженных серверов, одновременно снизив нагрузку на систему и сеть хранения данных, освободив их мощности для других ресурсов. Использование локального серверного кэша размером примерно треть от общего объема данных, обрабатываемого приложением, может приводить к увеличению производительности на  200–300%. 

Серверный кэш на флэш-накопителях может быть построен разными способами. Самым простым и доступным является подключение локального диска SSD, однако в этом случае ограничением будет  скорость  интерфейса SAS\SATA   (6  Гбит/с \ 600 Мбайт/с).   Решить проблему ограничения скорости можно, используя SSD-накопители FMD (Flash Module Drive) с интерфейсом PCIe, дающим значительный прирост по скорости за счет отказа от промежуточного преобразования в протокол SAS/SATA. Выпускаемые сегодня FMD с интерфейсом PCIe обеспечивают скорость обмена данными около 1,5 Гбайт/с, однако сейчас не все серверы имеют необходимое количество разъемов PCIe.

Для приложений, нетерпимых к задержкам при доступе к данным, было анонсировано устройство SSD DIMM объемом 200 и 400 Гбайт, устанавливаемое в стандартный разъем для модулей памяти. Эти флэш-накопители обладают экстремально низким показателем задержки —  около  5 мкс для операций записи, что значительно меньше, чем для устройств с интерфейсом PCIe. Кроме того, при добавлении дополнительных модулей производительность растет линейно. Конечно, модули оперативной памяти обеспечивают более высокую скорость, но они энергозависимы и стоят на единицу объема дороже, чем SSD DIMM.

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

Флэш-массивы разрабатывались для повышения производительности при случайном чтении мелких блоков данных  —  в этой ситуации большинство предсказательных методов оптимизации, применяемых для шпиндельных дисков, не работают, так как практически невозможно прогнозировать переход от блока к блоку. Таким образом, нагрузка, позволяющая наиболее полно раскрыть потенциал флэш-памяти,  —  это многопотоковое параллельное чтение случайных данных, что типично для СУБД корпоративного уровня, применяемых в решениях массово-параллельной поисковой и аналитической обработки Больших Данных. Изначально в Hadoop использовалось чтение большими блоками данных, что практически сводило на нет преимущество твердотельных накопителей перед жесткими дисками, но впоследствии метод был переработан.

 

Тесты для SSD

Для сравнения твердотельных накопителей от разных производителей ассоциация Storage Networking Industry Association предложила методологию Solid State Storage Performance Test Specification (SSS PTS) тестирования твердотельных накопителей, разработанную с учетом исключения влияния файловой системы диска, кэширования операционной системой и  т. д.  На данный момент разработано две спецификации для тестирования: для пользовательских  дисков  и для дисков, применяемых в промышленных системах хранения, — Solid State Storage Performance Test Specification Enterprise v1.1 и Solid State Storage Performance Test Specification Client v1.1 соответственно. На основе данных спецификаций создано множество синтетических тестов производительности твердотельных накопителей: IOmeter, AS SSD Benchmark, CrystalDiskMark, а также собственные тесты, используемые каждым  производителем  твердотельных накопителей. Тем не  менее  сами системы хранения обычно сравнивают как «целиком» (по тестам SFS2008 для файлового доступа и SPC-1 для блочного доступа к данным), так и по результатам натурных испытаний. Вместе с тем, например, компания EMC почти перестала участвовать в тестированиях, предполагающих оценку в единицах бенчмарка, и предлагает клиентам не только сравнивать показатели относительно синтетической нагрузки теста, но и оценивать функционал системы хранения данных.

 

Сегодня  в твердотельных накопителях для организации хранения данных используется три типа памяти: SLC (Single Level Cell, одноуровневые ячейки), MLC (Multi Level Cell, многоуровневые ячейки, обычно два уровня) и TLC (Three Level Cell, трехуровневые ячейки как отдельный подвид MLC) [1]. В SLC в каждой ячейке хранится один бит данных, а в MLC и TLC — по два и три соответственно. С одной стороны, это позволяет хранить больше, с другой, сильно ограничивает количество циклов перезаписи ячейки, после которого она деградирует; так, например, для SLC нормальный ресурс — 100 тыс. циклов стирания, у MLC — около 15 тыс., у TLC — 5 тыс. Кроме того, скорость считывания данных с SLC SSD намного выше, чем с MLC без оптимизации, и для того чтобы приблизить результаты, для MLC разрабатывают различные алгоритмы, позволяющие компенсировать отставание, — например, параллельную запись данных сразу в две микросхемы памяти (принцип действия похож на RAID0). Кроме того, производители сразу резервируют около 20% емкости MLC SSD, которая в дальнейшем используется для замены изношенных и выходящих из строя ячеек в течение гарантийного срока диска.

В обычных жестких дисках накопители «не знают», какие секторы или страницы действительно используются, а какие могут считаться незанятыми, — в пометке блока данных этот блок может числиться как «удаленный», хотя фактического удаления не происходит, и если не произошла перезапись в этот сектор, то данные можно восстановить. В SSD данные пишутся блоками по 4 Кбайт, а стираются — страницами по 512 Кбайт, поэтому при изменении нескольких байтов внутри блока контроллер считывает этот блок в кэш, модифицирует необходимые байты, стирает весь блок (основной фактор, влияющий на срок службы накопителя), вычисляет новое местоположение блока и записывает блок на новое место. При стирании контроллер переносит и группирует данные для того, чтобы занять «удаленными» данными целый блок в 512 Кбайт, а затем его стереть. Для того чтобы сделать SSD конкурентоспособными по отношению к жестким дискам, в интерфейс ATA была добавлена команда TRIM, позволяющая операционной системе уведомить накопитель о том, какие блоки уже не содержатся в файловой системе и могут быть удалены. Поддержка TRIM имеется в файловой системе NTFS, и на данный момент SSD поддерживаются в Windows 7, Windows 8, Windows Server 2008 R2 и Windows Server 2012. Для Linux добавлена поддержка TRIM для файловой системы Ext4, также заявлена поддержка для HFS+ и Btrfs.

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

  • Сборка мусора — то есть блоков данных, помеченных на удаление, в ходе которой актуальные данные формируют новые сектора, а освобожденные блоки стираются целиком.
  • Оптимизация износа — так как каждая ячейка имеет свой срок службы, ограниченный количеством операций стирания данных, то для выравнивания нагрузки используют алгоритмы максимально равномерного распределения нагрузки на ячейки. Помимо этого, некоторые чипы имеют ограничение на число циклов чтения между двумя циклами стирания для ячейки, и если превысить это число, то вырастет вероятность того, что данные в этой ячейке исчезнут в процессе слишком частого чтения.
  • Контроль дефектных блоков — при неудачном финале операции над блоком он помечается как дефектный, заносится в специализированную таблицу дефектных блоков и ему на замену выделяется блок из резервного объема диска.

Для реализации этих функций в ОС Linux были разработаны файловые системы Journaling Flash File System (JFFS) и JFFS2, YAFFS (Yet Another Flash File System), LogFS, F2FS, UBIFS, а также файловые системы «только для чтения» Cramfs и SquashFS.

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

JFFS2 рассматривает каждый блок флэш-памяти независимо от других и ведет отдельные списки: чистых блоков с актуальными данными; мусорных блоков, в которых есть хотя бы одна ячейка с устаревшими данными; чистых блоков, которые были стерты и готовы к последующему использованию. В этих условиях алгоритм сборки мусора может в зависимости от ситуации эффективно принимать решение о том, какие блоки готовить к повторному использованию. В текущих реализациях алгоритм выбирает их из списков либо чистых, либо грязных блоков на основе заданной вероятности. В 99% случаев используется список грязных блоков (при этом актуальные данные переносятся в другой блок), а в 1% случаев берется список чистых блоков (при этом все содержимое просто переносится в новый блок). В любом случае целевой блок стирается и заносится в список свободных блоков. Все это позволяет сборщику мусора повторно использовать блоки с неактуальными данными (или частично неактуальными), в то время как данные все равно «проходят» всю память, что и дает статическую оптимизацию износа.

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

В LogFS древовидная структура флэш-носителя хранится в самой флэш-памяти, поэтому система монтируется так же быстро, как и традиционные типа ext2, отлично масштабируется и поддерживает флэш-устройства очень большого объема.

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

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

ЦОД вселенского масштаба

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

По уровню зрелости процессов технология SDS в данный момент отстает от остальных элементов SDDC, и основное объяснение этому — наличие физических ограничений, которые трудно обойти при виртуализации систем хранения. Как уже отмечалось, традиционная архитектура организации дисковых подсистем предполагает фактический произвол администраторов при настройке систем хранения данных (разбиение на RAID, RAID-группы и т. д.), поэтому при виртуализации двух систем хранения данных одинаковой физической базовой конфигурации после настроек можно получить совершенно разные производительности и объемы. Альтернативная архитектура организации RAID (рис. 2) позволяет интегрировать подключаемые диски после их разметки и перераспределения элементов массива.

В дальнейшем крупные игроки ИТ-рынка намерены приступить к созданию ЦОД класса WWW — WSDC (Web-Scale Data Center), первые упоминания о них появились в отчете Gartner в мае 2013 года, в котором WSDC определяется как «концепция предоставления в любой точке мира масштабируемых облачных сервисов для предприятий через сети общего доступа».

***

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

Литература

  1. Леонид Черняк. Долгожданные гибридные диски // Открытые системы.СУБД. — 2011. — № 1. — С. 58–60. URL: http://www.osp.ru/os/2011/01/13006976 (дата обращения 18.09.2014).

Андрей Субботин (Andrey.Subbotin@R-Style.com)  —  ведущий консультант департамента программно-аппаратных комплексов, компания R-Style (Москва).