[RDMA] 高性能异步的可靠消息传递和RPC :Accelio
目录
1. Introduce
2. Accelio 设计目标
3. Accelio Key Features
4. Who can take advantage of it?
5. Accelio 的结构示意图
6. Accelio Integration With Other Applications/Projects
7. 一个会话/连接建立流程
8. 高级别传输流程 - 异步请求/响应模型(Transaction Delivery API Model)
9. 本地多线程(多进程)支持
10. 内存管理
11. Accelio中的一些主要函数调用
12. 异步事件处理
13. Accelio概述与总结
1. Introduce
Accelio是一个高性能异步的可靠消息传递和RPC库,能优化硬件加速。 RDMA和TCP / IP传输被实现,并且其他的传输也能被实现,如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件,用于高性能异步的可靠消息传递和RPC库。
2. Accelio 设计目标
Accelio提供了一个易于使用的,可靠的,可扩展和高性能的数据/消息传递中间件,最大限度地提高现代CPU和网卡硬件的效率,减少将新的扩展应用程序产品推向市场的的时间。
3. Accelio Key Features
- 专注于高性能异步的API
- 可靠的消息传递(端对端)
- 请求/响应(交易)或发送/接收模式
- 提供连接和资源抽象到最大的可扩展性和可用性
- 最大限度地发挥每个线程专用的硬件资源,多线程应用程序的性能
- 旨在最大限度地利用RDMA,硬件卸载和多核CPU的优势
- 支持多种传输选项(RDMA,TCP,..)
- 服务和存储集群/向外扩展的原生支持
- 小消息合并
- 简单和抽象的API
4. Who can take advantage of it?
对那些高效的,高性能的,可靠消息传递实现的应用,如集群,横向扩展块/文件/对象存储,BigData和NoSQL应用程序,快速消息总线等,感兴趣的开发商可以使用。
5. Accelio 的结构示意图
Accelio的主层分别是:
•应用程序接口 - 提供易于使用的原语进行快速,可靠的异步消息队列或RPC
•连接和会话管理 - 提供可靠的终端到终端的连接等端点,动态连接建立连接池,故障恢复和迁移/重定向
•可插拔传输层 - 使映射到不同的硬件或软件传输实现
6. Accelio Integration With Other Applications/Projects
Accelio被用作高性能,低延迟,可靠消息/ RPC库的各种开源和商业产品,客户项目
支持多种绑定(Kernel C, User Space C/C++, Java, Python (future))。
7. 一个会话/连接建立流程
在建立连接到远程端点,客户指定远程统一资源标识符(URI)。URI包含首选传输方式,强制领先的IP地址和可选端口数目,以及可选的资源ID或名称。
/服务器端响应会话请求,下列选项之一:
•接受可选属性的连接
•拒绝连接
•无缝地将连接重定向到一个不同的进程或实体
/成功或重定向响应,客户端建立一个或多个并联连接到对端,将试图重用现有的连接,以减少开销。
/*会话和连接初始化流程
(1)打开一个会话到远程资源
--例如“remote-ip:port/resource-name”
(2)服务器端回应,接受,拒绝或重定向
--用“重定向”负载平衡或迁移资源穿过整个集群(多个节点或进程)
--服务器提供一个portals列表(IPs+Ports)
--每个portal识别port(IP),然后CPU/Thread去访问
--服务器基于round/robin,Hash或者custom logic,可以加载平衡通信通过多个ports/cores
--建立连接(S)和发送/接收邮消息
--可以有多个连接(例如每个客户端线程1个)
--如果连接已经提供给远程进程,可重用
--故障/变化上的重建或迁移连接
8. 高级别传输流程 - 异步请求/响应模型(Transaction Delivery API Model)
Accelio提供一个RPC-like的请求/回应事务模式,或可靠消息发送/接收模式。
在事务模式中,发起方发送一个请求,它包含专用应用程序的头和指向输入与输出数据缓冲区的指针,允许零拷贝操作和RDMA。
当请求到达接收端时,它触发一个回调通知,基于该接收的应用程序处理该事务。当在接收端完成该处理时,它以返回的状态和数据来发送响应。服务器端可以异步操作,并发出响应在其方便的时候,也就是,当所返回的数据是可用的。
发起方可以请求消息到达确认。在这样的情况下,接收方接受该消息之后,一个确认消息返回到发起方。该确认消息可用于阻挡/同步操作和消息跟踪。
响应到达时,发起方被通知。在这个时候,发起方的数据缓冲区包含返回的数据,并且回叫应答指向原始请求。
如果传输失败,同样的传输被重新传输到已恢复或备用的连接上。
发起方可以要求中止/取消某范围内的消息(例如,请求超时)。接收方试图中止操作(如果不执行他们),并以成功或失败来反应。无论哪种方式,相关的响应不返回到发起方。注意,请求可以通过客户端(无源)或服务器(有源)端发出。
发送/接收操作遵循相似的流程去请求/响应,唯独没有响应消息。消息从发起方发送,引发回调到接收端,使用可选的确认通知。
9. 本地多线程(多进程)支持
对于客户端和服务器端,Accelio支持全并行和多线程操作
--应用程序使用单个CPU核心/线程的时候的性能可以被限制
--当多个线程在使用同一个网络资源,需要复杂的状态管理和锁定,这样会增加应用程序的开销,并限制其性能和可伸缩性
--Accelio支持全并行为客户端和服务器
**每个线程可以被相关联有独立的硬件资源(QP的&个CQ)和事件循环,从而无需锁定,并允许最大的并行
**每个会话可以由多个并联连接(每个关联使用不同的CPU线程)组成
**服务器端可以公开多个portal(IP:port)为相同的资源/服务,每个port可以由不同的CPU线程和事件循环提供服务。
如下图所示可以直观Accelio的多线程支持
10. 内存管理
--Accelio管理2种类型缓冲区
**发送/接收缓冲环的头和小数据(通常4-8KB每个)
**大的缓冲区为大型的IOs和RDMA
--大缓冲区被应用程序的库来分配和控制
--应用控制缓冲区:
**需要预注册内存缓冲区(使用reg_mr),并保证零拷贝
--库控制缓冲区
**可能会在客户端上有一个copy
**接收端零拷贝(应用程序将得到一个指向接收缓冲区)
**当做完时,请求应用程序来释放缓冲区(用release_msg)
11. Accelio中的一些主要函数调用
Functionn Description
ctx_create/destroy Open thread context helping accelio to partition data without locks
ctx_run/stop Run the event loop in the context
ctx_get_poll_params Return Accelio’s single file descriptor to add to external loop
session_create/destroy Create/destroy a session to a remote peer
connect/disconnect Open/Close a connection with a remote server/portal
bind/unbind Bind/unbind a server portal with a URL (protocol:ip:port)
accept Accept incoming connection (server side)
reject Reject incoming connection (server side)
redirect Redirect a connection to a different node or portals or process
send_request/response Send a request/response message
send/recv_msg Send/receive memory buffer (like sockets send/recv)
release_msg Release message buffers
reg_mr/dereg_mr Register/deregister application buffers for app controlled RDMA
12. 异步事件处理
高性能的应用程序使用异步API来进行多个操作,并利用多种资源并行。
•Accelio以下面的方式处理异步事件:
1,放置一个回调在事件循环,该事件循环结合来自多个资源的事件。
2,当一个事件,发出的一组操作,诸如从网络接收的消息和写入到磁盘。
•Accelio内置了epoll的支持。应用程序提供的事件循环是可用的。
•对于最低的消息延迟,Accelio提供了优化事件处理,当一个事件循环处于空闲状态(一个预定义的时间)时,其会结合忙等待池。
13. Accelio概述与总结
Accelio是一个开源的高性能,异步,可靠消息传递和远程过程调用(RPC)的库。对于远程直接内存访问(RDMA),TCP / IP和共享内存, Accelio优化硬件加速。 Accelio最大化消息和CPU并行性,同时最大限度地降低CPU的争用和锁定。并行和异步体系结构,无锁定设计和零数据复制机制,提供每秒无与伦比的传输和带宽性能,以及更低的延迟和CPU开销。 Accelio保证终端到终端的事务传递和执行力,它支持事务请求 - 应答的通信模型。
Accelio通过提供内置的多路径,实时会话重定向/迁移和集群服务或存储,解决了扩展性和虚拟化环境的挑战。管理作为一种模块化的开源项目,Accelio无缝地延伸到新的功能,实现传输和服务。
libxio(又名库accelio)是一个位于RDMA之上的轻量级消息传递库。该库为零拷贝消息传递和无锁定可扩展性,提供了异步消息传递设计。
Accelio是一种创新的API,它解决了一些现代计算机,网络和存储系统主要挑战,如:
•有效地利用多内核
•强大的横向扩展
•降低硬件和软件堆栈开销
•减少通信开销和延迟
Accelio提供了一个强大的,灵活的通信和消息传递层,从而使得应用程序扩展和中间件快速发展。它能够整合性能,可用性,管理和安全功能于一体的实现,可用于多种应用。工作促进了Accelio开源社区,供应商可以专注于自己的应用程序的核心附加价值,与开发者在一个更大的社区分享他们的实现和体验。
这个库已经停止开发了,在github主页的issue 部分开发者说由于公司中心转移,这个库不开发了,建议用别的库。
[RDMA] 高性能异步的可靠消息传递和RPC :Accelio相关推荐
- 基于Java的RDMA高性能通信库(五):JXIO
JXIO 是 Mellanox 公司的RDMA中间件accelio在Java上的包装,JXIO使用类似于Java nio的ServerChannel方式,熟悉接口可以做好变换.AcceliO是针对硬件 ...
- 基于Java的RDMA高性能通信库(六):SDP - Java Socket Direct Protocol
目录 1.Java网络编程和套接字API的历史 2.InfiniBand 高速网络通信技术 3. Java 网络协议栈API 4.Java 7 SDP 远程直接内存存取(RDMA) 4.1 Java7 ...
- 基于Java的RDMA高性能通信库(四):DaRPC
DaRPC是一个用于Java的RPC框架和API,它使用RDMA在用户空间中实现RPC消息处理和网络处理之间的紧密集成. 自80年代初以来,远程过程调用(RPC)一直是分布式系统的基石. 最近,在数据 ...
- 基于Java的RDMA高性能通信库(三):Direct Storage and Networking Interface (DiSNI)
The Direct Storage and Networking Interface (DiSNI) 是一个Java框架和API专门为了在用户空间进行存储和网络访问的(IBM的jVerbs的新开源代 ...
- 基于Java的RDMA高性能通信库(一):IBM jVerbs库
目录 1. verbs API 2. endpoint API 3. jVerbs 应用程序系统和运行时需求(仅限 Linux) 4. Java Socket Over RDMA 与 jVerbs 比 ...
- 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA
目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...
- 打造高性能高可靠的 Ceph 块存储系统
块存储系统 分布式存储有出色的性能,可以扛很多故障,能够轻松扩展,所以我们使用Ceph构建了高性能.高可靠的块存储系统,并使用它支撑公有云和托管云的云主机.云硬盘服务. 由于使用分布式块存储系统,避免 ...
- 一周一论文(翻译 总结)— [SOCC 14] DaRPC: Data Center RPC 基于RDMA的高性能通信RPC
目录 Abstract 1. Introduction 2. Motivation 3. Background 4. Design of DaRPC 4.1 Single Client-Server ...
- 高性能、高可靠分布式文件系统 go-fastdfs v1.2.0 发布
开发四年只会写业务代码,分布式高并发都不会还做程序员? go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高 ...
最新文章
- 关于嵌入式开发,到底需要会多少门语言,做好准备了吗
- 给网站增加https的简单方法
- ps - 按进程消耗内存多少排序
- JAVA 多用户商城系统b2b2c---配置中心和消息总线
- Android中Context详解
- java基础教程哪个好,面试必会
- android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集
- ccna之交换机密码破解
- oracle net Manager 配置连接 tiptop 鼎捷ERP 数据库
- 矢量网络分析仪--测天线时使用技巧
- 计算机网络技术评估与备选方案,创业学复习提纲
- 论window10如何获得最高权限
- 侯捷C++八部曲笔记(二、STL标准库和泛型编程)
- 怎么让excel中一部分表格显示但是打印时不打印?
- jQuery Easyui 源码分析之combo组件
- linux 远程22端口打开,kali如何手动打开22端口
- 形态学-----细化
- H5网页链接APP浏览器跳转小程序-邪少外链
- 难倒刘强东的奥数题,京东智能供应链解开了
- QT——连接USB摄像头
热门文章
- github创建项目,并提交本地文件
- pageX、clientX、screenX、offsetX、layerX、x
- javaScript实现字符串首字母大写
- 人工智能与电气工程及其自动技术论述
- 中国研制600公里时速磁悬浮:北京到上海,仅需3.5小时左右
- 《学习OpenCV3(中文版)》图书目录
- 机器学习理论篇:机器学习的数学基础
- OJ系列之---单词倒排
- java user directory,Java ProcessBuilder directory()方法与示例
- 小学信息技术计算机网络教学设计,《小学信息技术》教学设计