Вообще это хороший вопрос, если он без троллинга, потому что лично я, например, не видел NVMe-oF/TCP и не понимал в нем смысла.Когда люди настраивают NVMe over Fabriс, они понимают что им нужны 2 вещи:
1) Скорость обращения к диску от внешнего сервера, особенно когда речь идёт о низких задержках
2) Снижение требований к центральному процессору, опять это влияет на задержки
Дело не в пропускной способности, короче.
Тут нужно понять несколько вещей про специфику NVMe и про его подачу через сеть:
1. NVMe контроллер не может быть собран в "аппаратный RAID"
Я беру это в кавычки, потому что что называть аппаратным рейдом в 2023 году - тот еще вопрос. NVMe-диск прицепляется напрямую к процессору через PCI Express, в то время как обычные решения про RAID через HBA берут несколько lane-ов и имеют на себе прошивку, чип-сопроцессор и отдельный RAM и подключают диски на себя. Нельзя просто так взять NVMe-диск и воткнуть в "RAID-контроллер", в плату RAID, потому что дело именно в наличии контроллера и прошивки на стороне самого диска (бомжовые берут Generic-прошивку от производителя матплаты, но она всё равно нужна). Ожидается, что вы подключаете NVMe напрямую к соответствующему процессору, поэтому любая блочная абстракция по этим дискам всегда будет программной.
2. В NVMe нет смысла делать RAID 0
Блоки памяти внутри самого диска распараллеливаются. Этот самый RAID0 у вас всегда включен и всегда применяется средствами контроллера NVMe внутри диска. Из-за этого у вас получится так, что программный RAID1 и программный RAID10 на NVMe дисках отличаются по скорости в пределах погрешности, опять же если у вас однопроцессорный сервер и они подключены в рамках одного узла NUMA. Чтобы у вас там все не ломалось есть механизмы коррекции ощибок средствами контроллера по аналогии с Patrol Scrub для RAM.
3. NVMe контроллер не является SCSI-совместимым контроллером
Из-за этого у него всё свое в том числе сетевой стек. Ради обратной совместимости поддерживается подача NVMe-дисков через традиционные протоколы впроде iSCSI или FCP (Fiber Channel Protocol), но это не рекомендуется делать.
Основные варианты сетевого транспорта NVMe-oF:
- NVMe over InfiniBand
- NVMe over Fiber Channel
- NVMe over Ethernet (имеет несколько вариантов):
- NVMe over RoCE
- NVMe over iWarp
- NVMe over TCP (про него речь в новости)
Для обратной совместимости можно подать диски через:
- iSCSI
- FCoE
Из-за технических ограничений API SCSI возникают накладные расходы по работе с командами, поэтому не рекомендуется использовать чистый FC и тем более FCoE, а также iSCSI средствами ОС для работы с этими дисками.
Если вы не покупали выделенную Storage-сеть средствами InfiniBand или Fiber Channel (который медленнее и дороже чем даже Infiniband), а пользуетесь Ethernet сетями для организации сети хронения, то вы можете использовать RDMA для подачи этого диска. В зависимости от того, кто производитель вашего сетевого адаптера у вас будет либо RoCE (это по сути RDMA over UDP) или iWarp (это RDMA over TCP).
RDMA убирает нагрузку с процессора по работе с сетевым стеком для стораджа и снижает задержки. Протоколы гуглятся.
В общем вы уже начали понимать, к чему я клоню...
> А какой "use case" у этой технологии?
NVMe over TCP будет работать быстрее чем iSCSI, спору нет, но может просто настроить iWarp?
Просто RDMA снизит задержки и при правильной конфигурации RoCE выдаст вам прекрасную производительность. В случае с применением 100GB адаптеров Ethernet вы переплюнете абсолютно всё что только можно. Но я могу понять, почему люди этого не делают:
- Вам нужны сетевые карты, которые его умеют (Nvidia/Mellanox, Cavium/QLogic, Broadcom)
- Вам нужно обратиться к сетевому администратору для настройки сети, потому что вам требуется расширения Ethernet DCB на сети, чтобы это работало правильно
Альтернативой является iWarp, который снижает нагрузку на CPU и поддерживается на сетевых адаптерах Chelsio, Intel, Cavium/QLogic. Его настраивать слегка проще, но вам все равно потребуется настроить DCB и lossless-сеть для того чтобы приблизиться к тем низким задержкам, которые даёт RoCEv2. И да, у вас будет TCP.
По моему скромному мнению, NVMe over TCP существует для специфического юзкейса, когда вы понакупили себе дисков NVMe в сервера, а на нормальную сетевку вам денег не хватило, поэтому у вас не поддерживается RDMA.
Опять же, те кто так производит закуп серверного оборудования скорее всего и про NVMe over TCP не в курсе, поэтому будет настраивать iSCSI себе везде... в общем на ваш вопрос про "use case" у меня нет однозначного ответа.