Данных становится всё больше: ещё год назад аналитики IDC предсказывали, что общий объём их в мире будет прирастать от 33 Зб в 2018 г. до 175 Зб в 2025-м с CAGR около 61% (1 Зб, напомним, равен 1 трлн. Гб). Эти огромные и непрерывно нарастающие груды информации необходимо где-то хранить и, самое главное, эффективно обрабатывать. Эффективно — значит быстро и точно, иначе вал накапливающихся новых данных успевает лишать значимости едва полученные результаты. Отсюда — особая ценность высокоскоростных полупроводниковых накопителей (SSD) для ЦОДов.

А наиболее передовой интерфейс для подключения SSD на сегодня — не морально устаревший SATA, архитектурно не рассчитанный на взаимодействие со сверхвысокими скоростями, а NVMe (non-volatile memory express). Развитие этой шины обмена данными продолжается уже почти десятилетие, и к настоящему времени NVMe успел зарекомендовать себя незаменимым интерфейсом для организации гиперскоростных хранилищ на базе флэш-памяти (all-NAND flash arrays, AFA) и самых передовых в плане эффективности обработки информации ЦОДов в целом.

От добра добра — да, ищут

Зачем в принципе потребовалось разрабатывать новый интерфейс, первая версия спецификации которого была опубликована в 2011 г., если к тому времени для СХД и серверов уже использовались более скоростные подключения, чем SATA, — прежде всего SAS? Дело в принципиальном конструктивном отличии полупроводникового накопителя от магнитного жёсткого диска. HDD, строго говоря, нельзя называть устройством произвольного доступа в полном смысле этого слова. Данные в нём хранятся в секторах на магнитных дорожках, и доступ к ним подразумевает определённую временную задержку на перепозиционирование коромысла с магнитными головками чтения-записи и на ожидание того момента, когда необходимый сектор на вращающейся пластине пройдёт под нужной головкой.

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

Соответственно, и организовывать обращение к SSD извне для записи или чтения данных необходимо с учётом столь ничтожных задержек. Спроектированные десятилетия назад для организации взаимодействия с магнитными жёсткими дисками шины и контроллеры принципиально не в состоянии обеспечить работу полупроводниковых накопителей на пределе их современных возможностей. Именно поэтому родилась концепция NVMe как интерфейса, де-факто соединяющего полупроводниковый накопитель напрямую с PCI Express — наиболее скоростной на сегодня общей шиной компьютерных х86-систем. «Напрямую» в буквальном смысле: никакого дополнительного контроллера на системной плате или в составе процессора для взаимодействия с таким накопителем не требуется. Разъём NVMe — попросту физический интерфейс сопряжения между внешним устройством и шиной PCIe, не более того.

Рабочая группа по развитию NVMe регулярно отчитывается об обновлениях и усовершенствованиях, которые получает этот перспективный интерфейс. К сожалению, нередко подобная информация проходит мимо внимания не только заказчиков, но и интеграторов AFA СХД и устроителей целых ЦОДов, что выражается в использовании успевших уже устареть контроллеров с новейшими накопителями или наоборот. В результате готовая система демонстрирует совсем не тот уровень производительности, на который способна.

Хабберт Смит, эксперт в области хранения данных и участник рабочей группы по развитию NVMe, который в разное время сотрудничал с Toshiba Memory America, Samsung Semiconductor, NetApp, Western Digital и Intel, рассказал на портале eWeek о пяти наиболее актуальных новшествах, имплементированных в ревизии 1.4 стандарта NVMe, поясненив, почему именно они значимы и как могут повлиять на эффективность реально эксплуатируемых систем. Рассмотрим вкратце каждое из этих новшеств.

1. Меньше шума в облаках

Всё чаще провайдеры облачных услуг делают ставку на хранилища AFA — особенно в тех случаях, когда контракт обязывает их предоставлять заказчику гарантированный уровень сервиса по числу операций ввода-вывода за секунду (IOPS) в каждый момент времени. Даже для бытовых NVMe SSD показатели IOPS исчисляются сотнями тысяч, для корпоративных — миллионами, и этого, казалось бы, достаточно для решения любых задач. Однако нагрузка на накопители корпоративного уровня в больших СХД чрезвычайно высока, и может случиться так — особенно с учётом широко распространённой сегодня виртуализации — что в какой-то момент к одному и тому же SSD будет сформировано столько запросов из различных источников, что часть из них контроллер вынужден будет поставить в очередь. Снизив тем самым уровень IOPS для каждой из параллельно обрабатываемых задач в отдельности.

Чтобы избежать подобных накладок, спецификация NVMe 1.4 предусматривает организацию высокоуровневых структур NVM Sets и Endurance Groups. Каждая «группа добротности» (Endurance Group) состоит из одного или нескольких блоков NVM (NVM Sets) — своего рода логических разделов, превосходящих по размеру отдельные пространства имён NVMe (namespaces). Пространства имён, напомним, образованы определённым набором вполне конкретных физических полупроводниковых ячеек в пределах данного SSD, которые последовательно нумеруются контроллером и затем эксплуатируются так, как если бы образовывали отдельный независимый накопитель.

В каждом пространстве имён (их под управлением данного контроллера может быть одно или более) выделяется свой пул подменных ячеек на случай выхода из строя части основных, для каждого контроллер заботливо распределяет нагрузку, чтобы добиться равномерного износа ячеек со временем и т. д. При этом namespaces — динамические структуры: контроллер создаёт и уничтожает их по мере надобности; более того, к пространствам имён под управлением контроллера данного накопителя может быть предоставлен общий доступ извне (например, от общего контроллера СХД). По структурной организации пространство имён NVMe весьма схож со SCSI Logical Unit (LUN).

