目录

原理

IBV_SEND_SIGNALED

IBV_SEND_INLINE


原理

IBV_SEND_INLINE和IBV_SEND_SIGNALED 是RDMA 优化小消息通信性能的收到之一。

其原理是:

IBV_SEND_INLINE 减少网卡的DMA。(CPU直接将数据写入网卡缓冲,而不是等网卡来DMA)

IBV_SEND_SIGNALED 减少WC的产生和对WC的读取次数。

说白了,就是网卡驱动注册了一块MEM内存,用户程序post WQ的时候往里面写如WQE,如果要发送的数据大,数据放在用户空间的buff,那么WQE里面的指针指向buff。网卡从MEM里面读出WQE,然后根据WQE里面 指针,再去buff读取数据。如果要发送的数据小,就直接把数据放到WQE的paylod区域,一同放入MEM内存。这样网卡从MEM里面读出WQE,就不在需要再去buff读取数据。

原理详细说明见:

【RDMA】InfiniBand如何工作和小消息通信性能优化方案_bandaoyu的note-CSDN博客

IBV_SEND_SIGNALED

  • unsigned Completions:IB默认是为每个WQE发送一个完成信号,但IB也允许应用程序关闭指定的WQE的完成(信号),但是注意每隔post  n 个关闭信号的WQE,就要post一个开启完成信号的WQE 。(因为只有产生CQE,程序去读取了CQE之后才会清理发送队列SQ的SQE,如果一直没有CQE产生,则读取不断CQE也不就不会清理发送队列SQ,很快发送队列SQ就会撑满)

关闭Completion可以减少NIC对CQE的DMA writes。此外,应用程序轮询更少的CQE,从而减少了开销。

关于无信号完成的详细说明:【RDMA】使用‘无信号完成’(Working with Unsignaled completions)|IBV_SEND_SIGNALED_bandaoyu的note-CSDN博客_rdma网卡

深层原理:【RDMA】InfiniBand如何工作和小消息通信性能优化方案_bandaoyu的note-CSDN博客

IBV_SEND_INLINE

原理:【RDMA】InfiniBand如何工作和小消息通信性能优化方案_bandaoyu的note-CSDN博客

IBV_SEND_INLINE      -sg_list中指定的内存缓冲区将内联放置在SR( WQE)中。这意味着底层驱动程序(即CPU)将读取数据,而不是RDMA设备。这意味着将不会检查L_Key,实际上那些内存缓冲区甚至不必注册(毕竟CPU本来是老大/主子),并且可以在ibv_post_send()将要结束后,立即重用它们。仅对Send和RDMA write操作码有效。

由于在该代码中没有涉及到key的交换,所以也无法使用RDMA传输,所以还是使用了CPU读取数据,既然是CPU读取,那么也就不需要注册内存缓冲区了,这个标记只能用于SendRDMA write操作。

The flag IBV_SEND_INLINE describe to the low level driver how the data
will be read from the memory buffer
(the driver will read the data and give it to the HCA or the HCA will
fetch the data from the memory using
the gather list).

The data on the wire for inline messages looks the same like data which
was fetched by the HCA.

The receive side don't have any feature which can work with memory
buffer without any registration.

[ofa-general] Query on ibv_post_recv and IBV_SEND_INLINE

-sg_list中指定的内存缓冲区将内联放置在SR( WQE)中。(即原先是SR(内含sg_list)和sg_list中指向的内存缓冲区 放置在两个位置,网卡先读取SR获得sg_list,再根据sg_list信息读取sg_list指向的内存缓存。需要两次DMA操作。内联就是将内存缓存区放置在SR内,网卡读取SR就一并获得内存缓存,只需一次DMA)

带来的好处:

不使用INLINE:

data 标记到sg_list,post 一个WR, RDMA到WR 队列获取WR,然后读取sg_list中的数据到RDMA网卡发送缓冲。

使用INLINE:

这个不太好理解,从下面描述mellonx如何实现这个功能的这段文字:

“if IBV_SEND_INLINE is set, the code memcpys the data into the descriptor and does not keep any reference to the pointers passed in through the sg ilst.”

