login
ibv_poll_cq延迟问题分析
2025/07/19·StepFun can make mistakes, check important info.
ibv_poll_cq() 有几率会延迟十几毫秒返回,照讲这是一个纯用户态无阻塞的api,不应该有这样的延迟。可能是因为什么?
Sources

为了更好地理解您遇到的 ibv_poll_cq() 延迟问题,我需要了解几个关键信息:

  1. 您的 RDMA 应用场景是什么?(例如:小数据包传输、大数据传输、是否使用了内联数据等)

  2. 您是如何配置 CQ 的?是否使用了事件通知机制(ibv_req_notify_cq)还是纯轮询模式?

  3. 您观察到的延迟是在特定条件下发生(如高负载、特定操作后),还是随机出现?

纯轮询模式,在一个中等负载的应用中随机出现

好的,这是一个针对您提出的 ibv_poll_cq() 延迟问题的分步调查计划。

Research plan

总体计划:探究 ibv_poll_cq() 异常延迟的根本原因

本计划旨在系统性地分析 ibv_poll_cq() 出现非预期毫秒级延迟的潜在原因。计划将从理论基础出发,逐步深入到系统、硬件及应用层面,以定位问题根源。


第一阶段:确认 ibv_poll_cq() 的核心工作机制

此阶段的目标是建立对 ibv_poll_cq() 功能行为的准确理解,特别是其作为用户态API的边界和前提条件。

  • 1.1 理解快速路径(Fast-Path)原理:
    • 研究 ibv_poll_cq() 作为RDMA快速路径API的设计,明确其如何通过绕过内核来实现低延迟。
  • 1.2 识别潜在的慢速路径(Slow-Path)触发条件:
    • 调查是否存在特定场景或错误状态,可能导致 ibv_poll_cq() 的执行路径从纯用户态轮询转入或被更耗时的操作阻塞。

第二阶段:分析系统层面的潜在干扰因素

此阶段的目标是排查可能导致用户态线程(执行轮询的线程)被意外挂起的操作系统级原因。

  • 2.1 CPU调度与核心竞争:
    • 分析运行轮询任务的CPU核心是否存在被其他高优先级进程或内核任务抢占的可能性。
    • 研究非一致性内存访问(NUMA)架构对内存访问延迟的潜在影响。
  • 2.2 中断风暴与系统抖动:
    • 探究是否存在其他硬件设备产生大量中断,导致执行轮询的CPU核心被频繁打断,从而引入延迟。

第三阶段:检视硬件与驱动程序的交互行为

此阶段的目标是探究网络适配器(HCA)、PCIe总线以及驱动程序在完成队列(CQ)处理流程中可能引入的延迟。

  • 3.1 完成队列项(CQE)的生成与写入机制:
    • 研究HCA将CQE写入主机内存的具体过程,分析该过程是否可能因PCIe总线拥塞或硬件内部状态而延迟。
  • 3.2 错误处理对性能的影响:
    • 分析当出现特定类型的工作完成(WC)错误状态时(如WR_FLUSH_ERR),驱动或硬件的应对机制是否会引入额外的处理开销。

第四阶段:评估应用层配置与逻辑的关联性

此阶段的目标是检查应用程序本身的RDMA资源配置或使用模式是否与延迟现象相关。

  • 4.1 完成队列(CQ)深度的影响:
    • 评估CQ大小的配置是否合理,以及CQ是否可能出现溢出或接近溢出的情况。
  • 4.2 轮询模式与应用逻辑的交互:
    • 分析轮询线程的实现逻辑,判断是否存在与应用中其他部分(如锁竞争、数据处理)的耦合,从而间接导致轮询被阻塞。

信息源参考

为执行以上计划,可从以下高可靠性渠道获取所需信息:

  • 官方RDMA编程文档:
    • NVIDIA Networking(原Mellanox)或 Broadcom 等HCA硬件供应商提供的官方编程手册和白皮书。
    • libibverbslibrdmacm 的官方 man pages 或在线文档。
  • 权威技术社区与出版物:
    • USENIX, ACM 等学术会议上关于高性能网络和RDMA的论文。
    • Linux内核邮件列表(linux-rdma@vger.kernel.org)的历史归档,通常可以通过搜索引擎找到相关讨论的网页快照。
  • 操作系统性能文档:
    • Linux内核官方文档中关于CPU调度器、中断处理和NUMA的部分。
开始研究

Deep Research

让我开始搜索相关信息。

搜索

Search

