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的工作原理:
- 和目标端建立连接,初始化channel链接。每个channel由一对Queue Pairs组成,
每对儿QP由SendQueue和ReceiveQueue构成。同时提供CompleteQueue, 用于通知消息完成。 - 创建并初始化QP, 同时和对端交换QP信息。
- 注册内存给网卡,网卡返回访问内存的key。
- 用户创建并提交请求(WR)到工作队列中(WQ)。网卡异步处理请求,完成请求以后把通知放到CQ中。
RDMA具体请求原理:
- send/recv
双边操作,发送端和接收端注册自己的工作情况,实现数据的发送、接收和处理。 - 读 pull
源端通知目标端准备虚拟内存地址和内存key,源端再注册自己的内存进去,执行read操作。 - 写 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)