当前位置: 首页 > news >正文

做网站云服务器选择多大带宽微信小程序怎么做会员系统

做网站云服务器选择多大带宽,微信小程序怎么做会员系统,广东莞建建设工程有限公司,十大社区团购平台排名1. 前言 在使用RDMA操作之前#xff0c;我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组#xff0c;sg_list是用来存放ibv_sge元素#xff0c;那么什么是SGL以及什么是sge呢#xff1f;对于一个使用RDMA进行开发的程序员来说#…1. 前言 在使用RDMA操作之前我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组sg_list是用来存放ibv_sge元素那么什么是SGL以及什么是sge呢对于一个使用RDMA进行开发的程序员来说我们需要了解这一系列细节。 2. SGE简介 在NVMe over PCIe中I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持PRP;而在NVMe over Fabrics中无论是管理命令还是I/O命令都只支持SGL。 RDMA编程中SGL(Scatter/Gather List)是最基本的数据组织形式。 SGL是一个数组该数组中的元素被称之为SGE(Scatter/Gather Element)每一个SGE就是一个Data Segment(数据段)。RDMA支持Scatter/Gather操作具体来讲就是RDMA可以支持一个连续的Buffer空间进行Scatter分散到多个目的主机的不连续的Buffer空间。Gather指的就是多个不连续的Buffer空间可以Gather到目的主机的一段连续的Buffer空间。 下面我们就来看一下ibv_sge的定义 struct ibv_sge {         uint64_t        addr;         uint32_t        length;         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) 2. ivc_post_send接口 而在数据传输中发送/接收使用的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列表放置到接收队列中 下面以ibv_post_send()为例说明SGL是如何被放置到RDMA硬件的线缆(Wire)上的。 ibv_post_send()的函数原型 #include infiniband/verbs.h int ibv_post_send(struct ibv_qp *qp,                    struct ibv_send_wr *wr,                   struct ibv_send_wr **bad_wr); ibv_post_send将以send_wr开头的工作请求WR的列表发布到Queue Pair的Send Queue。 它会在第一次失败时停止处理此列表中的WR可以在发布请求时立即检测到并通过bad_wr返回此失败的WR。 参数wr是一个ibv_send_wr结构如infiniband / verbs.h中所定义。 3. ibv_send_wr结构 struct ibv_send_wr {         uint64_t                wr_id;                  /* User defined WR ID */         struct ibv_send_wr     *next;                   /* Pointer to next WR in list, NULL if last WR */         struct ibv_sge         *sg_list;                /* Pointer to the s/g array */         int                     num_sge;                /* Size of the s/g array */         enum ibv_wr_opcode      opcode;                 /* Operation type */         int                     send_flags;             /* Flags of the WR properties */         uint32_t                imm_data;               /* Immediate data (in network byte order) */         union {                 struct {                         uint64_t        remote_addr;    /* Start address of remote memory buffer */                         uint32_t        rkey;           /* Key of the remote Memory Region */                 } rdma;                 struct {                         uint64_t        remote_addr;    /* Start address of remote memory buffer */                         uint64_t        compare_add;    /* Compare operand */                         uint64_t        swap;           /* Swap operand */                         uint32_t        rkey;           /* Key of the remote Memory Region */                 } atomic;                 struct {                         struct ibv_ah  *ah;             /* Address handle (AH) for the remote node address */                         uint32_t        remote_qpn;     /* QP number of the destination QP */                         uint32_t        remote_qkey;    /* Q_Key number of the destination QP */                 } ud;         } wr; }; 在调用ibv_post_send()之前必须填充好数据结构wr。 wr是一个链表每一个结点包含了一个sg_list(i.e. SGL: 由一个或多个SGE构成的数组), sg_list的长度为num_sge。 4. RDMA 提交WR流程 下面图解一下SGL和WR链表的对应关系并说明一个SGL (struct ibv_sge *sg_list)里包含的多个数据段是如何被RDMA硬件聚合成一个连续的数据段的。 4.1 第一步创建SGL 从上图中我们可以看到wr链表中的每一个结点都包含了一个SGLSGL是一个数组包含一个或多个SGE。通过ibv_post_send提交一个RDMA SEND 请求。这个WR请求中包括一个sg_list的元素。它是一个SGE链表SGE指向具体需要发送数据的Buffer。 listibv_send_wr vectoribv_sge send_flags 保序 M : N的ScatterGather 4.2 第二步使用PD进行内存保护 我们在发送一段内存地址的时候我们需要将这段内存地址通过Memory Registration注册到RDMA中。也就是说注册到PD内存保护域当中。一个SGL至少被一个MR保护, 多个MR存在同一个PD中。如图所示一段内存MR可以保护多个SGE元素。 4.3 调用ibv_post_send()将SGL发送到wire上去 在上图中一个SGL数组包含了3个SGE, 长度分别为N1, N2, N3字节。我们可以看到这3个buffer并不连续它们Scatter(分散)在内存中的各个地方。RDMA硬件读取到SGL后进行Gather(聚合)操作于是在RDMA硬件的Wire上看到的就是N3N2N1个连续的字节。换句话说通过使用SGL, 我们可以把分散(Scatter)在内存中的多个数据段(不连续)交给RDMA硬件去聚合(Gather)成连续的数据段。 附录一 OFED Verbs
http://www.zqtcl.cn/news/27815/

相关文章:

  • wordpress网站布局jsp做的网页是网站吗
  • 100个免费推广网站下载wordpress页面链接404错误
  • 地产公司网站建设计划书wordpress的hook
  • 有没有给宝宝做辅食的网站电商境外如何做推广
  • 搭建商城网站当当网网站建设步骤
  • Wordpress插件开发中文字幕深圳优化公司
  • 郑州网站制作推广深圳的网站建设
  • 如何自已建网站装饰工程公司排名
  • 廊坊网站建设网站开发人员构成
  • 深圳网站建设哪里好做手机网站哪家好
  • wordpress移动到回收站时发生错误房地产手机网站模板
  • 网站制作教程ppt如何做黑客攻击网站
  • 网站用哪个数据库山西网站建设公司排名
  • 网站资料要提供哪些产品是做网站
  • 泰安网站建设企业网站服务器租用方法
  • wordpress查看站点tk域名
  • 网站页面设计如何快速定稿as3.0网站制作教程
  • 做古代风格头像的网站自媒体账号下载注册
  • 网络小说网站建设免费域名服务
  • 百度网站建设的一般要素商业网站开发需求
  • 网站建设背景 前景分析南宁互联网推广
  • 网站开发前端需要学什么wordpress充值中心
  • 建设企业网站的公司如何自己设置网站
  • 做网站的注意事项scrm服务商
  • 如何做旅游休闲网站给自己公司做网站运营
  • 做推广优化的网站有哪些内容广州做网络服装的网站建设
  • 免费公司主页网站织梦网站栏目建设
  • 广州网站建设案例网站ftp做网站的会给嘛
  • 哪里能做网站怎么制作网站站内链接
  • 信用网站一体化建设一个手机app开发需要多少钱