Мы продолжаем исследовать работу протокола RDMA в СХД Qsan, начатую в предыдущей статье. Безусловно, самым интересным эффектом от применения данного протокола в разрезе его использования для доступа к данным является возможный прирост производительности. По крайней мере идейная составляющая самой концепции протокола RDMA на это недвусмысленно намекает. Так ли это на самом деле?

Чтобы не повторяться здесь с описанием работы протокола в отношении СХД, оставим ссылку на нашу предыдущую статью. Здесь же рассмотрим в практической плоскости, за счет чего мы можем получить заявленный прирост производительности. Стоит сразу оговориться, что само применение термина RDMA происходит зачастую весьма широко. Критиковать мы здесь никого не хотим, поскольку и сами можем допускать подобные вольности ради упрощения повествования. Поэтому будем придерживаться терминологии, которая используется Qsan.
Для блочного доступа к данным как правило используются широко известные протоколы iSCSI и Fibre Channel, которые поддерживаются любыми СХД, например, серии XCubeSAN и XCubeNXT. RDMA использует те же самые протоколы для физического соединения, но логически отличается от них. Варианты RDMA могут быть следующими:
FC-NVMe – использование среды Fibre Channel;
NVMe-oF TCP – использование среды Ethernet;
RDMA over iSCSI/NFS – также использование среды Ethernet.
Несмотря на схожие аббревиатуры и некоторую возможную путаницу с ними на первый взгляд, ничего сложного тут нет. На момент написания статьи, в СХД Qsan поддерживается только RDMA over Ethernet, а поддержка RDMA over FC (FC-NVMe) будет доступна позднее с выходом новых версий FW.
Давайте рассмотрим, чем принципиально различаются между собой NVMe-oF TCP и RDMA over iSCSI/NFS. Независимо от типа протокола для его реализации требуется поддержка RDMA как на уровне hardware (в сетевых картах и коммутаторах), так и на уровне software (в ОС хоста и на стороне СХД).
NVMe-oF TCP подразумевает использование RDMA по всему маршруту “ОС хоста – пространство хранения на СХД”. То есть становится в некотором роде эквивалентом внутреннего NVMe накопителя сервера. Разумеется, для реализации подобного типа соединения обязательно необходимо использовать накопители NVMe на стороне СХД. Именно поэтому данный тип протокола поддерживается только в моделях All Flash NVMe.
Принцип подключения к СХД при использовании NVMe-oF TCP заключается в создании на СХД специальных entity (вместо привычных target) и подключения к ним из ОС хоста при помощи RDMA. В настоящий момент такое подключение поддерживается на VMware и Linux-подобных типах ОС.
RDMA over iSCSI/NFS выглядит несколько проще, поскольку RDMA применяется только на участке внешнего интерфейса между сервером и СХД. По сути, это – несколько модифицированный протокол iSCSI в случае блочного доступа или NFS в случае файлового доступа. Так как работа данного протокола заканчивается на входе в СХД, здесь могут использоваться любые типы накопителей (даже обычные NL-SAS диски). Именно поэтому данный протокол поддерживается не только в All NVMe системах, но и в более доступных гибридных XCubeNXT.
Со стороны СХД необходимо просто создать привычные target или NFS папки и подключиться к ним из ОС хоста с помощью чуть модифицированных команд iscsiadm или mount с указанием использования протокола RDMA. Данное подключение также возможно только на Linux-подобных типах ОС.
Теперь давайте взглянем, насколько производительность может быть улучшена с применением RDMA. В качестве подопытного образца выступает AFA XF4226D с 24 дисками NVMe. В системе создавались два пула по 12 дисков с одинаковым типом RAID (5 или 10). К СХД были подключены два хоста через 4x 25GbE каждый напрямую без коммутатора. Каждый хост с Debian работал со своим пулом. В таблице ниже приведена суммарная производительность обоих хостов в разных режимах работы.

