NVMe over RoCE

1. 概览
网络从协议的角度上来说,分为
应用层(http)
传输层(tcp/udp)
网络层(ip,路由,拥塞)
数据链路层(mac,以太网,交换机)
物理层

NVMe over RoCE, 全称:Non-Volatile Memory Express over RDMA over Converged Ethernet
RoCE通过以太网来传播,基于ipv4/v6,FCoE(以太网光纤通道)等。工作在传输层。
PCIe, 全称:Peripheral Component Interconnector Express

RoCE v2基于UDP/IPv4和UDP/IPv6开发,提供保序和拥塞控制。

RDMA和RoCE之间的关系
RoCE是一种4层网络协议,基于IP/UDP来传输数据。
RDMA是一种用户态内存拷贝技术,对标取代内核TCP协议栈中存在的多次内存。
RDMA可以通过RoCE, InfiniBand, iWARP等协议在网络上传输。

上层App通过调用指定的api库,使用RDMA。
同时网卡要支持RDMA。

2. 基本流程
RDMA的工作原理:

  1. 和目标端建立连接,初始化channel链接。每个channel由一对Queue Pairs组成,
    每对儿QP由SendQueue和ReceiveQueue构成。同时提供CompleteQueue, 用于通知消息完成。
  2. 创建并初始化QP, 同时和对端交换QP信息。
  3. 注册内存给网卡,网卡返回访问内存的key。
  4. 用户创建并提交请求(WR)到工作队列中(WQ)。网卡异步处理请求,完成请求以后把通知放到CQ中。

RDMA具体请求原理:

  1. send/recv
    双边操作,发送端和接收端注册自己的工作情况,实现数据的发送、接收和处理。
  2. 读 pull
    源端通知目标端准备虚拟内存地址和内存key,源端再注册自己的内存进去,执行read操作。
  3. 写 push
    源端通知目标端准备虚拟内存地址和内存key,源端再注册自己的内存进去,执行write操作。

3. 相关代码和资料
编程资料
基于RDMA写的client和server: https://github.com/tarickb/the-geek-in-the-corner/tree/master
IBM的官方库文档:https://www.ibm.com/docs/en/aix/7.1?topic=ofed-verbs-api
github上的库文件:https://github.com/linux-rdma/rdma-core

深入网络相关:https://zhuanlan.zhihu.com/p/551845192
短中期内需要学习的书籍:
尹圣雨的《TCP/IP 网络编程》
游双《Linux高性能服务器编程》 (带有实践)
《TCP/IP 协议详解》(卷一/二,中长期必看)

附:
nvme协议相关:
NVMe是一套基于PCI总线的,访问非易失性存储介质的总线规范,对标SAS和SATA。
NVMe over Fabrics是一套远程访问NVMe设备的协议,传输层可以基于RoCE/FC/InfiniBand等系统。
NVMe比传统协议更快的原因是通道多(支持最多64000个通道,每个通道64000条commond)
NVMe协议:https://nvmexpress.org/specifications/
一些基本概念: NVMe把存储设备看做是Domain-EnduranceGroup-NVMSet-Namespace 这一系列的树状结构
同时用户通过Controller来控制这些存储设备。
Controller可以通过灵活的方式,多用户多Controller,单用户多Controller,单用户单Controller,多用户单Controller等等。
Controller控制的最小单位是Namespace,也是非常灵活。Namespace是实际的物理单位,通过匹配多个NSID,可以实现和上层Controller的解耦。
Controller分为三种类型,I/O Controller, Administration Controller, Discovery Controller

posted @   kiman  阅读(309)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示