在我的应用程序中,我使用infiniband基础设施将数据流从服务器发送到另一个服务器.我已经习惯了通过infiniband轻松开发ip,因为我对套接字编程比较熟悉.到目前为止,性能(最大bw)对我来说足够好(我知道我没有达到可实现的最大带宽),现在我需要从infiniband连接中获得更多带宽.

ib_write_bw声称我的最大可实现带宽大约是1500 MB / s(我没有得到3000MB / s,因为我的卡安装在PCI 2.0 8x中).

到现在为止还挺好.我使用ibverbs和rdma对我的通信通道进行了编码,但是我得到的波段远远小于我能得到的带宽,我甚至比使用套接字要少一些带宽,但至少我的应用程序不使用任何CPU功率:

ib_write_bw:1500 MB / s

套接字:700 MB / s< =在此测试期间,我的系统的一个核心是100% ibvers rdma:600 MB / s< =在此测试期间根本没有使用CPU 似乎瓶颈在这里:

ibv_sge sge;

sge.addr = (uintptr_t)memory_to_transfer;

sge.length = memory_to_transfer_size;

sge.lkey = memory_to_transfer_mr->lkey;

ibv_send_wr wr;

memset(&wr, 0, sizeof(wr));

wr.wr_id = 0;

wr.opcode = IBV_WR_RDMA_WRITE;

wr.sg_list = &sge;

wr.num_sge = 1;

wr.send_flags = IBV_SEND_SIGNALED;

wr.wr.rdma.remote_addr = (uintptr_t)thePeerMemoryRegion.addr;

wr.wr.rdma.rkey = thePeerMemoryRegion.rkey;

ibv_send_wr *bad_wr = NULL;

if (ibv_post_send(theCommunicationIdentifier->qp, &wr, &bad_wr) != 0) {

notifyError("Unable to ibv post receive");

}

此时下一个等待completation的代码是:

//Wait for completation

ibv_cq *cq;

void* cq_context;

if (ibv_get_cq_event(theCompletionEventChannel, &cq, &cq_context) != 0) {

notifyError("Unable to get a ibv cq event");

}

ibv_ack_cq_events(cq, 1);

if (ibv_req_notify_cq(cq, 0) != 0) {

notifyError("Unable to get a req notify");

}

ibv_wc wc;

int myRet = ibv_poll_cq(cq, 1, &wc);

if (myRet > 1) {

LOG(WARNING) << "Got more than a single ibv_wc, expecting one";

}

从我的ibv_post_send和ibv_get_cq_event返回事件时的时间是13.3ms,当传输8 MB的块时达到大约600 MB / s.

要指定更多(以伪代码我在全球范围内执行的操作):

积极的一面:

post a message receive

rdma connection

wait for rdma connection event

<>

start:

register memory containing bytes to transfer

wait remote memory region addr/key ( I wait for a ibv_wc)

send data with ibv_post_send

post a message receive

wait for ibv_post_send event ( I wait for a ibv_wc) (this lasts 13.3 ms)

send message "DONE"

unregister memory

goto start

被动方:

post a message receive

rdma accept

wait for rdma connection event

<>

start:

register memory that has to receive the bytes

send addr/key of memory registered

wait "DONE" message

unregister memory

post a message receive

goto start

有谁知道我做错了什么?或者我可以改进什么?

我没有受到“Not Invented Here”综合症的影响,所以我甚至愿意抛弃我迄今为止所做的事并采用别的东西.我只需要点对点连续转移.

根据您的伪代码,您看起来好像是为每次传输注册和取消注册内存区域.我认为这可能是事情进展缓慢的主要原因:内存注册是一项非常昂贵的操作,因此您希望尽可能少地执行此操作并尽可能多地重用内存区域.注册内存所花费的所有时间都是您不花费传输数据的时间.

这指出了您的伪代码的第二个问题:您正在等待完成,而不是在上一个工作请求完成之前发布另一个工作请求.这意味着在从工作请求完成到完成并发布另一个请求的时间内,HCA处于空闲状态.在飞行中保持多个发送/接收工作请求要好得多,这样当HCA完成一个工作请求时,它可以立即移动到下一个工作请求.