(https://www.spinics.net/lists/linux-rdma/msg26693.html)

我个人理解是:

一旦IBV_SEND_INLINE被设置,在执行post的时候CPU不是把SR放到SQ上等着网卡来dma,而是CPU直接将SR中的指向的数据直接写到网卡的描述符(descriptor)中,即直接写入网卡缓冲。写完就完成了SR指向的内存到网卡缓存的数据转移,SR指向的内存就可以释放或重新利用了。

省去了RDMA网卡到WR 队列获取WR的过程,减少了时延。

使用INLINE的陷阱

根据文档, inline发送不需要等待wc就可以重用发送buffer. 不需要等待wc就可以继续发消息,但是如果不处理wc,那么就不会清理sr,连续不断的继续发送INLINE消息(而不去处理wc),sr得不到清理最终会撑爆sq,导致最后发不出消息。

所以使用INLINE的时候记得在sq撑爆之前去处理wc。

案例:《ibv_post_send() work queue overflow》ibv_post_send() work queue overflow - 知乎

@UESTC

【RDMA】IBV_SEND_INLINE和IBV_SEND_SIGNALED的原理|RDMA小消息通信性能优化相关推荐

  1. 【RDMA】InfiniBand如何工作和小消息通信性能优化方案

    目录 前言 快速PCIe背景 涉及的基本机制 操作特性 前言 bandaoyu 本文随时更新,地址:https://blog.csdn.net/bandaoyu/article/details/119 ...

  2. 微信小程序交互性能优化利器WXS的使用(一)

    微信小程序交互性能优化利器WXS的使用 WXS简介 WXS原理 注意事项(划重点) WXS的使用 引入WXS WXS的响应事件(重要) 开始食用WXS 封装视图层WXML实用小方法 WXS简介 WXS ...

  3. 4. linux调用文件计算阶乘前n项和_用一道有趣的小题谈谈性能优化--求阶乘和的末6位

    此题来源:算法竞赛入门经典(第2版) P21 /** * 输入n, 计算 S = 1! + 2! + ... n! 的末六位(不含前导0).* n < 10^6* n! 表示阶乘, 是前n个正整 ...

  4. 微信小程序的底层架构原理,及如何做性能优化

    双线程模型 微信小程序的框架包含两部分 View 视图层.App Service逻辑层.View层用来渲染页面结构,App Service层用来逻辑处理.数据请求.接口调用,它们在两个线程(Webvi ...

  5. 原理简介_消息通信的利器MQTT协议简介及协议原理

    - 没用过但是必须得知道系列 - 前言: 相比于 XMPP, MQTT 的简单轻量受到了不少工程师的喜爱,从物联网到传统的消息服务,简单可依赖的 MQTT 到底为何让人如此着迷呢? MQTT 协议-M ...

  6. 前端小游戏页面性能优化

    公司是做教育类游戏开发,以前是用flash制作,现在开始使用CreateJS框架开发Canvas游戏.今天突然收到一个任务:游戏在iPad2下面游戏会打不开,然后自动刷新,再加载不出来,然后再刷新,陷 ...

  7. activemq原理 java_分布式消息通信ActiveMQ原理-持久化策略-笔记

    消息的持久化策略分析 消息持久性对于可靠消息传递来说是一种比较好的方法, 即时发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重启后仍然可以将消息发送出去. 消息持久性的原理 ...

  8. InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念

    核心基础概念 FCoE:以太网光纤通道 (Fibre Channel Over Ethernet) 它是一个存储网络协议,允许在以太网上发送光纤通道帧, 且IP通信和光纤通道通信使用相同的以太网端口. ...

  9. linux rdma服务,在Linux中infiniband rdma差转转bw

    在我的应用程序中,我使用infiniband基础设施将数据流从服务器发送到另一个服务器.我已经习惯了通过infiniband轻松开发ip,因为我对套接字编程比较熟悉.到目前为止,性能(最大bw)对我来 ...

最新文章

  1. py2与py3的区别
  2. javasript中var、let和const区别
  3. 走近分形与混沌(part4)--牛顿与混沌
  4. CF451E-Devu and Flowers【组合计数,容斥】
  5. 深度推荐模型(EDRMs):面向Web级应用的基于二进制码的Hash Embedding
  6. 二维码 小优机器人_自动炒菜机器人亮相服贸会 可做3000多道菜品
  7. [Internet]使用IP安全策略阻止Ping
  8. ROS配置ipv6方法
  9. 天下3各服务器最新互转查询,转服必看 大荒最新服务器火爆度排行榜
  10. 韩信点兵php,韩信点兵c语言
  11. 计算机网络面试_笔试_牛客网总结
  12. 【Java - L - 0704】- e - 二分查找
  13. 汇编中call指令和其对应的机器码
  14. Python 用Pygame写一个Flappy Bird经典小游戏
  15. 孩子,外面的世界不会轻易原谅你…
  16. A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues论文笔记
  17. 3.15曝光智能骚扰产业链,连你月收入也知道!网易专家支招用户如何避免被“鱼肉”
  18. 单片机的组成、工作原理、分类、特点以及发展趋势
  19. 【Docker】Dockerfile简介
  20. 面试常见问题(嵌入式)

热门文章

  1. 决定Java程序员工资高低的三个因素
  2. C++如何写一个函数
  3. Django models模块字段注释
  4. SpringSocial 开发 QQ 登录
  5. 2021年中国企业风险投资发展现状及未来发展趋势分析[图]
  6. 15 | 网络优化(上):移动开发工程师必备的网络优化知识
  7. 电商平台后台管理系统--->系统详细设计(订单管理模块)
  8. 民法典实施后,夫妻共同债务如何认定?
  9. C Primer Plus 第二章 复习题编程练习 答案
  10. 迄今见过最好的职业规划的文章