Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RDMA技术 - 请求事件SE(SOLICITED EVENT)-降低CPU开销

RDMA技术 - 请求事件SE(SOLICITED EVENT)-降低CPU开销

原创
作者头像
晓兵
发布于 2024-12-21 01:21:03
发布于 2024-12-21 01:21:03
24100
代码可运行
举报
文章被收录于专栏:DPUDPU
运行总次数:0
代码可运行

术语

  • SDP: Sockets Direct Protocol, RDMA SDP(RDMA over SDP)是一种使用套接字直接协议(SDP)通过UDPIPv4 网络实现 远程直接内存访问(RDMA)通信的协议。SDP 是一种传输协议,旨在通过标准以太网网络(包括使用 UDP 的网络)提供 RDMA 功能,从而实现低延迟、高吞吐量通信,而无需 InfiniBand 等专用硬件

简介

请求事件是一种机制,请求方发送消息,当响应方收到消息时,响应方会生成特殊(即请求的)事件。当工作完成添加到响应方(在接收队列中)的完成队列时,将为消息生成事件,因此它仅对发送(SEND)、立即发送(Send with immediate)和 RDMA 立即写入(Write with immediate)操作有效(因为只有这些操作会在响应方生成工作完成)

何时使用请求事件?

如果希望降低 CPU 消耗,并且不想使用常规频繁的工作完成事件,即下一个工作完成时,接收方总是将WQE添加到完成队列, 而是发送方将其标记为“特殊”的工作完成,那么请求事件机制就是答案

使用请求事件可以帮助减少接收方的 CPU 消耗,因为它可以休眠直到收到带有请求事件的消息(即来自发送方的“提示”)。与每次收到消息时唤醒并检查特定条件相比(即处理的事件更少)。

一般SE配合CQ中断模式使用

如何使用

发送方

发送方调用ibv_post_send()时,需要在 send_wr.send_flags 中设置IBV_SEND_SOLICITED标记位。注意: 这仅与上面提到的操作相关

如UCX中的零拷贝发送(uct_rc_verbs_ep_am_zcopy):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ucs_status_t do_am_zcopy -> 零拷贝
ucs_status_t uct_rc_verbs_ep_am_zcopy(uct_ep_h tl_ep, uint8_t id, const void *header,
                                      unsigned header_length, const uct_iov_t *iov,
                                      size_t iovcnt, unsigned flags,
                                      uct_completion_t *comp)
{
    uct_rc_verbs_iface_t     *iface = ucs_derived_of(tl_ep->iface, uct_rc_verbs_iface_t);
    uct_rc_verbs_ep_t        *ep    = ucs_derived_of(tl_ep, uct_rc_verbs_ep_t);
    uct_rc_iface_send_desc_t *desc  = NULL;
    struct ibv_sge sge[UCT_IB_MAX_IOV]; /* First sge is reserved for the header */
    struct ibv_send_wr wr;
    int send_flags;
    size_t sge_cnt;/* 1 iov consumed by am header */
    UCT_CHECK_IOV_SIZE(iovcnt, iface->config.max_send_sge - 1,
                       "uct_rc_verbs_ep_am_zcopy");
    UCT_RC_CHECK_AM_ZCOPY(id, header_length, uct_iov_total_length(iov, iovcnt),
                          iface->config.short_desc_size,
                          iface->super.super.config.seg_size);
    UCT_RC_CHECK_RES_AND_FC(&iface->super, &ep->super, id);UCT_RC_IFACE_GET_TX_AM_ZCOPY_DESC(&iface->super, &iface->short_desc_mp,
                                      desc, id, header, header_length, comp,
                                      &send_flags);
    sge[0].length = sizeof(uct_rc_hdr_t) + header_length;
    sge_cnt = uct_ib_verbs_sge_fill_iov(sge + 1, iov, iovcnt);
    UCT_RC_VERBS_FILL_AM_ZCOPY_WR_IOV(wr, sge, (sge_cnt + 1), wr.opcode);
    UCT_TL_EP_STAT_OP(&ep->super.super, AM, ZCOPY,
                      (header_length + uct_iov_total_length(iov, iovcnt)));
    // 发送方设置请求事件标记
    uct_rc_verbs_ep_post_send_desc(ep, &wr, desc, send_flags | IBV_SEND_SOLICITED,
                                   UCT_IB_MAX_ZCOPY_LOG_SGE(&iface->super.super));
    UCT_RC_UPDATE_FC(&ep->super, id);return UCS_INPROGRESS;
}