ibv_poll_cq delay milliseconds rdma performance issue
cnblogs.com
cnblogs.com
原文:https://www.rdmamojo.com/2013/02/15/ibv_poll_cq/(强烈建议去看原文) 描述 ibv_poll_cq()从完成队列(CQ)轮询WC(工作完成),非阻塞函数。[工作完成]表示 WQ(工作队列)中的WR(工作请求)以及与CQ相关联的所有已发布到该工作队列的未发出信号的WR(工作请求)均已完成。(A Work Compl...
腾讯云
腾讯云
硬件产生中断事件(CQ完成事件CE/异步错误事件AE),中断回调函数触发异步队列中的工作,如(irdma_dpc)完成回调/异步事件回调将事件添加到事件链表,设置文件描述符为可读(POLL_IN),唤醒用户态的 ibv_get_cq_event 调用 接下来用户程序从 ibv_get_cq_event 返回之后,还要再调用 ibv_poll_cq ...
腾讯云
腾讯云
快速路径函数(例如 ibv_post_send、ibv_poll_cq 等)处理操作的启动和完成。它们之所以被称为“快速”,是因为它们绕过内核,因此比慢速路径函数快得多。通信的关键路径主要由快速路径函数组成,有时还包括慢速路径函数(例如 ibv_reg_mr),用于动态注册内存区域(取决于通信 中间件)。这篇文章重点介绍程序员执行 ibv_post_send 后发生的机制。快速 PCIe 背景 网络接...
腾讯云
腾讯云
CE和AE一般与中断关联,通过中断上报处理CE和AE,这样可以降低CPU使用率(相对忙轮询(ibv_poll_cq)),异步事件在非IO线程上处理事件,正常情况下不影响IO路径 完成事件控制器 当消费者请求完成通知时(ibv_req_notify_cq)调用的处理程序,并将条目添加到与处理程序标识符关联的完成队列中 异步完成通知(10.8.7 ASYNCHRONOUS COMPLETION NOTIFICATION) ...
稀土掘金
稀土掘金
10.ibv_poll_cq() 功能:轮询CQ以检查是否有已完成的工作请求。参数:CQ指针、要检查的完成事件数量、存储完成事件的结构体指针等。返回值:返回已完成的工作请求数量,以及可能的错误码。使用场景:在RDMA通信中,应用程序需要不断地轮询CQ以获取已完成的工作请求,并据此进行后续处理。11.ibv_destroy_qp()/ibv_dere...
腾讯云
腾讯云
RDMA Verbs API 向用户提供了有关RDMA的相关功能,典型的包括注册MR、创建QP、Post Send、Poll CQ等。用于管理RDMA通信和数据传输。本期视频教程在这: 2.1 RDMA verbs编程基础,API函数说明程序流程,RDMA通信_哔哩哔哩_bilibili 二、程序执行流程 添加图片注释,不超过 140 字(可选) 三、常用 RDMA Verbs AP...
cnblogs.com
cnblogs.com
e,-events sleep on CQ events(default poll) g,-gid-idx=local port gid index c,-contiguous-mr use contiguous mr t,-inline-recv=size of inline-recv a,-check-nop check NOP opcode o,-odp use on demand paging u,-upstream use upstream API t,-ups...
cnblogs.com
cnblogs.com
ibv_create_qp()用于创建QP ibv_post_send()用于下发Send WR ibv_poll_cq()用于从CQ中轮询CQE RDMA_CM 以rdma_为前缀,主要分为两个功能: CMA(Connection Management Abstraction) 在Socket和Verbs API基础上实现的,用于CM建链并交换信息的一组接口。CM...
https://static-favicon.basemind.com/01JV2FHHFXQC9K9DNQNVPHZTF3
https://static-favicon.basemind.com/01JV20CK4WKJPHQSAQJMKQ9VDM
https://static-favicon.basemind.com/01JVCF6MZ0MX475CAH29S1Q647
View all 16 sources

我将深入分析 ibv_poll_cq() 出现毫秒级延迟的可能原因。这是一个很有趣的问题,因为按照设计,ibv_poll_cq() 应该是一个纯用户态无阻塞的API,不应该有十几毫秒的延迟。

搜索

Search

ibv_poll_cq delay milliseconds causes rdma performance issue
新浪
新浪
RDMA Verbs 级通信监控:在 ibv_post_send/ibv_poll_cq 等核心通信接口设置观测点,统计通信时延分布。结合上面 4 类事件,完成以下 2 类数据分析: 单体异常探测基线与实时数据对比。群体一致性检测。采用卡间对比算法,当某一 rank 的以下指标偏离集群中位数超过阈值时判定异常,包括系统调用频率、进程就绪队列等待时长、NVLink/RDMA 带宽利用率等。基于以上所述方法,百度百舸针对以下 2 类典型的隐...
docs.nvidia.com
docs.nvidia.com
The timeout is computed as 4.096 µs*2^timeout,and the correct value is dependent on the size of the network.Increasing that value can help on very large networks,for example,if NCCL is failing on a call to ibv_poll_cq with error ...
cnblogs.com
cnblogs.com
BUILD COMMAND:*gcc-Wall-O0-g-o RDMA_RC_example RDMA_RC_example.c-libverbs*server:*./RDMA_RC_example-d mlx5_0-i 1-g 3*client:*./RDMA_RC_example 192.169.31.53-d mlx5_0-i 1-g 3*/*RDMA Aware Networks Programming Example*This code demonstrates how to perform th...
cnblogs.com
cnblogs.com
BUILD COMMAND:*gcc-Wall-O0-g-o RDMA_RC_example RDMA_RC_example.c-libverbs*server:*./RDMA_RC_example-d mlx5_0-i 1-g 3*client:*./RDMA_RC_example 192.169.31.53-d mlx5_0-i 1-g 3*/*RDMA Aware Networks Programming Example*This code demonstrates how to perform th...
cnblogs.com
cnblogs.com
struct ibv_cq*ibv_create_cq(struct ibv_context*context,int cqe,void*cq_context,struct ibv_comp_channel*channel,int comp_vector)#作用:创建CQ,每个QP都有对应的send cq和recv cq。一个
cnblogs.com
cnblogs.com
struct ibv_cq*ibv_create_cq(struct ibv_context*context,int cqe,void*cq_context,struct ibv_comp_channel*channel,int comp_vector)#作用:创建CQ,每个QP都有对应的send cq和recv cq。一个
新浪
新浪
CUDA 运行时 API 监控:通过 uprobe 在 libcuda.so 等关键库注入探针,记录 CUDA API 调用耗时分布。RDMA Verbs 级通信监控:在 ibv_post_send/ibv_poll_cq 等核心通信接口设置观测点,统计通信时延分布。结合上面 4 类事件,完成以下 2 类数据分析: 单体异常探测基线与实时数据对比。群体一致性检测。采用卡间对比算法,当某一 rank 的以下指标偏离集群中位数超过阈值时判定...
dellwx.com
ps 指示灯:当此指示灯发亮时,表明电源 2 出现故障。temp 指示灯:当此指示灯发亮时,表明系统温度超出阈值级别。fan:当此指示灯点亮时,表明散热风扇或电源风扇出现故障或运行太慢。风扇发生故障还会导致 over temp 指示灯发亮。link 指示灯:当此指示灯发亮时,网卡出现故障。vrm 指示灯:当此指示灯发亮时,表明微处理器托盘上的某个 vrm 出现故障。cpu 指示灯:当此指示灯发亮时,表明某个微处理器出现故障。pci 指示灯:当此指示灯发亮时,表明某个 pci 总线发生错误。mem 指示灯:当...
https://static-favicon.basemind.com/01JV20CK4WKJPHQSAQJMKQ9VDM
https://static-favicon.basemind.com/01JV2FHHFXQC9K9DNQNVPHZTF3
https://static-favicon.basemind.com/01JVCF6MZ0MX475CAH29S1Q647
View all 16 sources

