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

Продажи жестких дисков стабильно снижаются на протяжении вот уже нескольких лет, в то время как спрос на флеш-накопители растет. Так, по оценке сайта statista.com, в 2017 году на каждые два проданных жестких диска приходился один SSD (395 млн против 190 млн), а всего за два года до этого соотношение было 4,5 к 1 (470 млн против 105 млн). NVMe приобретает все большую популярность в качестве интерфейса для SSD благодаря главным своим преимуществам: малой задержке при передаче данных, большой пропускной способности и высоким показателям IOPS. Например, если для SATA максимальное значение составляет 200 000 IOPS, то, по данным организации NVM Express, для NVMe-устройств оно может превышать 1 000 000 IOPS.

Однако, по оценкам аналитиков, только 13% всей емкости хранения находится внутри серверов или подключается к ним напрямую, тогда как оставшиеся 87% размещаются во внешних системах хранения. Соответственно, следующим логическим шагом для NVMe является реализация NVMe поверх сети, как это было сделано в свое время для SCSI (FCP, iSCSI). С этой целью был разработан протокол NVMe over Fabrics (NVMe-oF), который позволяет передавать команды NVMe по сети и одновременно обеспечивает сопоставимые с NVMe задержки и другие характеристики.

NVMe ПО СЕТИ

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

Разработка NVMe-oF началась в 2014 году с целью распространения поддержки протокола блочного доступа NVMe на сетевые среды Ethernet, Fibre Channel и InfiniBand (историю разработки NVMe и NVMe-oF см. рис. 1). С его помощью планировалось увеличить расстояние до подключенных устройств и подсистем NVMe, доведя его до типичных для ЦОД дистанций, а кроме того, обеспечить дополнительную задержку при доступе по сети не более 10 мкс по сравнению с локальными устройствами NVMe внутри сервера.

Рис. 1. Этапы стандартизации NVMe
Рис. 1. Этапы стандартизации NVMe

Первая спецификация NVMe-oF версии 1.0 была принята в 2016 году и предусматривает использование Fibre Channel и RDMA в качестве транспорта (см. рис. 2). В случае RDMA используется одна из трех технологий — InfiniBand, RDMA over Converged Ethernet (RoCE) и Internet Wide Area RDMA Protocol (iWARP). В версии 1.1, которая должна появиться во второй половине этого года, ожидается также поддержка TCP. Помимо этих сетевых сред, в будущем возможна поддержка сетевых технологий следующего поколения Gen-Z.

Рис. 2. Архитектура NVMe over Fabrics
Рис. 2. Архитектура NVMe over Fabrics

NVMe-oF обеспечивает привязку NVMe к сетевой среде, используемой в качестве транспорта. Привязка (binding) призвана гарантировать надежную передачу данных, команд и ответов между хостом и подсистемой NVMe по сетевой среде с минимальной дополнительной обработкой (см. рис. 3). Одни среды передачи лучше подходят для отдельных приложений, другие хуже, поэтому привязка к конкретной среде может исключать или ограничивать те или иные функции в зависимости от возможности транспорта.

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

Небольшой набор команд NVMe упрощает реализацию протокола в сетевой среде. Примерно на 90% протокол NVMe-oF совпадает с локальным протоколом NVMe: те же команды ввода-вывода и административные команды, такие же адресные пространства (пространства имен — в терминологии NVMe), регистры и свойства, асинхронные события и т.?д. Основные различия касаются используемых идентификаторов, механизмов обнаружения, реализации очередей и передачи данных (см. таблицу). Однако эти подробности интересны главным образом разработчикам драйверов.

Основные различия между NVMe-oF и NVMe
Основные различия между NVMe-oF и NVMe

Главное отличие NVMe-oF от NVMe заключается в механизме передачи команд. NVMe записывает запросы и ответы в разделяемую область памяти на хост-компьютере с помощью PCIe, тогда как NVMe-oF реализует обмен сообщениями для передачи запросов и ответов по сети между хостом и целевым устройством хранения. Для транспорта через сеть команды и данные помещаются в так называемые капсулы, каждая из которых может вмещать несколько команд или ответов. Формат капсул не зависит от того, какая конкретно сетевая среда используется.

Посредством капсул можно отправить несколько небольших сообщений в одном, что позволяет улучшить эффективность передачи и сократить задержку. Капсулы содержат записи с очередями запросов (Submission Queue Entry) или ответов (Completion Queue Entry), а также некоторый объем данных, метаданных или списков фрагментации-дефрагментации (Scatter-Gather List, SGL).

Для идентификации удаленных целевых устройств используются привычные соглашения о квалифицированных именах. Схема NVMe Qualified Name (NQN) аналогична iSCSI Qualified Name (IQN). В марте 2018 года NVM Express добавил в протокол NVMe-oF новую функцию под названием «асимметричный доступ к пространству имен» (ANA) и тем самым обеспечил возможность организации ввода-вывода по разным маршрутам между множеством хостов и пространствами имен на целевых устройствах.