linux rdma服务,在Linux中infiniband rdma差转转bw相关推荐

  1. linux安全服务管理,Linux系统安全管理服务配置方法与技巧

    任何计算机安全措施的一个重要方面是维持实际控制服务的运行.本文向你展示了在Linux操作系统的PC机上如何配置安全服务管理. 任何计算机安全措施的一个重要方面是维持实际控制服务的运行,让不必要的网络服 ...

  2. linux svn 服务 关闭,Linux下启动、关闭SVN服务

    Linux下启动/关闭Oracle 一.Linux下启动Oracle Linux下启动Oracle分为两步: 1)启动监听: 2)启动数据库实例: 1.登录服务器,切换到oracle用户,或者以ora ...

  3. linux 红帽 服务dns,Linux小红帽搭建dns服务器

    DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过域名,最终得 ...

  4. linux postgre服务名,linux中service配置之postgresql

    在Mandriva 2010.2中,安装了postgresql之后,一般很少能直接在/etc/init.d/下生成postgresql的service 文档,这样,就不能在chkconfig中配置po ...

  5. linux echo服务,在Linux中禁用echo服务

    echo是用于将文字打印到stdout的命令.通常这只是意味着在您提到时写入终端: $ echo 'Hello world' Hello world 有关此命令的更多信息,您可以阅读联机帮助页.这是我 ...

  6. Linux自有服务(2)-Linux从入门到精通第六天(非原创)

    文章大纲 一.设置主机名 二.chkconfig 三.ntp服务 四.防火墙服务 五.rpm管理(重点) 六.cron/crontab计划任务(重点) 七.学习资料下载 八.参考文章 自有服务,即不需 ...

  7. linux的服务文件,Linux的nfs文件服务

    一.NFS概念(适用于Linux与Linux的网络文件系统) 二.安装nfs启动服务 yum install nfs-utils systemctl enbale nfs-server systemc ...

  8. linux dns服务无效,Linux下搭建DNS服务器及踩坑

    DNS服务 域名系统(DNS)是建立在分布式数据库上的分层命名系统.该系统将域名转换为IP地址,并可以将域名分配给Internet组资源和用户,无论实体的物理位置如何. 说白了就是:域名与IP之间的相 ...

  9. Linux高性能服务器之Linux网络编程基本API(6)

    前言 socket地址API:socket最开始的含义是一个P地址和端口对(ip,port).它唯一地表示了使用TCP通信的一端.本书称其为socket地址. socket基础API:ocket的主要 ...

最新文章

  1. [业界资讯]腾讯QQ同时在线用户数突破8000万
  2. 广州的11个辖区_广州上半年经济发展情况,天河区总量超过2000亿
  3. VS2015和QTcreator冲突解决办法
  4. Java通过IText导出word和pdf
  5. Excel中这四个常出错的地方,你一定中过!
  6. YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】
  7. 基于springboot的高校后勤系统
  8. Azure实践之通过automation管理资产
  9. 在Win32中管理虚拟内存——举例
  10. 前端-----今日份小练习
  11. 在退出作用域时做一些事
  12. php laypage,LayUI分页和LayUI laypage分页区别详解
  13. 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
  14. 模电、数电、电路面试题
  15. 图形学空间坐标变化之二维图形观察及变换
  16. 修改植物大战僵尸游戏存档
  17. go---- mgo
  18. 关于微擎模块,点击上传图片无反映问题。
  19. 详细了解步进电机的最大静转矩以及矩频特性
  20. iOS汉字字符串转拼音

热门文章

  1. springboot--多环境
  2. POJ3737 UmBasketella
  3. springboot配置文件(.yml)中自定义属性值并在controller里面获取
  4. 前端技术之_CSS详解第三天
  5. 顺序线性表 ---- ArrayList 源码解析及实现原理分析
  6. 牛客网--蘑菇街2016研发工程师编程题
  7. c语言自动变量与静态变量,C语言的中的静态变量和局部变量(自动变量)
  8. linux下的asp.net服务器,Linux(Ubuntu)下搭建ASP.NET Core环境
  9. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nvm的安装与配置(4)
  10. Python+tkinter实现超时无键盘操作自动退出