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

RDMA 相关bug记录

  • 对于 Client 来讲,setupConnection 中的 cm_id 应该是本地的,意味着后续 create pd \ cq \ qp 等等传入的 cm_id 都是本地 id。但是对于 Server 来讲,收到 client 的链接请求时将 client 的 cm_id 传入 setupConnection,意味着后续 create pd \ cq \ qp 等等传入的 cm_id 都是远端 id。为什么?

    • 因为所有的 create_xxx 操作都需要 ibv 的链接信息,资源是服务于链接的。

    • 在 rdma_create_qp 的介绍中说到,传入的 cm_id 必须要拥有链接信息,否则会创建失败,这就是解释了为什么 Server 调用时不能传入自己的 local_cm_id,因为此时 Server 的 cm_id 是没有链接信息的,所以失败。

    • 那么为什么 Client 可以传入自己的 local_cm_id 呢。因为在 Client 在 create_xxx 之间,首先进行了地址解析:

    • rdma_resolve_addr(client_id_, nullptr, dst_addr_->ai_addr, DEFAULT_CONNECTION_TIMEOUT);
      rdma_resolve_route(client_id_, DEFAULT_CONNECTION_TIMEOUT);
      
    • 这些操作会将 Client <-> Server 的一些链接信息存入 cm_id , 比如 addr、route 什么的,之后 cm_id 就具有了链接信息,可以通过其创建资源。

    • 同理,Server 拿到 Client 的 cm_id 后要用它来创建资源

    • 附上一张官方的 cm 建链流程:

  • ibv_destroy_cq 和 rdma_destroy_id 会卡住,有什么头绪吗?

    • ibv 博客里这么解释:

    • There is at least one affiliated asynchronous event on that CQ that was read without a proper acknowledgement.

    • 意思是还有 event 没有发 ack。最后 debug 确实是这样,Server 收到 DISCONNECT 时,没有 ack 就调用了 ibv_destroy_cp ,然后就一直卡住。

    • 去看了下源码,发现 ibv_destroy_cp 一直往后调用有这么一句话:

    • int ibv_cmd_destroy_cq(struct ibv_cq *cq)
      {
      // ...
      while (cq->comp_events_completed != resp.comp_events_reported ||cq->async_events_completed != resp.async_events_reported)
      // ...
      }
      
    • cq 里其实是有一个 event channel 的:

    • struct ibv_cq {struct ibv_comp_channel *channel;
      }
      
    • 说白了应该就是要等所有的 event 全部完毕才能 destroy,否则卡住。

  • cm_id 是对应节点还是对应 qp ?

    • 应该是对应 qp
  • Client rdma_disconnect 之后,rdma_get_cm_event 堵住了。按理说是不应该的,因为当任意一端启动 rdma_disconnect 后,会在两端均产生 RDMA_CM_EVENT_DISCONNECTED 事件。

    • 官方解释是这么说的:

    • After successfully disconnecting, an RDMA_CM_EVENT_DISCONNECTED event will be generated on both sides of the connection.

    • 意思是成功 disconnect 之后才会在双端产生事件。首先,当 Client 调用 rdma_disconnect 后,Server 会立刻产生该事件,但是 Client 不会,只有当 disconnect “完成” 之后,才会产生事件。那么问题就在于这个 “完成” 指什么。

    • 经过多次尝试,发现这个 “完成” 是指 Server 端释放所有 Connection 资源,也就是 ibv_destroy_xxx。因此该 bug 产生的原因是 Server 收到 Client 的 disconnect 请求后没有即使释放资源,导致 Client 一直收不到事件。

相关文章:

RDMA 相关bug记录

对于 Client 来讲&#xff0c;setupConnection 中的 cm_id 应该是本地的&#xff0c;意味着后续 create pd \ cq \ qp 等等传入的 cm_id 都是本地 id。但是对于 Server 来讲&#xff0c;收到 client 的链接请求时将 client 的 cm_id 传入 setupConnection&#xff0c;意味着后续…...

TDengine函数大全-时序库特有函数

以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 时序库特有函数 TDengine函数大全CSUMDERIVATIVEDIFF…...

vue-cli3项目本地启用https,并用mkcert生成证书

在项目根目录下的vue.config.js文件中&#xff1a; // vue.config.js module.exports {devServer: {host:dev.nm.cngc// 此处开启 https,并加载本地证书&#xff08;否则浏览器左上角会提示不安全&#xff09;https: {cert: fs.readFileSync(path.join(_dirname,./cert.crt)…...

包装类笔记

包装类 5.1 概述 Java 提供了两个类型系统&#xff0c;基本类型与引用类型&#xff0c;使用基本类型在于效率&#xff0c;然而很多情况&#xff0c;会创建对象使用&#xff0c;因为对象可以做更多的功能&#xff0c;如果想要我们的基本类型像对象一样操作&#xff0c;就可以使…...

TC和TG油封有什么区别?

油封是各种机械系统(包括发动机和工业机械)中的重要部件&#xff0c;因为它们可以防止润滑剂和污染物的泄漏。在可用的不同类型的油封中&#xff0c;常用的是TC和TG密封件。在本文中&#xff0c;我们将讨论TC和TG油封之间的差异&#xff0c;帮助您了解它们的独特特性和应用。 …...