Так вот, NVM Set представляет собой комбинацию нескольких namespaces (физически могущих располагаться в пределах одного SSD или же относиться к совершенно различным накопителям), а Endurance Groups — структуры следующего уровня иерархии, своего рода аналоги виртуальных дисковых массивов. Суть этой конструкции проста: разделить различные задачи, которые решает СХД, на категории по определённым признакам — и предоставить для каждой из категорий свой ресурс высокоскоростного хранения данных, эффективно изолируя тем самым «шумных соседей».

Noisy neighbors («шумные соседи») — вполне адекватный технический термин, описывающий задачи, которые подразумевают особенно интенсивный обмен данными между процессором, оперативной памятью и подсистемой хранения данных. В отсутствие NVM Sets и Endurance Groups балансировать нагрузку между отдельными накопителями придётся центральному контроллеру СХД, что далеко не всегда производится эффективно и в целом увеличивает задержки при обработке непрерывно поступающих информационных потоков. Блоки же и логически сгруппированные ячейки памяти NAND, управляемые контроллером напрямую и независимо, позволяют для каждой обрабатываемой системой хранения задачи обеспечивать адекватный доступ к подсистеме хранения (в терминах IOPS и задержки) в соответствии с её спецификой.

В результате облачные провайдеры получают возможность предлагать услуги контейнеризации гарантированного на уровне контракта качества на разделяемом аппаратном обеспечении. Чего прежде, до внедрения NVM Sets, добиваться в общем случае не удавалось. Отдельные крупные провайдеры прежде даже заказывали своим поставщикам SSD разработку особых прошивок для контроллеров, которые реализовывали бы функциональность, ныне имплементируемую спецификацией NVMe 1.4.

2. Оркестровка детерминированности

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

В СХД, содержащих множество SSD, при любом запросе к данным, физически размещённым на разных накопителях, скорость отклика будет определяться самым медленным звеном в цепочке. Чем больше накопителей вовлечено в процесс, тем выше вероятность, что в каждый момент времени хотя бы один их них да окажется в режиме housekeeping. Тем самым ни о какой строго определённой производительности системы говорить не придётся. Решение этой проблемы довольно изящно: детерминированный ввод-вывод (NVMe Deterministic IO) реализуется за счёт координации периодов самообслуживания внутри группы накопителей.

3. Производительность на волокне

Для сложно организованных СХД чрезвычайно важна возможность минимизировать задержки в каналах коммуникаций между отдельными своими частями. Протокол iSCSI сослужил в этом отношении отличную службу многим поколениям виртуальных ленточных библиотек и иных систем хранения, построенных на магнитных жёстких дисках. Теперь аналогичную роль в структуре AFA принимает на себя протокол NVMe over Fabrics (NVMe-oF), обеспечивающий высокоскоростные коммуникации между вычислительным узлом и системой хранения. Базируясь на технологии RDMA (прямого дистанционного доступа к памяти), NVMe-oF совместим с такими широко распространёнными решениями, как InfiniBand, RoCE и iWARP.

Разница между локальным SSD в пределах данной конкретной стойки и расположенным на другом конце машинного зала хранилищем благодаря NVMe-oF практически нивелируется: дополнительная задержка при коммуникациях внутри локальной сети исчисляется единицами микро(не милли-!)секунд. Это позволяет физически отделить собственно вычислительные узлы от сред хранения без ощутимого ущерба для производительности. Тем самым провайдеры ЦОДов с большей гибкостью могут производить оптимизацию и модернизацию «железа» — как серверного, так и AFA. Вдобавок, роутинг через протокол TCP делает возможной репликацию удалённых хранилищ с использованием NVMe-oF, обходясь тем самым без дополнительных серверов репликации и снижая издержки.

4. Интерфейс — всему голова

Новейшие спецификации протокола обмена данными предусматривают опциональные PCI-команды в интерфейсе управления NVMe (Management Interface, MI) для точечного контроля рабочих параметров каждого из обслуживаемых устройств. Это приобретает особую важность в случае стыковки двух или более сетей посредством точек сопряжения (Points of Presence, PoP) с использованием протокола NVMe-oF.

5. Обобществление имён

Возвращаясь к упомянутым ранее NVMe namespaces, следует упомянуть ещё об одной особенности, которую предоставляет последняя редакция спецификаций этого стандарта: о разделении пространства имён. Поскольку — благодаря NVM Sets и Endurance Groups, а также NVMe-oF — логических границ между отдельными областями данных в пределах локальной сети де-факто не существует, становится возможным чрезвычайно гибкое управление доступом к информационным кластерам. Создав пространство имён в пределах некоего хранилища данных, соответствующего требованиям NVMe 1.4, не составит труда проложить между ним и любым хостом в пределах ЛВС два или более совершенно независимых канала обмена (PCIe path).

А уж как дальше эти каналы использовать — целиком и полностью зависит от решаемых этим хостом задач. Можно зарезервировать информационные потоки, повысив тем самым надёжность доставки данных от элементов промышленного Интернета вещей на управляющий их работой edge-сервер с элементами машинного обучения. Можно использовать один канал для отправки информации на удалённое устройство, а другой — для её получения, реализуя тем самым полнодуплексный широкополосный обмен медиаданными с индустриальными интерфейсами дополненной реальности. Словом, управление NVMe namespaces открывает перед интеграторами широчайший спектр возможностей для решения самых актуальных задач в нынешних условиях сверхплотных информационных потоков и невероятной ценности времени как производственного и финансового ресурса.