我需要更深入了解 ibv_poll_cq() 的工作机制以及可能导致延迟的原因。让我继续搜索更具体的信息。

搜索

Search

ibv_poll_cq unexpected delay milliseconds rdma performance issue kernel interaction
腾讯云
腾讯云
宏 int DEFAULT_SYMVER_PRE(fi_getinfo)dos2unix autogen.sh./autogen.sh./configure-prefix=""-disable-efa-disable-psm3-without-gdrcopy-enable-debug-disable-psm2-disable-psm3 make&make; install fi_pingpong-p sockets fi_pingpong-p sockets"localhost"-v server:fi_pi...
腾讯云
腾讯云
ret=na_ofi_verify_info na_ofi_class->msg_recv_unexpected=na_ofi_msg_recv na_ofi_class->opt_features|=NA_OPT_MULTI_RECV na_ofi_class->cq_poll=na_ofi_cq_poll_no_source na_ofi_fabric_open(prov_type,na_ofi_...
腾讯云
腾讯云
unexpected->fi_senddata->fi_send->vrb_flush_cq->ibv_poll_cq 接收端提前往接收队列放置工作请求WR ibv_post_recv->rxm_open_conn->ibv_post_recv|na_ofi_tag_recv,na_ofi_msg_multi_recv->fi_trecv-&...
今日头条
今日头条
英伟达B系列GPU delay的原因 1.核心原因是台积电的CoWoS-L工艺出现了一些技术问题,B系列必须使用CoWoS-L技术,涉及非常多最先进的工艺和技术,很多是第一次在大规模量产中应用,所以台积电需要1-2个季度的时间去解决这个问题。这也和目前公布的后面的出货时间是对应的。2.下游大模型和应用对AI硬件的要求很高,英伟达快速地推进产品迭代和创新,对于供应链的技术压力很大,出现了一些供应链技术跟不上的情况。
doc.dpdk.org
doc.dpdk.org
External memory unregistered in EAL memseg list cannot be used for DMA unless such memory has been registered by mlx4_mr_update_ext_mp()in primary process and remapped to the same virtual address in secondary process.If the external memory is registered by...
cbhutv.com
中国大陆短剧,国产剧《霍总的小病猫》剧情:暂无简介. 主演:未知 导演:未知 类型:短剧,国产剧 地区:中国大陆 年份:2024 简介:暂无简介 备用线路,请勿相信跑马灯水印广告。备用③ 第1-27集完结 剧情简介 暂无简介
cbhutv.com
Edge IP Restricted What happened?You've requested a page on a website that is part of the Cloudflare network.The host(vip.cbhutv.com)resolved to an IP address that the owner of the website does not have access to. What can I do?If you are a visitor of this...
cbhutv.com
Edge IP Restricted What happened?You've requested a page on a website that is part of the Cloudflare network.The host(vip.cbhutv.com)resolved to an IP address that the owner of the website does not have access to. What can I do?If you are a visitor of this...
https://static-favicon.basemind.com/01JV2FHHP56V979ABGGGVR81XB
https://static-favicon.basemind.com/01JVCF6MZ0MX475CAH29S1Q647
https://static-favicon.basemind.com/01JV44HYZJK1F2EJTGSV3XQNFC
View all 16 sources

我需要进一步了解RDMA系统中的低级别细节,特别是关于ibv_poll_cq()可能导致延迟的具体机制。

搜索

Search

ibv_poll_cq implementation kernel interaction slow path fast path rdma
腾讯云
腾讯云
快速路径函数(例如 ibv_post_send、ibv_poll_cq 等)处理操作的启动和完成。它们之所以被称为“快速”,是因为它们绕过内核,因此比慢速路径函数快得多。通信的关键路径主要由快速路径函数组成,有时还包括慢速路径函数(例如 ibv_reg_mr),用于动态注册内存区域(取决于通信 中间件)。这篇文章重点介绍程序员执行 ibv_post_send 后发生的机制。快速 PCIe 背景 网络接...
cnblogs.com
cnblogs.com
原文:https://www.rdmamojo.com/2013/02/15/ibv_poll_cq/(强烈建议去看原文) 描述 ibv_poll_cq()从完成队列(CQ)轮询WC(工作完成),非阻塞函数。[工作完成]表示 WQ(工作队列)中的WR(工作请求)以及与CQ相关联的所有已发布到该工作队列的未发出信号的WR(工作请求)均已完成。(A Work Compl...
腾讯云
腾讯云
推荐的腾讯云相关产品和产品介绍链接地址:腾讯云无特定产品与ibv_poll_cq()直接相关。ib_poll_cq()函数: 概念:ib_poll_cq()是InfiniBand(IB)网络中的函数,用于轮询完成队列以获取已完成的工作请求。分类:它属于InfiniBand网络中的函数之一,用于处理IB网络中的工作请求。优势:ib_poll_cq()...
腾讯云
腾讯云
CE和AE一般与中断关联,通过中断上报处理CE和AE,这样可以降低CPU使用率(相对忙轮询(ibv_poll_cq)),异步事件在非IO线程上处理事件,正常情况下不影响IO路径 完成事件控制器 当消费者请求完成通知时(ibv_req_notify_cq)调用的处理程序,并将条目添加到与处理程序标识符关联的完成队列中 异步完成通知(10.8.7 ASYNCHRONOUS COMPLETION NOTIFICATION) ...
腾讯云
腾讯云
10.ibv_poll_cq() 功能:轮询CQ以检查是否有已完成的工作请求。参数:CQ指针、要检查的完成事件数量、存储完成事件的结构体指针等。返回值:返回已完成的工作请求数量,以及可能的错误码。使用场景:在RDMA通信中,应用程序需要不断地轮询CQ以获取已完成的工作请求,并据此进行后续处理。11.ibv_destroy_qp()/ibv_dereg_mr()/
博客
博客
为了获取已完成的工作请求的结果,可以使用 ibv_poll_cq 函数对 CQ 进行轮询。每次调用该函数都会返回一个或多个完成事件,并提供有关每个事件的信息,比如成功与否及其关联的上下文数据[^2]。此外,如果希望更高效地监控多个文件描述符上的 I/O 事件,则可结合 epoll 来优化性能表现[^3]。下面展示了一个简单的例子,演示如何利用上述机制完成基本通信流程: include<infiniband/verbs.h>/...
ctyun.cn
ctyun.cn
【vbers】ibv_poll_cq()|RDMA 【vbers】ibv_poll_cq()|RDMA CQ,IBV,QP 2025-02-21 16:57:07 【网络】为什么巨型帧会影响延迟?网络的带宽,吞吐量,时延的理解|MTU 【网络】为什么巨型帧会影响延迟?网络的带宽,吞吐量,时延的理解|MTU 字节,延迟,时延 2025-02-21 16:57:07 【...
博客
博客
文章浏览阅读224次。在这个代码片段中,`ibv_cq*send_cq;`定义了一个指针,用于存储异步消息队列(Asynchronous Message Queue,AMQ)中的发送完成队列(Send Completion Queue,CQ)。发送CQ在IB(InfiniBand)进程间通信(Inter-Process Communication
https://static-favicon.basemind.com/01JV1V7B6XNNV7Y34EFY73WPGM
https://static-favicon.basemind.com/01JVCF6MZ0MX475CAH29S1Q647
https://static-favicon.basemind.com/01JV20CK4WKJPHQSAQJMKQ9VDM
View all 16 sources

已掌握的信息

  1. ibv_poll_cq 的核心机制:该函数被设计为“快速路径”(Fast-Path)API,旨在通过绕过操作系统内核、直接在用户空间轮询内存映射的完成队列(CQ)来实现极低的延迟。理论上,它不应产生阻塞或显著的系统调用开销。
  2. 与中断机制的对比:RDMA提供了另一种基于中断的事件通知机制(ibv_req_notify_cq),它能降低CPU的空转消耗,但会因涉及内核上下文切换而引入更高的延迟。用户遇到的问题是在追求最低延迟的轮询模式下发生的,这表明问题并非源于设计选择,而是意外的性能表现。
  3. 潜在的“慢速路径”触发:尽管ibv_poll_cq本身是用户态操作,但某些外部因素或特定的完成状态可能导致其表现出“慢速”特征。一个重要的线索是,在轮询循环中混入控制路径操作(如资源分配、销毁)可能会严重影响性能。此外,当工作完成(Work Completion)伴随特定错误状态时,硬件或驱动可能需要执行额外的处理,从而引入延迟。
  4. 系统和硬件层面的干扰:延迟的根源不一定在ibv_poll_cq函数内部,可能来自外部。例如,执行轮询的CPU核心被操作系统抢占(调度问题),或因处理其他设备的中断而暂停(系统抖动)。另外,网络适配器(HCA)将完成队列项(CQE)通过PCIe总线写入主机内存的过程本身也可能发生延迟。

下一步行动计划

  1. 深入分析“伪慢速路径”的成因:聚焦于导致ibv_poll_cq延迟的间接原因。重点研究当一个工作请求(Work Request)以错误状态完成时(例如 WR_FLUSH_ERR),libibverbs库或底层硬件驱动需要执行哪些额外的错误处理流程,并评估这些流程是否可能引入毫秒级的耗时。

    • 信息源linux-rdma邮件列表的历史归档,NVIDIA(原Mellanox)等硬件厂商提供的官方编程手册和性能调优指南,USENIX、SIGCOMM等顶级会议上关于RDMA性能异常分析的论文。
  2. 探究CPU调度与微中断的影响:系统性地调查操作系统层面的干扰。计划研究如何通过工具(如 perf)来追踪运行轮询任务的线程,以确认其是否被其他高优先级进程或内核中断处理程序(IRQ/Softirq)频繁抢占。同时,分析CPU核心绑定(CPU Affinity)和NUMA架构对轮询性能的潜在影响。

    • 信息源:Linux内核文档中关于CPU调度器和中断处理的部分,以及Brendan Gregg等性能专家的博客和著作。
  3. 检视硬件完成队列(CQE)的写入时序:调查从网络适配器(HCA)在硬件层面完成一个操作,到它将对应的CQE成功写入主机内存这一过程的内部机制。分析是否存在可能导致该过程延迟的硬件瓶颈,例如PCIe总线拥塞或HCA内部的资源竞争。

    • 信息源:网络适配器的技术参考手册(Technical Reference Manual),分析PCIe协议的白皮书,以及学术界对RDMA微架构进行分析的研究论文。
  4. 构建最小可复现案例与诊断方案:基于已掌握的理论,设计一个最小化的测试程序,尝试复现毫秒级延迟现象。在该程序中,通过隔离变量(如数据包大小、操作类型、CPU核心绑定等)来验证各个假设,并集成高精度计时来精确测量ibv_poll_cq的返回耗时,从而定位问题的具体触发条件。

    • 信息源libibverbsperftest等开源RDMA测试工具的源代码,作为构建自定义测试案例的参考。
搜索

Search

ibv_poll_cq slow path kernel interaction error handling WR_FLUSH_ERR
docs.oracle.com
docs.oracle.com
SM_EVENT_UGID ibv_asyncwatch-G-s0x0021280001a0e4d9,0x0021280001a0e4da To monitor event=IBV_SM_EVENT_MGID ibv_asyncwatch-M-s0xff12:4001:ffff:c:2238 ATTRIBUTES See attributes(5)for descriptions of the following attributes:+-+-+|ATT...
瑞文网
瑞文网
offset ratio 偏移比率 offset stacker 分选接卡机 offspring task 子辈任务 ohmic resistance 欧姆电阻 ohmmeter 欧姆计 olap 联机分析技术 omr 光学标志读出器光学指示读出器 on bit 一值位 on chip redundancy 芯片级冗余 on hook 挂机 ...
cnblogs.com
cnblogs.com
与 I/O multiplexing(select and poll)相比,它的优势是,免去了select的阻塞与轮询,当有活跃套接字时,由注册的handler处理。asynchronous I/O(the POSIX aio_functions)很少有*nix系统支持,windows的IOCP则是此模型 完全异步的I/O复用机制,因为纵观上面其它四种模型,至少都会在由kernel copy data to appliction时阻塞。而该模型是当copy 完成后才通知a...
cnblogs.com
cnblogs.com
798 799 if(ibv_read_sysfs_file(uverbs_sys_path,"device/vendor",800 value,sizeof value))801 return 802 sscanf(value,"%i",&vendor;);803 804 if(ibv_read_sysfs_file(uverbs_sys_path,"device/device",805 value,sizeof value))806 ...
掌桥科研
掌桥科研
Let τ(G)denote the number of vertices in a longest path in a graph G=(V,E).A subset K of V is called a Р_n-kernel of G if τ(G[K]≤n_1 and every vertex v∈V K is adjacent to an end-vertex of a path of order n_1 in G[K].It is known t...
稀土掘金
稀土掘金
class Conv(nn.Module):#Standard convolution def_init_(self,c1,c2,k=1,s=1,p=None,g=1,act=True):#ch_in,ch_out,kernel,stride,padding,groups"""@Pargm c1:输入通道数@Pargm c2:输出通道数@Pargm k:卷积核大小(kernel_size)@Pargm s:卷积步长(stride)@Pargm p:特征图填充宽度(padd...
m.oschina.net
m.oschina.net
它支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。Nginx 具有很高的稳定性。其它 HTTP 服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前 apache 一旦上到 200 个以上进程,web 响应速度就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。nginx 官方表示保持 10,000 个没有活动的连接,它...
腾讯云
腾讯云
所以file_operations的read_iter和write_iter回调函数首先就需要根据不同的标志判断采用哪种访问模式,kernel在2020年12月的patch中提出了folio的概念,我们可以把folio简单理解为一段连续内存,一个或多个page的集合 IO路径简图 同步/异步 APP调用系统调用write(fd,"pilgrimtao is cool",18) 代码语言:javascript 代码 运行次数:0 运行 int main(){ char buff[128]={...

我需要更深入地了解RDMA系统中ibv_poll_cq的实现细节,特别是可能导致延迟的因素。

搜索

Search

ibv_poll_cq implementation details PCIe transaction MMIO DMA RDMA
博客
博客
为了获取已完成的工作请求的结果,可以使用 ibv_poll_cq 函数对 CQ 进行轮询。每次调用该函数都会返回一个或多个完成事件,并提供有关每个事件的信息,比如成功与否及其关联的上下文数据[^2]。此外,如果希望更高效地监控多个文件描述符上的 I/O 事件,则可结合 epoll 来优化性能表现[^3]。下面展示了一个简单的例子,演示如何利用上述机制完成基本通信流程: include<infiniband/verbs.h>/...
ctyun.cn
ctyun.cn
ibv_poll_cq()从完成队列(CQ)轮询WC(工作完成),非阻塞函数。[工作完成]表示 WQ(工作队列)中的WR(工作请求)以及与CQ相关联的所有已发布到该工作队列的未发出信号的WR(工作请求)均已完成。(A Work Completion indicates that a Work Request in a Work Queue,and all of the outstanding unsignaled Wo...
腾讯云
腾讯云
快速路径函数(例如 ibv_post_send、ibv_poll_cq 等)处理操作的启动和完成。它们之所以被称为“快速”,是因为它们绕过内核,因此比慢速路径函数快得多。通信的关键路径主要由快速路径函数组成,有时还包括慢速路径函数(例如 ibv_reg_mr),用于动态注册内存区域(取决于通信 中间件)。这篇文章重点介绍程序员执行 ibv_post_send 后发生的机制。快速 PCIe 背景 网络接...
腾讯云
腾讯云
硬件产生中断事件(CQ完成事件CE/异步错误事件AE),中断回调函数触发异步队列中的工作,如(irdma_dpc)完成回调/异步事件回调将事件添加到事件链表,设置文件描述符为可读(POLL_IN),唤醒用户态的 ibv_get_cq_event 调用 接下来用户程序从 ibv_get_cq_event 返回之后,还要再调用 ibv_poll_cq ...
ctyun.cn
ctyun.cn
【vbers】ibv_poll_cq()|RDMA 【vbers】ibv_poll_cq()|RDMA CQ,IBV,QP 2025-02-21 16:57:07 【网络】为什么巨型帧会影响延迟?网络的带宽,吞吐量,时延的理解|MTU 【网络】为什么巨型帧会影响延迟?网络的带宽,吞吐量,时延的理解|MTU 字节,延迟,时延 2025-02-21 16:57:07 【...
腾讯云
腾讯云
CE和AE一般与中断关联,通过中断上报处理CE和AE,这样可以降低CPU使用率(相对忙轮询(ibv_poll_cq)),异步事件在非IO线程上处理事件,正常情况下不影响IO路径 完成事件控制器 当消费者请求完成通知时(ibv_req_notify_cq)调用的处理程序,并将条目添加到与处理程序标识符关联的完成队列中 异步完成通知(10.8.7 ASYNCHRONOUS COMPLETION NOTIFICATION) ...
腾讯云
腾讯云
10.ibv_poll_cq() 功能:轮询CQ以检查是否有已完成的工作请求。参数:CQ指针、要检查的完成事件数量、存储完成事件的结构体指针等。返回值:返回已完成的工作请求数量,以及可能的错误码。使用场景:在RDMA通信中,应用程序需要不断地轮询CQ以获取已完成的工作请求,并据此进行后续处理。11.ibv_destroy_qp()/ibv_dereg_mr()/
博客
博客
文章浏览阅读224次。在这个代码片段中,`ibv_cq*send_cq;`定义了一个指针,用于存储异步消息队列(Asynchronous Message Queue,AMQ)中的发送完成队列(Send Completion Queue,CQ)。发送CQ在IB(InfiniBand)进程间通信(Inter-Process Communication
https://static-favicon.basemind.com/01JV20CK4WKJPHQSAQJMKQ9VDM
https://static-favicon.basemind.com/01JV2DED129WT5ADKPSDT0V9X4
https://static-favicon.basemind.com/01JV20CK4WKJPHQSAQJMKQ9VDM
View all 14 sources

我需要进一步了解RDMA系统中的PCIe交互细节,特别是关于ibv_poll_cq可能导致延迟的具体机制。

搜索

Search

RDMA PCIe transaction slow path ibv_poll_cq DMA doorbell WR_FLUSH_ERR
腾讯云
腾讯云
网络接口卡(NIC)通常通过 PCI Express(PCIe)插槽连接到 服务器。PCIe I/O 子系统的主要导体是根复合体(RC)。RC 将处理器和内存连接到 PCIe 结构。PCIe 结构可能由设备层次结构组成。连接到 PCIe 结构的外围设备称为 PCIe 端点。PCIe 协议由三层组成:事务层、数据链路层和物理层。第一层,即最上层,描述发生的事务类型。对...
21IC论坛
21IC论坛
DMA技术通常被部署在高级微控制器总线或高速外设部件互连总线(PCIe)上,二者均为短距离连接总线,会导致数据采集系统的部署位置受限。远程直接内存访问技术(RDMA)是一种专为远距离网络通信设计的技术,其通常通过光纤进行设备间连接,提供高通量、低延迟、远距离的零拷贝网络数据传输。基于融合以太网的远程直接内存访问(RoCE)提供了一种基于以太网的RDMA技术实现方法,相较于IB(InfiniBand)、互联网广域远程直接内存访问协议(iWARP)等...
博客
博客
技术融合 参考资源链接:[Xilinx FPGA:多通道PCIe QDMA&RDMA IP技术详解](https://wenku.csdn.net/doc/2e6b0q9xtj?spm=1055.2635.3001.10343)#1.云平台创新应用的背景与需求 随着云计算技术的迅速发展,云平台已经成为了企业数字化转型的关键基础设施。为了提升云计算服务的性能,满足大数据处理、人工智能、高性能计算等场景对数据传输速率和效率的极高要求,云平台的创新应用应运而生...
博客
博客
Multi-Channel PCIe QDMA&RDMA子系统是一款基于PCI Express Integrated Block的高性能模块,专为Ultrascale+、Ultrascale和7 Series平台设计。它提供独立的多通道DMA功能,支持连续或Scatter/Gather DMA操作,适用于需要大量数据传输和低延迟的应用场景。该子系统的关键特性包括:1.支持多种数据路径:64,128,256,和 512-bit,能够处理不同带宽需求。2.高...
sdnlab.com
sdnlab.com
PCIe 取代了早期的 PCI、PCI-X 和 AGP 总线标准,提供了更高的带宽和更低的延迟。PCIe 提供高带宽、低延迟、灵活的通道配置和广泛的兼容性,使其成为多 GPU 互联的理想选择。但是PCIe 在多 GPU 系统中可能面临带宽瓶颈、通道限制、额外延迟、功耗增加以及兼容性问题。1.2 NVLink NVLink 是 NVIDIA 开发的一种高速互联技术,专门用于连接多个 GPU 或 GPU 与 CPU 之间的...
腾讯云
腾讯云
在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),...
cnblogs.com
cnblogs.com
The memory buffers specified in sg_list will be placed inline in the Send Request.This mean that the low-level driver(i.e.CPU)will read the data and not the RDMA device.This means that the L_Key won't be checked,actually those memory buff...
CSDN技术社区
CSDN技术社区
基于PCI Express Integrated Block,Multi-Channel PCIe RDMA Subsystem实现了使用DMA Ring缓冲的独立多通道、高性能/超低延时/超低抖动Continous Ring DMA,提供FIFO/AXI4-Stream用户接口。C2H&H2C; DMA性能:1.PCIe 3.0 x16,C2H DMA和H2C DMA速度大于14GB/s 2.PCIe 3.0 x8,C2H DMA和H2...

我需要整合所有收集到的信息,来分析ibv_poll_cq出现毫秒级延迟的可能原因。

搜索

Search

ibv_poll_cq unexpected delay milliseconds PCIe transaction completion queue doorbell
腾讯云
腾讯云
宏 int DEFAULT_SYMVER_PRE(fi_getinfo)dos2unix autogen.sh./autogen.sh./configure-prefix=""-disable-efa-disable-psm3-without-gdrcopy-enable-debug-disable-psm2-disable-psm3 make&make; install fi_pingpong-p sockets fi_pingpong-p sockets"localhost"-v server:fi_pi...
腾讯云
腾讯云
ret=na_ofi_verify_info na_ofi_class->msg_recv_unexpected=na_ofi_msg_recv na_ofi_class->opt_features|=NA_OPT_MULTI_RECV na_ofi_class->cq_poll=na_ofi_cq_poll_no_source na_ofi_fabric_open(prov_type,na_ofi_...
腾讯云
腾讯云
unexpected->fi_senddata->fi_send->vrb_flush_cq->ibv_poll_cq 接收端提前往接收队列放置工作请求WR ibv_post_recv->rxm_open_conn->ibv_post_recv|na_ofi_tag_recv,na_ofi_msg_multi_recv->fi_trecv-&...
今日头条
今日头条
英伟达B系列GPU delay的原因 1.核心原因是台积电的CoWoS-L工艺出现了一些技术问题,B系列必须使用CoWoS-L技术,涉及非常多最先进的工艺和技术,很多是第一次在大规模量产中应用,所以台积电需要1-2个季度的时间去解决这个问题。这也和目前公布的后面的出货时间是对应的。2.下游大模型和应用对AI硬件的要求很高,英伟达快速地推进产品迭代和创新,对于供应链的技术压力很大,出现了一些供应链技术跟不上的情况。
doc.dpdk.org
doc.dpdk.org
External memory unregistered in EAL memseg list cannot be used for DMA unless such memory has been registered by mlx4_mr_update_ext_mp()in primary process and remapped to the same virtual address in secondary process.If the external memory is registered by...
cbhutv.com
中国大陆短剧,国产剧《霍总的小病猫》剧情:暂无简介. 主演:未知 导演:未知 类型:短剧,国产剧 地区:中国大陆 年份:2024 简介:暂无简介 备用线路,请勿相信跑马灯水印广告。备用③ 第1-27集完结 剧情简介 暂无简介
cbhutv.com
Edge IP Restricted What happened?You've requested a page on a website that is part of the Cloudflare network.The host(vip.cbhutv.com)resolved to an IP address that the owner of the website does not have access to. What can I do?If you are a visitor of this...
cbhutv.com
Edge IP Restricted What happened?You've requested a page on a website that is part of the Cloudflare network.The host(vip.cbhutv.com)resolved to an IP address that the owner of the website does not have access to. What can I do?If you are a visitor of this...
View all 9 sources

已掌握的信息

  1. ibv_poll_cq 的核心机制:该函数被设计为“快速路径”(Fast-Path)API,通过在用户空间直接轮询(读取)由网络适配器(HCA)通过DMA写入主机内存的完成队列(CQ),从而绕过操作系统内核,实现微秒级的低延迟。理论上,其执行本身不应包含任何阻塞或高延迟操作。

  2. 延迟的本质可能是“表观延迟”:观察到的十几毫秒延迟,不一定是ibv_poll_cq函数自身执行缓慢,而更可能是多种外部或底层因素导致的“等待”现象。这些因素可大致归为系统层面、硬件层面和应用层面。

  3. 潜在的系统层面干扰:运行轮询任务的CPU核心可能被操作系统调度器抢占,分配给其他更高优先级的进程或内核任务。此外,来自其他硬件设备的大量中断(中断风暴)也可能导致CPU暂停当前任务,转而处理中断,从而引入意外延迟。

  4. 潜在的硬件及驱动交互延迟:从RDMA操作在硬件上完成,到对应的完成队列项(CQE)通过PCIe总线被成功写入主机内存,这个过程本身存在物理延迟。PCIe总线拥塞、HCA内部处理逻辑、特别是处理错误状态(如 IBV_WC_WR_FLUSH_ERR)时可能触发的额外恢复或清理流程,都可能延长CQE的“到达”时间。

  5. 潜在的应用层面问题:在关键的轮询循环中混入“慢速路径”的控制类操作(如内存注册、资源创建/销毁),是已知的性能杀手。此外,不合理的CQ大小配置可能导致其接近溢出,或应用逻辑中存在锁竞争等,也可能间接阻塞轮询线程。

下一步行动计划

  1. 深入剖析错误处理路径的性能影响:重点研究当工作请求(Work Request)以错误状态(特别是 WR_FLUSH_ERR 等)完成时,libibverbs库、底层驱动和HCA硬件需要执行哪些具体的错误处理和状态清理流程。目标是确认这些“异常路径”是否包含已知会引入毫秒级耗时的操作。

    • 信息源linux-rdma 邮件列表的历史归档;NVIDIA(Mellanox)、Intel等HCA供应商提供的官方编程手册和性能调优指南;USENIX、SIGCOMM等顶级会议上关于RDMA性能异常诊断的学术论文。
  2. 探究CPU调度与系统抖动的诊断方法:系统性地研究如何利用性能分析工具来量化操作系统层面的干扰。计划调研如何使用perfftrace等工具来追踪轮询线程的CPU上下文切换、被高优先级中断抢占(IRQ/Softirq)的具体情况,从而验证或排除系统抖动是延迟主因的可能性。

    • 信息源:Brendan Gregg等Linux性能专家的博客、演讲和著作;Linux内核文档中关于CPU调度器、中断处理(/proc/interrupts)和性能追踪的部分。
  3. 检视HCA到内存的CQE写入时序与PCIe事务:调查从HCA生成一个CQE到该CQE通过DMA对主机内存的写入事务(PCIe Memory Write TLP)最终完成的完整链路。分析在此过程中可能导致延迟的硬件瓶颈,如PCIe总线流控、根联合体(Root Complex)或内存控制器的内部争用。

    • 信息源:网络适配器的技术参考手册(Technical Reference Manual);PCI-SIG提供的PCIe协议规范和白皮书;分析RDMA微架构性能的学术研究。
  4. 构建最小化可复现案例与综合诊断方案:基于已掌握的理论,设计一个最小化的测试程序,尝试稳定复现延迟现象。在该程序中,通过隔离变量(如操作类型、数据包大小、错误注入、CPU核心绑定等)来验证各个假设。同时,集成高精度计时和性能剖析工具,形成一套从应用到硬件的完整诊断流程,以最终定位问题根源。

    • 信息源perftest(如ib_write_lat)等标准RDMA性能测试工具的源代码;NVIDIA官方提供的编程示例代码。

ibv_poll_cq() 毫秒级延迟问题分析报告

1. 问题概述

ibv_poll_cq() 是 RDMA 编程中用于轮询完成队列(CQ)的关键 API,设计为纯用户态无阻塞操作,理论上应具有微秒级甚至纳秒级的延迟特性。然而,在实际应用中观察到该函数偶尔会出现十几毫秒的延迟返回,这与其设计初衷严重不符。本报告将从多个维度深入分析可能导致这一异常现象的原因。

2. ibv_poll_cq() 工作机制解析

2.1 快速路径设计原理

ibv_poll_cq() 属于 RDMA Verbs 中的"快速路径"(Fast-Path)函数,与"慢速路径"(Slow-Path)函数(如 ibv_open_deviceibv_alloc_pd 等)不同,它不涉及内核交互,因此避免了上下文切换的高昂开销腾讯云。这种设计使其能够直接在用户空间轮询内存映射的完成队列,理论上能够实现极低的延迟。

2.2 正常工作流程

在标准工作流程中,ibv_poll_cq() 从完成队列(CQ)中轮询工作完成(WC)项,这些工作完成项表示工作队列(WQ)中的工作请求(WR)已经完成cnblogs.com。该函数检查 CQ 中是否存在工作完成项,并按 FIFO 顺序从 CQ 顶部弹出这些项。一旦工作完成项被弹出,它们就无法返回给 CQ。

3. 延迟原因分析

3.1 系统层面的干扰因素

3.1.1 CPU 调度与核心竞争

问题描述:执行 ibv_poll_cq() 的线程可能被操作系统调度器暂时挂起,分配给其他高优先级进程或内核任务,导致轮询操作被中断。

影响机制

  • 当系统负载较高时,CPU 调度器可能频繁抢占正在执行 ibv_poll_cq() 的线程
  • 在多 NUMA 节点系统中,如果线程被调度到与网络适配器不在同一 NUMA 节点的 CPU 核心上,可能增加内存访问延迟
  • 缺乏 CPU 亲和性设置可能导致线程在不同核心间迁移,破坏 CPU 缓存局部性

缓解措施

  • 将 RDMA 轮询线程绑定到特定 CPU 核心
  • 提高轮询线程的调度优先级
  • 确保轮询线程与网络适配器位于同一 NUMA 节点

3.1.2 中断风暴与系统抖动

问题描述:系统中其他硬件设备产生的大量中断可能导致执行 ibv_poll_cq() 的 CPU 核心被频繁打断。

影响机制

  • 即使轮询线程本身不处理中断,但 CPU 核心仍需响应中断请求
  • 高频率的中断处理会导致 CPU 缓存失效,增加内存访问延迟
  • 系统抖动(jitter)可能导致微秒级延迟累积成毫秒级延迟

缓解措施

  • 配置中断亲和性,将网络中断与轮询线程分离到不同的 CPU 核心
  • 减少系统中不必要的后台任务和服务
  • 考虑使用实时内核或低延迟调度器

3.2 硬件与驱动程序交互问题

3.2.1 完成队列项(CQE)生成与传输延迟

问题描述:从网络适配器(HCA)完成一个操作,到对应的完成队列项(CQE)通过 PCIe 总线被写入主机内存,这一过程本身可能存在延迟。

影响机制

  • PCIe 总线拥塞可能导致 DMA 写入操作延迟
  • 网络适配器内部资源竞争可能延迟 CQE 的生成
  • 内存控制器争用可能影响 DMA 写入的完成时间

3.2.2 错误处理对性能的影响

问题描述:当工作请求以错误状态完成时(如 WR_FLUSH_ERR),驱动程序或硬件可能需要执行额外的错误处理流程。

影响机制

  • 错误状态可能触发驱动程序中的"慢速路径"代码
  • 某些错误处理可能涉及与内核的交互,引入上下文切换开销
  • 硬件可能需要执行内部状态恢复或资源清理,延迟后续操作

3.3 应用层配置与逻辑问题

3.3.1 完成队列(CQ)深度与溢出风险

问题描述:如果应用程序未能以足够快的速度消费 CQ 中的工作完成项,可能导致 CQ 接近溢出状态。

影响机制

  • CQ 接近溢出时,网络适配器或驱动程序可能启动流控机制,减缓新 CQE 的生成
  • 如果发生 CQ 溢出,将触发异步事件 IBV_EVENT_CQ_ERR,导致 CQ 不可用cnblogs.com
  • 应用程序必须定期轮询 CQ 以防止溢出腾讯云

3.3.2 轮询模式与应用逻辑的交互

问题描述:应用程序的轮询逻辑可能与其他操作交织,间接导致轮询延迟。

影响机制

  • 轮询循环中混入控制路径操作(如资源分配、销毁)可能严重影响性能
  • 应用程序中的锁竞争可能阻塞轮询线程
  • 不合理的内存分配模式可能导致频繁的页面错误或缓存未命中

3.4 中断与轮询混合模式的问题

问题描述:RDMA 提供了基于中断的事件通知机制(ibv_req_notify_cq)作为轮询的替代方案,但混合使用这两种机制可能导致问题。

影响机制

  • 如果应用程序在轮询模式和中断模式之间频繁切换,可能导致状态不一致
  • 中断处理路径涉及内核交互,可能引入额外延迟腾讯云
  • 某些驱动程序实现可能在处理中断后需要额外时间重新配置轮询模式

4. 诊断与解决方案

4.1 系统级诊断方法

  • 使用 perf 工具监控 CPU 上下文切换和调度延迟
  • 分析 /proc/interrupts 检查系统中断分布情况
  • 利用 numastatlstopo 验证 NUMA 配置合理性

4.2 应用级优化策略

  • 实现专用轮询线程,避免与其他逻辑混合
  • 使用 CPU 亲和性将轮询线程绑定到特定核心
  • 适当增大 CQ 深度,降低溢出风险
  • 考虑使用 inline 数据传输方式减少 PCIe 往返延迟腾讯云

4.3 驱动与固件优化

  • 确保使用最新版本的 RDMA 驱动和网卡固件
  • 检查网卡配置参数,特别是与完成队列和中断聚合相关的设置
  • 考虑禁用不必要的硬件功能,专注于延迟优化

5. 结论

ibv_poll_cq() 出现毫秒级延迟返回的问题可能源于多种因素的综合作用,包括系统调度干扰、硬件交互延迟、错误处理路径、应用程序逻辑问题等。解决这一问题需要从系统配置、应用设计和硬件优化等多个层面进行综合分析和优化。

特别需要注意的是,虽然 ibv_poll_cq() 本身是设计为用户态无阻塞 API,但其实际性能表现受到整个 RDMA 子系统各个组件的影响。通过深入理解这些组件的工作机制和交互方式,可以更有针对性地诊断和解决延迟问题。

最后,建议在实际应用中实施严格的性能监控和基准测试,以便及时发现和解决潜在的延迟问题,确保 RDMA 应用程序能够充分发挥其低延迟优势。

Key references