linux rdma服务,在Linux中infiniband rdma差转转bw
在我的应用程序中,我使用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相关推荐
- linux安全服务管理,Linux系统安全管理服务配置方法与技巧
任何计算机安全措施的一个重要方面是维持实际控制服务的运行.本文向你展示了在Linux操作系统的PC机上如何配置安全服务管理. 任何计算机安全措施的一个重要方面是维持实际控制服务的运行,让不必要的网络服 ...
- linux svn 服务 关闭,Linux下启动、关闭SVN服务
Linux下启动/关闭Oracle 一.Linux下启动Oracle Linux下启动Oracle分为两步: 1)启动监听: 2)启动数据库实例: 1.登录服务器,切换到oracle用户,或者以ora ...
- linux 红帽 服务dns,Linux小红帽搭建dns服务器
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过域名,最终得 ...
- linux postgre服务名,linux中service配置之postgresql
在Mandriva 2010.2中,安装了postgresql之后,一般很少能直接在/etc/init.d/下生成postgresql的service 文档,这样,就不能在chkconfig中配置po ...
- linux echo服务,在Linux中禁用echo服务
echo是用于将文字打印到stdout的命令.通常这只是意味着在您提到时写入终端: $ echo 'Hello world' Hello world 有关此命令的更多信息,您可以阅读联机帮助页.这是我 ...
- Linux自有服务(2)-Linux从入门到精通第六天(非原创)
文章大纲 一.设置主机名 二.chkconfig 三.ntp服务 四.防火墙服务 五.rpm管理(重点) 六.cron/crontab计划任务(重点) 七.学习资料下载 八.参考文章 自有服务,即不需 ...
- linux的服务文件,Linux的nfs文件服务
一.NFS概念(适用于Linux与Linux的网络文件系统) 二.安装nfs启动服务 yum install nfs-utils systemctl enbale nfs-server systemc ...
- linux dns服务无效,Linux下搭建DNS服务器及踩坑
DNS服务 域名系统(DNS)是建立在分布式数据库上的分层命名系统.该系统将域名转换为IP地址,并可以将域名分配给Internet组资源和用户,无论实体的物理位置如何. 说白了就是:域名与IP之间的相 ...
- Linux高性能服务器之Linux网络编程基本API(6)
前言 socket地址API:socket最开始的含义是一个P地址和端口对(ip,port).它唯一地表示了使用TCP通信的一端.本书称其为socket地址. socket基础API:ocket的主要 ...
最新文章
- [业界资讯]腾讯QQ同时在线用户数突破8000万
- 广州的11个辖区_广州上半年经济发展情况,天河区总量超过2000亿
- VS2015和QTcreator冲突解决办法
- Java通过IText导出word和pdf
- Excel中这四个常出错的地方,你一定中过!
- YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】
- 基于springboot的高校后勤系统
- Azure实践之通过automation管理资产
- 在Win32中管理虚拟内存——举例
- 前端-----今日份小练习
- 在退出作用域时做一些事
- php laypage,LayUI分页和LayUI laypage分页区别详解
- 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
- 模电、数电、电路面试题
- 图形学空间坐标变化之二维图形观察及变换
- 修改植物大战僵尸游戏存档
- go---- mgo
- 关于微擎模块,点击上传图片无反映问题。
- 详细了解步进电机的最大静转矩以及矩频特性
- iOS汉字字符串转拼音
热门文章
- springboot--多环境
- POJ3737 UmBasketella
- springboot配置文件(.yml)中自定义属性值并在controller里面获取
- 前端技术之_CSS详解第三天
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
- 牛客网--蘑菇街2016研发工程师编程题
- c语言自动变量与静态变量,C语言的中的静态变量和局部变量(自动变量)
- linux下的asp.net服务器,Linux(Ubuntu)下搭建ASP.NET Core环境
- Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nvm的安装与配置(4)
- Python+tkinter实现超时无键盘操作自动退出