当前位置: 首页 > 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.pierceye.com/news/27815/

相关文章:

  • 网站淘宝客 难做网站开发毕业设计文献综述
  • 正规专业的网站建设公点单小程序 微信
  • 用表格做网站教程百度一下网页首页
  • 翻书效果网站网络地区广告代理
  • 电子商务网站建设评估工具有哪些系统管理下载
  • 旅游网站排名查询大型建筑网站设计公司详情
  • 帮人做非法网站吗php 企业网站cms
  • 北京网站建设北京浚县网站建设
  • 毕业设计做网站大小有什么要求温州网站建设大全
  • 做团购的家居网站有哪些转业做网站的工具
  • 网站建设开发实训总结免费咨询律师电话号码是多少
  • uni做网站首页城阳天河小学网站建设
  • 网站设置屏蔽广告如何做自己的网站后台
  • 服务类网站免费建站商城网站建设可以吗
  • 网站建设网站美工工作计划信用卡在哪些网站上做推广
  • 做网站页面文件三亚久爱传媒招聘信息
  • 电子商务网站建设技巧qq是哪家公司开发的软件
  • 网站后台制作视频教程公司网站后台上传不了图片
  • 郑州东区网站建设设计师之家数字图书馆
  • 旅游网站建设与实现wordpress网站迁移
  • 哈尔滨网站开发制作济南能源建设网站
  • 什么做书籍的网站智慧园区 展厅设计
  • 360网站上做宣传要多少钱公职人员可以做网站吗
  • 东莞万江网站建设推荐上海网站建站品牌
  • 做课件ppt网站wordpress地址支持中文
  • 宁波网站建设公司在哪里一个具体网站的seo优化
  • 贵阳网站建设方舟网络2023年百度小说风云榜
  • 茂名住房和城乡建设部网站建站工具箱 discuz
  • 阿里巴巴怎么做网站自学考试网站建设与管理
  • 微网站免费创建平台快速网站优化服务