NVMe-oF предъявляет жесткие требования к сетевой среде для доставки команд NVMe. Как указывается в информационном документе NVM Express, сетевая фабрика должна вносить задержку не более 10 мкс, масштабироваться до десятков тысяч устройств, предоставлять альтернативные маршруты между хостом и целевым устройством и т.?д. От сети требуется обеспечение надежной доставки данных без потери кадров (пакетов) из-за перегрузок, а от сетевых адаптеров — способность самостоятельно резервировать области памяти для использования их приложениями, чтобы данные ввода-вывода могли быть переданы напрямую аппаратному адаптеру (нулевое копирование — zero copy). Все это ставит вопрос о выборе сетевой среды, наиболее подходящей для реализации NVMe-oF.

NVMe ПОВЕРХ FIBRE CHANNEL

Сеть Fibre Channel используется преимущественно для передачи протокола SCSI. Собственно, Fibre Channel Protocol (FCP) представляет собой верхнеуровневый протокол для передачи SCSI по Fibre Channel. Однако в сети FC могут применяться и другие протоколы, в частности FICON, а теперь к ним добавляется еще и NVMe over Fibre Channel (FC-NVMe).

Предпочтительной средой для реализации NVMe-oF является сеть с контролем потоков на основе кредитов для обеспечения передачи пакетов без потерь. В отличие от Ethernet, где для этого необходимы дополнительные средства, такие как DCB, Fibre Channel изначально поддерживает соответствующие встроенные механизмы. Благодаря им отправитель всегда знает, какой кредит ему выделен, то есть сколько пакетов может обработать получатель, что позволяет избежать потерь «лишних» пакетов.

За реализацию FC-NVMe отвечает комитет T11 Международной комиссии по ИТ-стандартам (International Committee for Information Technology Standards, INCITS), который занимается разработкой стандартов для Fibre Channel. Помимо собственно FC, данная реализация может работать и по Ethernet — точнее, по Fibre Channel over Ethernet (FCoE). Работы над первой версией стандарта FC-NVMe были завершены в августе 2017 года. При разработке второй версии стандарта, FC-NVMe-2, комитет T11 намерен сфокусироваться на таких моментах, как коррекция последовательных ошибок и арбитраж очередей.

Разработчики уделяли большое внимание сокращению числа ненужных сообщений и параметров при транспорте NVMe через сеть хранения Fibre Channel с выполнением всех требований спецификации NVMe-oF. Существующие сети хранения на базе FC пятого и шестого поколений могут поддерживать FC-NVMe с минимальными необходимыми изменениями. В частности, FC-NVMe должен поддерживаться операционной системой СХД и сетевыми адаптерами.

Благодаря сокращенному набору команд и поддержке множества очередей, FC-NVMe обеспечивает лучшую производительность и меньшую задержку (по сравнению с SCSI), а также параллельный ввод-вывод при чтении и записи данных на SSD. Как показали тесты, проведенные аналитической компанией Demartek, специализирующейся на исследованиях решений для хранения данных и сетевых технологий, у NVMe over Fibre Channel показатель IOPS на 58% выше, а длительность задержки на 34% меньше, чем у протокола SCSI Fibre Channel.

Fibre Channel остается де-факто стандартом для сетевого доступа к устройствам хранения: по данным IDC, посредством FC осуществляется доступ к более чем 20 тыс. петабайт данных — никакая другая технология в этом отношении с ней не сравнится. Главное практическое преимущество FC-NVMe по сравнению с альтернативами заключается в том, что для него не требуется радикальной модернизации сети: поддержка NVMe в сети Fibre Channel на базе оборудования 5-го и 6-го поколения достигается обновлением программного обеспечения. При этом к одной и той же инфраструктуре Fibre Channel можно подключать системы хранения с поддержкой как FCP, так и FC-NVMe, чем обеспечивается постепенный переход на новую технологию.

NVMe ПОВЕРХ RDMA

Альтернативой Fibre Channel является использование RDMA. В свою очередь, RDMA в качестве транспорта может задействовать InfiniBand, Ethernet (точнее, конвергентный Ethernet — RoCE) и протокол TCP (iWARP).

Метод прямого доступа к памяти (Remote Direct Memory Access, RDMA) получил широкое распространение в высокопроизводительных вычислениях, где первоначально он был реализован поверх InfiniBand. С помощью RDMA компьютеры в сети могут обмениваться находящимися в основной памяти данными без участия процессора, кеша и операционной системы (см. рис. 4). Исключение ЦПУ из процесса перемещения данных позволяет существенно сократить задержку и повысить производительность и эффективность обмена.