Как видно из приведенных тестов, переход между обычным iSCSI и “улучшенным” RDMA over iSCSI благотворно влияет прежде всего на последовательные операции. А вот переключение на так называемый full NVMe протокол NVMe-oF TCP уже полезно для любых типов запросов ввода/вывода.
Отчасти благодаря поддержке RDMA новые AFA получили значительную прибавку в производительности, поскольку на стандартных версиях блочных протоколов даже обычные SAN порой выглядят ничуть не хуже. Это еще раз подтверждает известный тезис о том, что значительный количественный рывок возможен лишь при повышении “качественной” составляющей какой-либо технологии. Однако, новые технологии подразумевают под собой наличие определенных знаний и опыта при их внедрении. И мы, как дистрибьютеры Qsan, готовы поделиться этими знаниями и опытом с нашими заказчиками.
NKulikov
Ну как бы нет. NVMoF TCP не требует ни RDMA, ни lossless сети. В этом как раз его смысл. https://nvmexpress.org/wp-content/uploads/NVM-Express-TCP-Transport-Specification-Revision-1.1-2024.08.05-Ratified.pdf Более того, а какой RDMA протокол использует TCP (iWarp не в счет - он умер уже)?
Оно наоборот. Это iSCSI over RDMA (aka iSER/SRP), NVMe over RoCEv2, NFS over RDMA. Потому что вы берете iSCSI (или NFS, или NVMe) команды и заворачиваете их в RDMA на уровне транспорта (транспорт может быть разный - но нынче это исключительно RoCE v2 на практике, если речь про Ethernet).
Вот картинка для NVMe:
NVMe over RoCE v2, NVMe/FC, iSER, NVMe/TCP тоже работает в общем-то с любыми дисками в СХД. Это (front-end и back-end) теплое и мягкое. Вот вам пример от NetApp (https://www.netapp.com/media/8127-sb-3904.pdf), где на фронте NVMe/FC,IB,RoCE, а на бекенде SAS:
И в целом, тут все в большую кучу. У вас есть отдельно блочные протоколы (SCSI, NVMe) и файловые (NFS), а отдельно есть транспорт для этих протоколов - TCP (iSCSI для SCSI over TCP, NVMe/TCP, nfs over TCP), RoCEv2 (iSER для scsi, NVMe/RoCEv2 для nvme, NFS over RDMA), PCIe, IB, etc.
Вот наглядная картинка от NVMe (https://nvmexpress.org/specifications/), где есть транспортные протоколы, а есть сам NVMe спецификация:
Skilline Автор
Спасибо за развернутый комментарий. Мы именно поэтому и упомянули в статье, что много где (и Qsan не исключение) имеется определенная путаница с терминами.
NKulikov
Так проблема не в терминах (хотя мне не очень понятно, что там за путаница, если это все стандарты и их можно открыть и посмотреть, как там пишется), а в том, что вы пишите вещи, которые не соответствуют действительности.
В первую очередь, это касается NVMe/TCP прямо целиком, потому что вы почему-то считаете, что это RDMA, хотя это не так. И отсюда строите странные выводы на протяжении всей статьи. Но в том числе и "RDMA over iSCSI/NFS", а про NVMe over RoCEv2 почему-то совсем забыли.
Skilline Автор
Собственно, RoCEv2 здесь и используется. Но поскольку производитель не считает нужным где-либо упоминать этот термин, мы также воздержались от его использования.
NKulikov
Эм.. Т.е. на самом деле вы всю статью пишите про NVMe over RDMA/RoCEv2, но называете это NVMe over TCP? Это же принципиально два РАЗНЫХ протокола/транспорта.
Ну и даже в блоге, который вы привели, вполне себе указывается все три варианта - "NVMe-oF supports Fibre Channel, RDMA (Remote Direct Memory Access), and TCP/IP protocols", где первый это NVMe/FC, второй NVMe/RDMA (RoCEv2, если речь про Ethernet), третий NVMe/TCP (и в нем нет RDMA).