大数据之MapReduce

MapReduce概述 是一个分布式的编程框架&#xff0c;MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在一个Hadoop集群上。 优点&#xff1a; 易于编程&#xff0c;简单的实现一些接口&#xff0c;就可以完成一…...

《机器人学一(Robotics(1))》_台大林沛群 第 5 周【机械手臂 轨迹规划】 Quiz 5

我又行了&#xff01;&#x1f923; 求解的 位置 可能会有 变动&#xff0c;根据求得的A填写相应值即可。注意看题目。 coursera链接 文章目录 第1题 Cartesian space求解 题1-3 的 Python 代码 第2题第3题第4题 Joint space求解 题4-6 的 Python 代码 第5题第6题其它可参考代…...

嵌入式面试/笔试C相关总结

1、存储 单片机端编译后分为code ro rw zi几个区域&#xff0c;其中code是执行文件&#xff0c;ro(read only)只读区域&#xff0c;存放const修饰常量、字符串。rw(read write)存放已初始化变量。zi存放未初始化变量。编译完成后bin大小为coderorw。运行时所需内存为rwzi。 在电…...

支付宝使用OceanBase的历史库实践分享

为解决因业务增长引发的数据库存储空间问题&#xff0c;支付宝基于 OceanBase 数据库启动了历史库项目&#xff0c;通过历史数据归档、过期数据清理、异常数据回滚&#xff0c;实现了总成本降低 80%。 历史数据归档&#xff1a;将在线库&#xff08;SSD 磁盘&#xff09;数据归…...

accelerate 分布式技巧(一)

accelerate分布式技巧 简单使用 Accelerate是一个来自Hugging Face的库&#xff0c;它简化了将单个GPU的PyTorch代码转换为单个或多台机器上的多个GPU的代码。 Accelerate精确地抽象了与多GPU/TPU/fp16相关的模板代码&#xff0c;并保持Pytorch其余代码不变。 import torchim…...

密码找回安全

文章目录 密码找回安全任意秘密重置 密码找回安全 用户提交修改密码请求;账号认证:服务器发送唯一ID (例如信验证码)只有账户所有者才能看的地方&#xff0c;完成身份验证&#xff1b;身份验证:用户提交验证码完成身份验证;修改密码:用户修改密码。 任意秘密重置 登录metinfo4…...

Spring Boot + Vue的网上商城之商品管理

Spring Boot Vue的网上商城之商品管理 在网上商城中&#xff0c;商品管理是一个非常重要的功能。它涉及到商品的添加、编辑、删除和展示等操作。本文将介绍如何使用Spring Boot和Vue来实现一个简单的商品管理系统。 下面是一个实现Spring Boot Vue的网上商城之商品管理的思路…...

B站:提高你的词汇量:如何用英语谈论驾驶

视频链接&#xff1a;提高你的词汇量:如何用英语谈论驾驶_哔哩哔哩_bilibili 英文音标中文hood/hʊd/n. 汽车的引擎盖go over仔细检查&#xff1b;认真讨论&#xff1b;用心思考There are plenty of videos go over this.有很多关于这个的视频unlockvt. 发现&#xff1b;揭开&…...

大前端面试注意要点

前端面试&#xff1a;从IT专家角度全面解析 在数字时代&#xff0c;前端开发工程师的角色变得越来越重要。随着网站和应用程序的复杂性和交互性越来越高&#xff0c;对具有专业技能的前端开发人员的需求也在不断增长。对于正在寻找前端开发职位的开发者&#xff0c;或者正在寻…...

稻盛和夫-如是说(读书笔记)

本书解答的核心问题&#xff1a; “今天&#xff0c;我们需要的不是短期有效的处方。作为人&#xff0c;何谓正确&#xff1f;作为人&#xff0c;应该如何度过人生&#xff1f;这才是一切问题的根源。 有几个要点和认知比较深的地方谈一谈。 1、利他 类似于阳明心学&#xff0…...

Jmeter是用来做什么的?

JMeter是一个开源的Java应用&#xff0c;主要用于性能测试和功能测试。它最初由Apache软件基金会设计用于测试Web应用程序&#xff0c;但现在已经扩展到其他测试功能。JMeter的主要功能如下&#xff1a; 性能测试&#xff1a;性能测试是JMeter的核心功能&#xff0c;主要分为两…...

Docker基础教程

Docker基础教程 Docker简介 Docker基本操作 Docker应用 Docker自定义镜像 Docker compose 为什么使用DockerDocker简介安装DockerDocker的中央仓库Docker镜像操作Docker容器操作准备一个web项目创建MySQL容器创建Tomcat容器将项目部署到TomcatDocker数据卷DockerfileDock…...

Linux命令200例:who用于显示当前登录到系统的用户信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…...

HGDB-修改分区表名称及键值

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;N/A 版本&#xff1a;4.5.7 文档用途 使用存储过程拼接SQL&#xff0c;修改分区名称、分区键值、并重新加入主表&#xff0c;适用于分区表较多场景。 详细信息 说明&#xff1a;本文档为测试过程&#xff1…...

