SPDK/NVMe存储技术分析之理解SGL

本文深入分析了NVMe over PCIe和NVMe over Fabrics中SGL(Scatter Gather List)的应用,特别是在RDMA网络编程中的关键角色。SGL允许将分散在内存中的数据段聚合为连续的数据流,简化了高速数据传输。通过实例解释了如何创建SGL,使用内存保护域(PD)以及如何通过ibv_post_send()将SGL发送到RDMA硬件,实现高效的数据传输。
摘要由CSDN通过智能技术生成

在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持PRP;而在NVMe over Fabrics中,无论是管理命令还是I/O命令都只支持SGL。NVMe over Fabrics既支持FC网络,又支持RDMA网络。众所周知,在RDMA编程中,SGL(Scatter/Gather List)是最基本的数据组织形式。 SGL是一个数组,该数组中的元素被称之为SGE(Scatter/Gather Element),每一个SGE就是一个Data Segment(数据段)。其中,SGE的定义如下:

结构ibv_sge {
        uint64_t 地址;
        uint32_t 长度;
        uint32_t lkey;
};
  • addr: 数据段所在的虚拟内存的起始地址 (Virtual Address of the Data Segment (i.e. Buffer))

  • length: 数据段长度(Length of the Data Segment)

  • lkey: 该数据段对应的L_Key (Key of the local Memory Region)

而在数据传输中,发送/接收使用的Verbs API为:

  • ibv_post_send() - post a list of work requests (WRs) to a send queue 将一个WR列表放置到发送队列中

  • ibv_post_recv() - post a list of work requests (WRs) to a receive queue 将一个WR列表放置到接收队列中

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值