Рис. 4. С помощью RDMA компьютеры в сети могут обмениваться находящимися?в основной памяти данными без участия процессора, кеша и операционной системы
Рис. 4. С помощью RDMA компьютеры в сети могут обмениваться находящимися?в основной памяти данными без участия процессора, кеша и операционной системы

Как и FC-NVMe, Infiniband обеспечивает передачу данных без потерь, предусматривает встроенные механизмы поддержания требуемого качества обслуживания и реализует контроль потоков на базе кредитов. Однако Infiniband имеет сравнительно узкую область применения — преимущественно в HPC и серверных кластерах. Для его внедрения большинству предприятий придется переходить на новую технологию, что ограничивает потенциальную область распространения NVMe over InfiniBand.

Протокол Ethernet — наиболее широко используемый протокол в современных центрах обработки данных. С появлением все более быстрых вариантов Ethernet возрастает потребность в протоколах с низкой задержкой, таких как RDMA. Благодаря версии RoCE для конвергентного Ethernet технология RDMA стала использоваться в облаках, корпоративных сетях и сетях хранения. RoCE был разработан InfiniBand Trade Association и иногда рассматривается как реализация Infiniband поверх Ethernet.

Теоретически NVMe-oF на базе Ethernet может быть реализован с применением любых коммутаторов Ethernet, однако на самом деле для этого необходимо оборудование, которое способно эффективно справляться с такого рода трафиком. Чтобы использовать RoCE, требуются коммутаторы с поддержкой протокола Data Center Bridging (DCB), которые обеспечивают передачу кадров без потерь и контроль приоритетных потоков (Priority Flow Control, PFC).

На данный момент имеются две версии RoCE, причем между собой они несовместимы из-за использования различных транспортных механизмов. RoCEv2 является маршрутизируемой версией и в качестве транспорта использует протокол UDP, а не Ethernet. Однако с ней, как и в случае RoCEv1 непосредственно, рекомендуется использовать Converged Ethernet, то есть DCB.

Вариант iWARP получил значительно меньшее распространение, хотя был предложен более 10 лет назад. Стандартизированный в 2007 году Internet Engineering Task Force, он базируется на TCP/IP, опирается на стандартные механизмы разгрузки TCP, поддерживает маршрутизацию пакетов и может использоваться поверх любой сети Ethernet. Однако, как показывают сравнительные тестирования RoCE и iWARP на скоростях 10 и 40 Гбит/с, первый обеспечивает меньшую задержку и большую пропускную способность для сообщений всех размеров. Такой результат не вызывает удивления, поскольку в случае iWARP добавляется как минимум еще один промежуточный уровень.

Использование TCP ограничивает применимость iWARP (безотносительно NVMe). В своем исходном варианте TCP плохо подходит для передачи трафика от систем хранения из-за использования механизмов медленного старта. Последние версии TCP, например TCP для центров обработки данных (Data Center TCP, DCTCP), имеют специальные функции для оптимизации работы в ЦОД, однако DCTCP не применяется в глобальных сетях. Необходимость задействовать различные стеки протоколов TCP/IP для разных сценариев использования сдерживает внедрение iWARP.

FIBRE CHANNEL ПО TCP

Внедрение NVMe-oF в случае RoCE и iWARP может потенциально потребовать замены всех сетевых серверных карт на платы с поддержкой RDMA. Столь масштабная модернизация вряд ли экономически оправданна, особенно для таких гигантов, как Facebook. Поэтому владельцы крупных ЦОД готовы согласиться с некоторым увеличением задержки ради возможности сохранения существующей инфраструктуры. Это породило интерес к реализации NVMe поверх TCP с использованием типовой сети Ethernet.

Протокол TCP c необходимыми усовершенствованиями позволяет обеспечить вполне приемлемые задержки, при этом нет необходимости в применении специальных сетевых плат и коммутаторов с поддержкой DCB. Компания Pavilion, производитель флеш-массивов с поддержкой NVMe-oF, сравнила характеристики NVMe-oF, когда в качестве транспорта использовались RoCE и TCP. При доступе к хранилищу от 1 до 20 клиентов средняя задержка записи в случае TCP составила 183 мкс, а в случае RoCE — 107 мкс.

Таким образом, TCP-NVMe оказался на 71% медленнее. Однако и такая задержка была в два раза меньше, чем при использовании iSCSI в той же конфигурации. Как отмечает Джефф Соза, директор по продуктам Pavilion, эти результаты вполне приемлемы, тем более что тестирование проводилось в масштабе центра обработки данных, а не отдельной стойки (между клиентом и СХД могло находиться до шести транзитных коммутаторов). После настройки задержку удалось сократить еще больше.