1分钟了解音频、语音数据和自然语言处理的关系

机器学习在日常场景中的应用 音频、语音数据和自然语言处理这三者正在不断促进人工智能技术的发展&#xff0c;人机交互也逐渐渗透进生活的每个角落。在各行各业包括零售业、银行、食品配送服务商&#xff09;的多样互动中&#xff0c;我们都能通过与某种形式的AI&#xff08;…...

YOLO X Layout实战:商业报告智能解析,快速提取表格与图表数据

YOLO X Layout实战&#xff1a;商业报告智能解析&#xff0c;快速提取表格与图表数据 1. 商业文档处理的痛点与解决方案 在金融分析、市场研究等专业领域&#xff0c;我们经常需要处理大量商业报告。这些PDF或扫描件文档中包含大量有价值的数据表格和图表&#xff0c;但手动提…...

双轨制新零售系统模式开发解析

双轨制新零售系统模式开发解析&#xff1a;从架构设计到合规落地在新零售数字化转型浪潮中&#xff0c;双轨制模式凭借其轻量化组织架构与高效裂变能力&#xff0c;成为企业低成本获客与业绩增长的重要工具。不同于传统多级分销的复杂层级&#xff0c;双轨制通过“二二复制”的…...

手把手教你用STM32F103C8T6和ESP8266搭建智能温室大棚(附完整源码和PCB)

从零构建基于STM32与ESP8266的智能温室系统实战指南 1. 项目概述与核心设计思路 想象一下&#xff0c;在自家后院搭建一个能自动调节温湿度、精准灌溉的迷你温室&#xff0c;而成本不到一顿火锅的钱。这就是我们今天要实现的STM32F103C8T6ESP8266智能温室系统的魅力所在。不同于…...

FreeRTOS任务切换时,Cortex-M内核的PSP和MSP指针到底怎么变?一个动画讲清楚

FreeRTOS任务切换时Cortex-M内核PSP与MSP指针变化全解析 当你在调试一个嵌入式系统时&#xff0c;突然遇到栈溢出导致的崩溃&#xff0c;那种感觉就像在黑夜里摸索——你知道问题出在哪里&#xff0c;但就是看不清细节。作为一名嵌入式开发者&#xff0c;理解FreeRTOS在Cortex-…...

ArcGIS10.2许可服务启动失败?别急着重装,试试这个命令行修复大法(附端口冲突排查)

ArcGIS 10.2许可服务启动失败的终极排查指南&#xff1a;从命令行到端口冲突解决 当你面对灰色的启动按钮和毫无反应的ArcGIS License Administrator界面时&#xff0c;那种挫败感我深有体会。作为地理信息行业的从业者&#xff0c;我们常常依赖ArcGIS完成关键工作&#xff0c…...

Kubernetes 与边缘计算集成最佳实践

Kubernetes 与边缘计算集成最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。边缘计算是现代云原生架构的重要组成部分&#xff0c;今天直接上硬货&#xff0c;教你如何在 Kubernetes 中集成边缘计算。 二、边缘计算架构模式 模式适用场景优势劣势集中式简单场景管理简单…...

简单几步,让AI帮你画瑜伽女孩:雯雯的后宫-造相Z-Image-瑜伽女孩模型使用教程

简单几步&#xff0c;让AI帮你画瑜伽女孩&#xff1a;雯雯的后宫-造相Z-Image-瑜伽女孩模型使用教程 1. 模型介绍&#xff1a;你的专属AI瑜伽画师 想象一下&#xff0c;你只需要用文字描述&#xff0c;就能让AI为你创作出专业级的瑜伽女孩图片。这就是"雯雯的后宫-造相Z…...

Android14 SurfaceFlinger启动流程与线程调度机制解析

1. SurfaceFlinger的启动入口与初始化流程 Android显示系统的核心服务SurfaceFlinger由init进程启动&#xff0c;这个设计保证了它在系统早期就能准备好图形合成能力。main函数作为入口点&#xff0c;首先做了一系列关键初始化&#xff1a; 设置Binder线程池的最大线程数为4&…...

WPF Chart控件实战:构建高性能实时数据监控曲线

1. WPF Chart控件基础入门 第一次接触WPF Chart控件时&#xff0c;我也被它强大的功能震撼到了。这个控件就像是一个神奇的画板&#xff0c;能够将枯燥的数据变成直观的曲线图。在工业监控系统中&#xff0c;我们经常需要实时显示温度、压力等参数的变化趋势&#xff0c;这时候…...

OpenClaw调试技巧:百川2-13B任务失败时的日志分析与修复

OpenClaw调试技巧&#xff1a;百川2-13B任务失败时的日志分析与修复 1. 当自动化任务突然罢工时 上周三凌晨2点&#xff0c;我的OpenClaw突然停止了工作——这个本该在深夜自动整理会议纪要并归档的助手&#xff0c;悄无声息地宕机了。监控屏幕显示它卡在"正在调用百川2…...