响应方(接收方)

应该在接收完成队列上调用ibv_req_notify_cq() ,该队列可能会收到带有 Solicited 事件的传入消息;solicited_only参数值应该非零。

该还函数参数和实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
请求 CQ 上的完成通知。当条目添加到 CQ 时,将向与 CQ 关联的完成通道(completion channel)添加事件。
    @cq:请求通知的完成队列。
    @solicited_only:如果非零,则仅为下一个请求事件完成(SE),生成CQ事件。如果为零,则任何 CQ 条目(无论是否请求)都将生成事件 (Notifies only if the WR is flagged as solicited)
static inline int ibv_req_notify_cq(struct ibv_cq *cq, int solicited_only)
{
    return cq->context->ops.req_notify_cq(cq, solicited_only);
}

这将导致ibv_get_cq_event()被阻塞,直到发生下列情况之一:

  • 带有请求事件指示符的传入消息的下一个工作完成将被添加到完成队列。这最多可能发生一次,如果需要再次等待下一个请求事件,则可能需要再次调用ibv_req_notify_cq() 。
  • 任何有错误的工作完成都会被添加到完成队列(无论它来自发送队列还是接收队列)

IB规范中的SE

传输层中SE

概括为一句话: A facility by which a message sender may cause an event to be generated at the recipient when the message is received

在基本传输头BTH中的SE

详解SE标记位

  • 请求者将此位设置为 1,表示响应者应调用 CQ 事件处理程序。其他操作指南: • SE 位应仅在 SEND、SEND with Immediate 或 RDMA WRITE with Immediate 业务操作的最后一个或唯一数据包中设置(即用于通知整体操作完成)。 • 有关影响 HCA 的其他操作指南,请参阅第 689 页上的第 11.4.2.2 节“请求完成通知”。
  • SE 位不被视为数据包头验证的一部分,即,收到设置了此位但不符合调用要求的数据包不会导致生成 NAK。
  • C9-3:对于 HCA,如果入站请求数据包的 BTH 中的 Solicited Event 位设置为 1,并且其他 SE 操作指南有效,则它应调用 CQ 事件处理程序。
  • o9-1:对于支持 Solicited Events 的 TCA,如果入站请求数据包的 BTH 中的 Solicited Event 位设置为 1,并且其他 SE 操作指南有效,则它也应调用 CQ 事件处理程序。
  • C9-4:响应方不应在数据包头验证的 BTH 部分考虑 SE 位。除了在 SEND、SEND with Immediate 或 RDMA Write with Immediate 操作中使用外,SE 位还可以在 SEND with Invalidate 操作中设置。在这种情况下,SE 位应仅在 SEND with Invalidate 的最后一个或唯一一个数据包中设置。在所有其他方面,SE 位的使用遵循与正常 SEND 操作中 SE 位的使用相同的规则

一般在创建CQ时会设置事件处理程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
创建CQ时设置回调函数
static int create_cq
    ...
    cq->comp_handler  = ib_uverbs_comp_handler;
    cq->event_handler = ib_uverbs_cq_event_handler;
    ...
​
​
static int UVERBS_HANDLER(UVERBS_METHOD_CQ_CREATE)...
​
     cq->comp_handler  = ib_uverbs_comp_handler;
​
     cq->event_handler = ib_uverbs_cq_event_handler;...

请求完成通知

11.4.2.2 请求完成通知

描述:当指定类型的下一个完成条目添加到指定 CQ 时,请求调用 CQ 事件处理程序。对于特定的 CQ,每次请求完成通知调用时,处理程序最多调用一次。在启用通知之前存在的任何 CQ 条目都不会导致调用处理程序, 完成事件有两种类型:请求的或未经请求的。当传入的发送或 RDMA 写入即时数据消息(设置了请求的事件标头位)导致成功的接收工作完成添加到 CQ 时,或者当不成功的工作完成添加到 CQ 时,会发生请求的完成事件。当任何其他成功的接收工作完成或任何成功的发送工作完成添加到 CQ 时,会发生未经请求的完成事件。

C11-29:CI 应支持请求的和未经请求的完成事件类型。消费者请求完成通知时,必须指定是否为以下事件调用通知回调:

• 仅限下一个请求的完成事件,或

• 下一个请求或非请求的完成事件。

C11-29.1.1:当“仅限下一个请求的完成事件”未完成时,CI 应在以下任一情况下调用通知回调:

