[RDMA] 高性能异步的消息传递和RPC :Accelio

  1. Introduce

Accelio是一个高性能异步的可靠消息传递和RPC库,能优化硬件加速。 RDMA和TCP / IP传输被实现,并且其他的传输也能被实现,如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件,用于高性能异步的可靠消息传递和RPC库。

2. Accelio 设计目标

Accelio提供了一个易于使用的,可靠的,可扩展和高性能的数据/消息传递中间件,最大限度地提高现代CPU和网卡硬件的效率,减少将新的扩展应用程序产品推向市场的的时间。

3. Accelio Key Features

  1. 专注于高性能异步的API
  2. 可靠的消息传递(端对端)
  3. 请求/响应(交易)或发送/接收模式
  4. 提供连接和资源抽象到最大的可扩展性和可用性
  5. 最大限度地发挥每个线程专用的硬件资源,多线程应用程序的性能
  6. 旨在最大限度地利用RDMA,硬件卸载和多核CPU的优势
  7. 支持多种传输选项(RDMA,TCP,..)
  8. 服务和存储集群/向外扩展的原生支持
  9. 小消息合并
  10. 简单和抽象的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 部分开发者说由于公司中心转移,这个库不开发了,建议用别的库。

相关推荐
一名路过的小码农3 天前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
墨水\\6 天前
分布式----Ceph应用(下)
分布式·ceph
大G哥7 天前
基于K8S1.28.2实验rook部署ceph
java·ceph·云原生·容器·kubernetes
石兴稳8 天前
Ceph PG(归置组)的状态说明
ceph
石兴稳8 天前
Ceph层次架构分析
ceph
活老鬼8 天前
Ceph分布式存储
linux·运维·服务器·分布式·ceph
石兴稳10 天前
Ceph client 写入osd 数据的两种方式librbd 和kernel rbd
linux·ceph
石兴稳10 天前
Ceph的pool有两种类型
ceph
运维小文10 天前
ceph的集群管理
ceph·对象存储·存储·ceph集群管理·ceph节点管理
石兴稳11 天前
iSCSI 和SCSI的概述
ceph