Компания Solarflare Communications, поставщик оборудования Ethernet, разработала бесплатный плагин для стека TCP/IP на Linux с поддержкой NVMeoF/TCP (он может работать как на клиенте, так и на целевой системе хранения). После одобрения стандарта на TCP-NVMe этот плагин будет добавлен в ядро Linux. Таким образом, любой желающий сможет создать систему хранения с доступом по NVMe-oF практически из любого места.

По данным SolarFlare, при использовании плагина задержки увеличиваются всего на 5–10% по сравнению с использованием NVMe-oF на базе RDMA, при этом не возникает проблем с совместимостью оборудования. (Как отмечалось выше, RoCE и iWARP несовместимы, поэтому на обоих концах соединения должны быть установлены одинаковые сетевые карты. Пока только компания Marvell объявила о выпуске NIC с одновременной поддержкой RoCE и iWARP.)

Пока продвижением NVMe over TCP занимаются преимущественно стартапы, среди которых Pavilion, Lightbits и Solarflare, но интерес к данной технологии проявляют и крупные игроки. Так, израильский стартап Lightbits заявляет, что он работает c Intel и Facebook над спецификацией NVMe over TCP. А программное обеспечение Kumoscale компании Toshiba поддерживает нестандартизованную версию протокола.

Привязки к транспорту TCP планируется добавить в стандарты NVMe наряду с привязками к Fibre Channel и RDMA, что позволит использовать NVMe-oF в существующих сетях ЦОД. Этим занимается техническая рабочая группа NVMe (NVMe Technical Working Group). Принятие стандарта на NVMe поверх TCP ожидается до конца текущего года. Он будет поддерживать все функции и архитектурные особенности NVMe и NVMe-oF.

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

ПЕРСПЕКТИВЫ NVMe-oF

NVMe over Fabrics делает только первые шаги — даже не все стандарты еще приняты. В 2017 году поддержка NVMe-oF была добавлена в ядро Linux и появилась в целом ряде дистрибутивов этой ОС. Однако на быстрое и тем более широкое распространение NVMe-oF вряд ли можно рассчитывать. Сверхнизкая задержка нужна далеко не всем приложениям, так что сначала NVMe-oF будет реализовываться только для тех приложений, для которых это дает реальную выгоду,?— например, для аналитики в реальном времени, биржевой торговли, машинного обучения.

Это преимущественно высококритичные приложения, но внедрение такой технологии, еще не прошедшей серьезную обкатку, чревато повышенными рисками. У каждого производителя свой подход к реализации NVMe-oF в тех или иных решениях, что потенциально может привести к проблемам совместимости. К тому же построение системы, которая в полной мере использовала бы возможности NVMe-oF, пока невозможно по техническим причинам — все преимущества NVMe-oF можно будет задействовать с появлением PCIe 4.0.

Как объясняет Дэвид Вульф, ведущий инженер в Datacenter Technologies, 4-портовые накопители NVMe способны принимать данные со скоростью свыше 20 Гбит/с при записи и выдавать со скоростью около 25 Гбит/с при чтении. Чтобы поддерживать такой темп, для каждого накопителя в системе нужно установить адаптер 25GbE или 32GFC и выделить на хосте по 8 линий PCIe. Построение системы без узких мест и переподписки — непростая задача.

Поддержка различных вариантов транспорта для NVMe-oF, с одной стороны, предоставляет свободу выбора, с другой стороны, ставит вопрос о предпочтительном выборе. Сторонники RDMA уверены, что именно эта технология будет наиболее востребована в качестве способа реализации NVMe-oF. Так, согласно прогнозам G2M Research, в ближайшие два-три года в мире будет продаваться в три раза больше Ethernet-адаптеров с поддержкой NVMe-oF, чем всех остальных. В то же время приверженцы FC-NVMe, заявляя о необоснованности таких прогнозов, предрекают NVMe-oF на базе Ethernet такую же судьбу, какая постигла технологию FСoE.

Fibre Channel остается предпочтительной технологией для реализации сетей хранения. И Gartner, и IDC согласны с тем, что основная доля (70–80%) флеш-массивов подключаются к FC SAN. Это преимущественно сети Fibre Channel 5-го или 6-го поколения, которые уже готовы к передаче трафика NVMe-oF в отличие от обычных сетей Ethernet, где для поддержки NVMe-oF требуется модернизация аппаратного обеспечения. К тому же, делая ставку на Ethernet, потом придется выбирать между двумя несовместимыми вариантами — RoCE и iWARP, а точнее, тремя, поскольку между RoCEv1 и RoCEv2 совместимости тоже нет.

С принятием стандарта NVMe over TCP станет доступен дешевый и простой способ реализации NVMe-oF по Ethernet. Вот только захотят ли компании переводить критичный трафик систем хранения на Ethernet, если они столько лет предпочитали Fibre Channel?

Дмитрий Ганьжа,? главный редактор «Журнала сетевых решений/LAN»