• 设置了请求的事件标头位的传入发送导致成功的接收工作完成被添加到指定的 CQ。

• 设置了请求的事件标头位的传入 RDMA 写入和立即数据导致成功的接收工作完成被添加到指定的 CQ。

• 将不成功的发送或接收工作完成添加到指定的 CQ。

C11-29.1.2:当“下一个请求或非请求的完成事件”未完成时,CI 应在将任何工作完成添加到指定的 CQ 时调用通知回调。如果请求完成通知处于待处理状态,则在完成事件之前对同一 CQ 的请求完成通知的后续调用仅在通知发生时才会生效。下一个完成事件的请求完成通知优先于同一 CQ 的请求事件完成的请求完成通知。如果对同一 CQ 进行了多次请求完成通知调用,并且至少有一个请求将类型设置为下一个完成,则在将下一个完成添加到该 CQ 时将调用 CQ 事件处理程序。即使在指定 CQ 的完成事件之前进行了多个 CQ 通知请求,CQ 事件处理程序也只会被调用一次。一旦调用 CQ 事件处理程序,必须先注册另一个完成通知请求,然后才能再次调用 CQ 事件处理程序。

C11-30:当 CQ 上请求的完成类型的完成通知请求未完成,并且对该 CQ 进行了另一个指定下一个完成通知的请求时,CI 应将未完成的完成通知类型更改为下一个完成。

C11-31:当 CQ 上下一个完成的完成通知请求未完成,并且对该 CQ 发出了另一个通知请求时,CI 不得更改未完成的完成通知类型。在调用此例程之前,必须指定 CQ 事件处理程序。如果在生成事件时尚未注册 CQ 事件处理程序,则不会进行处理程序调用。调用 CQ 事件处理程序时,它仅表示已将新条目添加到指定的 CQ。HCA 和 CQ 句柄被传递给 CQ 事件处理程序,因此 CQ 事件处理程序可以确定哪个 CQ 导致它被调用。调用处理程序例程后,消费者必须再次调用请求完成通知,以便在向该 CQ 添加新条目时收到通知。消费者有责任调用轮询完成动词来检索工作完成。注意:如果消费者在没有与 CQ 关联的 CQ 事件处理程序 ID 的 CQ 句柄上请求完成通知,则该操作将不起作用。也就是说,不会生成任何完成事件。

输入修饰符:

• HCA 句柄。

• CQ 句柄。

• 请求的完成通知类型。类型是下一个完成或请求的完成发生时。

输出修饰符:

动词结果:

• 操作已成功完成。

• 无效的 HCA 句柄。

• 无效的 CQ 句柄。

• 无效的完成通知类型

IB传输层的一些问题 - SDP的请求事件

A4.11.2 请求事件

SDP 实现的SE功能, 偶尔需要停止半连接上的处理并等待以下消息之一到达后再继续:

  1. 流控制信用更新 SDP 消息 - 接收私有缓冲池的流控制信用已耗尽,因此无法向对等方发送数据、控制和/或 RDMA 广播;
  2. 数据或 RDMA 广告 SDP 消息 - ULP 已通过套接字接口选择调用或接收表示对数据感兴趣;
  3. RDMA 完成(或取消)SDP 消息 - 在取消注册发送或接收 RDMA 缓冲区之前,它必须完成 RDMA 传输或接收取消确认消息。典型的 SDP 实现将请求完成队列通知并阻止 ULP 进程(或线程),直到相应的消息到达并传递通知。使用 SE(请求事件)位的目的是当到达的消息与实现所需的 SDP 消息类不匹配时,尽量减少完成队列通知事件和相应的进程(或线程)唤醒。例如,如果数据源正在等待 RdmaRdCompl 消息来完成发送 ULP 缓冲区,并且在相反的半通道(本地数据接收器)上没有发布本地接收 ULP 缓冲区或本地调用套接字接口选择,则如果对等方发送数据消息或 SrcAvail RDMA 广告,它不应该收到相反的半连接的通知。为了实现这一目标,所有 SDP 消息都细分为请求的或非请求的 SDP 消息。请求的 SDP 消息最有可能需要立即关注,无论远程对等方的 ULP 行为如何,也无论远程对等方是否正在等待其他(非请求的)消息。请求的 SDP 消息定义为: • AbortConn、SuspComm、SuspCommAck、SendSm、SrcAvailCancel、SinkAvailCancel - 因为对于这些消息的发送者来说,其对等方尽快对其做出反应至关重要; • RdmaWrCompl、RdmaRdCompl、SinkCancelAck - 因为对等方很可能需要在收到这些消息后取消注册并释放 RDMA 缓冲区到 ULP; • 设置了 OOB_PRES 或 OOB_PEND 位的数据 - 因为对等方 SDP 实现很可能需要尽快通知 ULP 已收到此消息。 CA4-119:SDP 实现应请求为请求的 SDP 消息设置 InfiniBand 基本传输头中的 InfiniBand SE 位。未经请求的 SDP 消息是那些可能需要对等方立即关注的消息,但只有对等方才能决定是否需要通知 - 这取决于 ULP 行为或对等方的实现。未经请求的 SDP 消息定义为: • 未设置 OOB_PEND 或 OOB_PRES 位的 DisConn、SrcAvail、SinkAvail、数据 - 因为对等方只需要在 ULP 发出套接字接口选择或接收请求时立即处理这些消息; • ModeChange、ChRcvBuf、ChRcvBufAck - 因为在收到这些消息后,对等端只需要对自己生成的新消息或随后的请求的 SDP 消息采取行动(例如,它不会被阻止专门等待这些 SDP 消息)。 CA4-120:SDP 实现不得请求为未经请求的 SDP 消息设置 InfiniBand 基础传输标头中的 InfiniBand SE 位。 SE 位永远不适用于 RDMA 读取,而 RDMA 写入仅适用于包含即时数据的 RDMA 写入。由于 SDP 从不生成带有即时数据的 RDMA 写入,因此 SE 位不适用于由 SDP 生成的 RDMA 读取或 RDMA 写入请求

参考

RDMAmojo-SE: https://www.rdmamojo.com/2014/05/27/solicited-event/

IBM_ibv_req_notify_cq: https://www.ibm.com/docs/en/aix/7.1?topic=management-ibv-req-notify-cq

IB_SPEC

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Intel E810/ICE DPU RDMA 及MLX中断原理分析2(CE/AE)
接上文: https://cloud.tencent.com/developer/article/2472554
晓兵
2025/03/29
1370
Intel E810/ICE DPU RDMA 及MLX中断原理分析2(CE/AE)
UCX-UCT统一通信传输层3-服务端和客户端调用栈详解(及相关)_源码解读
https://github.com/ssbandjl/ucx/blob/master/category/uct_readme
晓兵
2023/10/30
1.3K0
UCX-UCT统一通信传输层3-服务端和客户端调用栈详解(及相关)_源码解读
UCX-UCT统一通信传输层1-简介
UCT(Unified Communication Transport)是一个传输层,它抽象了各种硬件架构之间的差异,并提供了支持通信协议实现的低级 API。该层的主要目标是以最小的软件开销提供对硬件网络资源的直接有效的访问。为此,UCT 依赖于低级驱动程序,例如 uGNI、Verbs、共享内存、ROCM、CUDA。此外,该层还提供通信上下文管理(基于线程和应用程序级别, 如: ucs_async_context_create, uct_worker_create)以及设备特定存储器(包括加速器中的存储器)的分配和管理的构造。在通信 API 方面,UCT 定义了立即(短消息,如: uct_ep_am_short)、缓冲区复制发送(bcopy,如: uct_ep_am_bcopy)和零拷贝(zcopy, 如: uct_ep_am_zcopy)通信操作的接口。短操作针对可以就地发布和完成的小消息进行了优化。bcopy 操作针对通常通过所谓的弹跳缓冲区发送的中等大小的消息进行了优化。最后,zcopy 操作公开零复制内存到内存通信语义。
晓兵
2023/10/22
1.2K0
UCX-UCT统一通信传输层1-简介
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
QP上可变化的属性描述了QP的发送和接收属性。 在 UC 和 RC QP 中,这意味着将 QP 与远程 QP 连接。 在 Infiniband 中,应向子网管理员 (SA) 执行路径查询,以确定 QP 应配置哪些属性或作为最佳解决方案,使用通信管理器 (CM) 或通用 RDMA CM 代理 (CMA) 连接 QP。 然而,有些应用程序(如ceph)更喜欢自行连接 QP,并通过套接字交换数据来决定使用哪些 QP 属性。 在 RoCE 中,应在连接的 QP 的 QP 属性中配置 GRH,或在 UD QP 的地址句柄(Address Handle)中配置 GRH。 在 iWARP 中,应仅使用通用 RDMA CM 代理 (CMA) 连接 QP。 结构体: struct ibv_qp_attr 描述了队列对QP的属性:
晓兵
2024/02/24
9684
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
Intel E810/ICE DPU RDMA 及MLX中断原理分析1(CE/AE)
一旦 E810 返回到 CEQE0,CEQE_Valid 位的极性就会切换,以避免软件需要为每个处理的 CEQE 返回并清除 CEQE_Valid 位(用极性位来提高处理效率)。
晓兵
2024/12/01
3920
Intel E810/ICE DPU RDMA 及MLX中断原理分析1(CE/AE)
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
4.9K0
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
DMA 代表直接内存访问。这意味着应用程序可以在 CPU 干预的情况下直接访问(读/写)主机内存。如果您在主机之间执行此操作,它将成为远程直接内存访问 (RDMA)
晓兵
2023/12/19
2K2
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
DAOS分布式存储_libfabric_高性能RPC_rdma网络_笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
6700
DAOS分布式存储_libfabric_高性能RPC_rdma网络_笔记
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
这篇文章描述了通过 PCI Express 结构在 CPU 和 NIC 之间发生的一系列协调事件,以通过 InfiniBand 互连传输消息并发出其完成信号。
晓兵
2024/06/16
1K0
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
UCX-UCT统一通信传输层2-深入-建连_数据收发主流程
LAG (Link Aggregation Group): 链路汇聚(bonding), 网络绑定可以将两个或多个网络接口组合成一个接口。它可以提高网络吞吐量和带宽,并在其中一个接口发生故障时提供冗余。NVIDIA ® BlueField ® DPU 可以选择以对主机透明的方式在 Arm 端配置网络绑定。在这种配置下,主机只能看到一个 PF, 参考: https://docs.nvidia.com/networking/display/bluefielddpuosv385/link+aggregation
晓兵
2023/10/26
1.6K0
UCX-UCT统一通信传输层2-深入-建连_数据收发主流程
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
参考之前的分享中, DAOS与RDMA分层关系如下图, DAOS引擎 -> CART(RPC/大块数据/集合RPC请求) -> Mercury(HG: RPC注册/回调/RPC操作/预期/非预期消息/大块消息/轮训/阻塞/网络抽象等) -> Libfabric(网络抽象层,对rxm,rdma verbs, socket, 共享内存等抽象) -> RDMA(verbs) -> rdma-core(用户态驱动) -> RDMA网卡硬件驱动(如:英伟达 mellanox迈络思), 今天咱们来探讨一下分层verbs接口调用详情
晓兵
2023/10/05
1.1K2
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
网络虚拟化:RDMA编程介绍
写这篇文章介绍了 RDMA 编程的基础知识,如有啥错误,欢迎各位大神指出,感觉我就闲不住,休日时间也得学习,哪里需要去哪里,需要哪里学哪里,我真是个苦命的程序媛o(╥﹏╥)o。
通信行业搬砖工
2023/09/07
2K0
网络虚拟化:RDMA编程介绍
Linux源码分析-RDMA的通信连接管理CM模块
RDMA CM 是一种通信管理器,用于设置可靠、连接和不可靠的数据报数据传输。 它提供用于建立连接的 RDMA 传输中立接口。 API 概念基于套接字,但适用于基于队列对 (QP) 的语义:通信必须通过特定的 RDMA 设备进行,并且数据传输基于消息。 RDMA CM 可以控制 RDMA API 的 QP 和通信管理(连接建立/拆除)部分,或者仅控制通信管理部分。 它与 libibverbs 库定义的 verbs API 结合使用。 libibverbs 库提供了发送和接收数据所需的底层接口。 RDMA CM 可以异步或同步操作。 用户通过在特定调用中使用 rdma_cm 事件通道参数来控制操作模式。 如果提供了事件通道,rdma_cm 标识符将报告该通道上的事件数据(例如连接结果)。 如果未提供通道,则所选 rdma_cm 标识符的所有 rdma_cm 操作将被阻止,直到完成。 RDMA CM 为不同的 libibverbs 提供商提供了一个选项来宣传和使用特定于该提供商的各种 QP 配置选项。 此功能称为 ECE(增强连接建立)
晓兵
2024/04/27
1.2K0
Linux源码分析-RDMA的通信连接管理CM模块
RDMA - 通信库Libfabric的verbs实现(GDR概览)
Libfabric: https://github.com/ofiwg/libfabric.git
晓兵
2024/12/28
3140
RDMA - 通信库Libfabric的verbs实现(GDR概览)
NCCL与RDMA和MPI基本框架源码分析
verbs:宽松排序内存区域,添加一个标志以允许创建宽松排序内存区域。 通过此类 MR 的访问可以通过允许系统对某些访问重新排序来提高性能。 由于宽松排序是一种优化,因此不支持它的驱动程序可以简单地忽略它。 可选的 MR 访问位范围是根据内核匹配部分定义的,其第一个条目将为 IBV_ACCESS_RELAXED_ORDERING。 如果应用程序使用可选范围中的一位,则库会将其屏蔽掉,以防内核不支持“MR 可选模式”, IBV_ACCESS_RELAXED_ORDERING 此设置允许 NIC 放宽在网络和目标内存区域之间传输数据的顺序。放宽排序允许网络发起的写入(例如传入消息发送或 RDMA 写入操作)以任意顺序到达内存。这可以提高某些应用程序的性能。但是,放宽排序具有以下影响:不再保证 RDMA 写入后写入消息的顺序。(发送消息仍将按顺序匹配已发布的接收缓冲区。)针对同一内存区域的背靠背网络写入使该区域处于未知状态。放宽排序不会改变完成语义,例如数据可见性。也就是说,完成仍然确保所有数据都是可见的,包括来自先前传输的数据。放宽排序的操作也不会绕过原子操作
晓兵
2025/02/06
4012
NCCL与RDMA和MPI基本框架源码分析
RDMA verbs编程基础知识,程序执行流程,函数,名词说明
1.1 RDMA基本原理和优势,以太网socket通信为什么要用户空间拷贝到内核空间_哔哩哔哩_bilibili
爱串门的小马驹
2024/10/13
4370
RDMA verbs编程基础知识,程序执行流程,函数,名词说明
蚂蚁专家介绍RDMA技术砖题(一):技术概述
DMA(直接内存访问)是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要CPU的参与。
通信行业搬砖工
2024/06/13
3620
蚂蚁专家介绍RDMA技术砖题(一):技术概述
网络虚拟化技术:RDMA技术论文
分布式系统利用卸载来减少 CPU 负载变得越来越流行。远程直接内存访问 (RDMA) 卸载尤其变得流行。然而,RDMA 仍然需要 CPU 干预来处理超出简单远程内存访问范围的复杂卸载。因此,卸载潜力是有限的,基于 RDMA 的系统通常必须解决这些限制。 我们提出了 RedN,这是一种原则性的、实用的方法,可以实现复杂的 RDMA 卸载,无需任何硬件修改。使用自修改 RDMA 链,我们将现有的 RDMA 动词接口提升为图灵完备的编程抽象集。我们探索使用商用 RDMA NIC 在卸载复杂性和性能方面的可能性。我们展示了如何将这些 RDMA 链集成到应用程序中,例如 Memcached 键值存储,从而使我们能够卸载复杂的任务,例如键查找。与使用单侧 RDMA 原语(例如 FaRM-KV)的最先进的 KV 设计以及传统的 RPC-over-RDMA 方法相比,RedN 可以将键值获取操作的延迟减少高达 2.6 倍。此外,与这些基准相比,RedN 提供性能隔离,并且在存在争用的情况下,可以将延迟减少高达 35 倍,同时为应用程序提供针对操作系统和进程崩溃的故障恢复能力。
通信行业搬砖工
2023/09/07
1.5K0
网络虚拟化技术:RDMA技术论文
全闪分布式存储之PureFlash-极短IO路径-极致性能-极简RDMA和SPDK引擎落盘-支持超融合-IO路径-源码流程及项目简介
极简IO路径, 原生RDMA(verbs)和SPDK引擎落盘加持, 能充分发挥硬件性能, 支持快照, 多副本等, 高可用的高性能分布式存储, 让我们一起见证全闪时代吧!
晓兵
2023/11/25
1.7K0
全闪分布式存储之PureFlash-极短IO路径-极致性能-极简RDMA和SPDK引擎落盘-支持超融合-IO路径-源码流程及项目简介
RDMA 完成事件和异步事件_CE_AE
CE和AE一般与中断关联, 通过中断上报处理CE和AE, 这样可以降低CPU使用率(相对忙轮询(ibv_poll_cq)), 异步事件在非IO线程上处理事件, 正常情况下不影响IO路径
晓兵
2025/03/16
2070
RDMA 完成事件和异步事件_CE_AE
推荐阅读
相关推荐
Intel E810/ICE DPU RDMA 及MLX中断原理分析2(CE/AE)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验