[RDMA] 高性能异步的消息传递和RPC :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
1. Introduce Accelio是一个高性能异步的可靠消息传递和RPC库,能优化硬件加速。 RDMA和TCP / IP传输被实现,并且其他的传输也能被实现,如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件,用…...
typescript报错:‘name‘ was also declared here
问题再现 用 Typescript 时, 遇到一个声明常量 name 的报错。代码如下: let name:string"zhangsan"; let num:number1001;执行编译时报错: 原因 在默认状态下,typescript 将 DOM typings 作为全局的运行环境&#…...
第十章:联邦学习视觉案例
代码 传送门...
c语言——输出一个整数的所有因数
//输出一个整数的所有因数 #include<stdio.h> #include<stdlib.h> int main() {int number,i;printf("输入整数:");scanf("%d",&number);printf(" %d 的因数有: ",number);for(i1;i<number;i){if(numb…...
mqtt学习记录
目录 1 匿名登录2 ⽤户名密码登录,配置接收的主题mosquitto 配置文件修改添加⽤户信息添加topic和⽤户的关系登录演示 3 遗嘱机制 1 匿名登录 ⾸先打开三个终端, 启动代理服务:mosquitto -v -v 详细模式 打印调试信息 默认占⽤:…...
爬虫逆向实战(十八)--某得科技登录
一、数据接口分析 主页地址:某得科技 1、抓包 通过抓包可以发现数据接口是AjaxLogin 2、判断是否有加密参数 请求参数是否加密? 查看“载荷”模块可以发现有一个password加密参数和一个__RequestVerificationToken 请求头是否加密? 无…...
Java-数组
什么是数组 数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 在java中, 数组中存放的元素其类型相同数组的空间是连在一起的每个空间有自己的编号,起始位置的编号为0,即数组的下标。 数组的创建及初始化 数…...
Dart 入门Hello world
1、下载Dart sdk IntelliJ & Android Studio | Dart 2、安装Dart 插件 3、安装后重启IDEA,创建Dart项目 4、创建dart文件 5、编写函数: void main() {print("Hello world"); } 6、运行: 官网学习:Dart 语言开发文…...
HTML是什么?
HTML是什么? 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器…...
【UniApp开发小程序】商品详情展示+评论、评论展示、评论点赞+商品收藏【后端基于若依管理系统开发】
文章目录 界面效果界面实现工具js页面日期格式化 后端收藏ControllerServicemapper 评论ControllerServiceMapper 商品Controller 阅读Service 界面效果 【说明】 界面中商品的图片来源于闲鱼,若侵权请联系删除 【商品详情】 【评论】 界面实现 工具js 该工…...
rabbitMq安装后无法启动可视化页面http://localhost:15672处理
本次安装环境信息: 系统:win10 64位专业版 erlang:otp_win64_23.0 rabbitMQ:rabbitmq-server-3.8.5 安装rabbitMQ需要依赖erlang语言环境,所以需要我们下载erlang的环境安装程序。 一、下载安装程序 rabbitMQ安装…...
材料行业可以转IC设计后端吗?
近来有许多材料行业的小伙伴通过后台来问我对于职业规划的看法,甚至有些小伙伴直接点明了某个行业适不适合自己,那么我这边仅以近年来比较热门的数字芯片设计来展开讲讲,材料适不适合转行做IC呢。 对于理工科的同学而言,选择哪个…...
vue3 基础知识
vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…...
【线性代数-3Blue1Brown】- 2 线性组合、张成的空间与基
飞书原文链接:Docs...
Kafka—工作流程、如何保证消息可靠性
什么是kafka? 分布式事件流平台。希望不仅仅是存储数据,还能够数据存储、数据分析、数据集成等功能。消息队列(把数据从一方发给另一方),消息生产好了但是消费方不一定准备好了(读写不一致)&am…...
用户参与策略:商城小程序的搭建与营销
在现今数字化时代,商城小程序已成为企业私域营销的利器。然而,要使商城小程序在竞争激烈的市场中脱颖而出,不仅需要出色的产品,还需要一个引人入胜的用户参与策略。本文将深入探讨如何在商城小程序中构建和落实有效的用户参与策略…...
可自定义实时监控系统HertzBeat
什么是 HertzBeat ? HertzBeat是一个拥有强大自定义监控能力,无需 Agent 的开源实时监控告警系统。集 监控告警通知 为一体,支持对应用服务,数据库,操作系统,中间件,云原生,网络等监…...
无涯教程-Perl - sysread函数
描述 该函数等效于C /操作系统函数read(),因为它绕过了诸如print,read和seek之类的函数所采用的缓冲系统,它仅应与相应的syswrite和sysseek函数一起使用。 它从FILEHANDLE中读取LENGTH个字节,并将输出放入SCALAR中。如果指定了OFFSET,则将数据从OFFSET字节写入SCALAR,从而有效…...
Redis数据结构之String
String 类型是 Redis 的最基本的数据类型,一个 key 对应一个 value,可以理解成与Memcached一模一样的类型。 String 类型是二进制安全的,意思是 Redis 的 String 可以包含任何数据,比如图片或者序列化的对象,一个 Redi…...
React源码解析18(8)------ 实现单节点的Diff算法
摘要 经过之前的几篇文章,我们已经实现了一个可以进行更新渲染的假React。但是如果我们把我们的jsx修改成这样: function App() {const [age, setAge] useState(20)const click function() {setAge(age 1)}return age % 2 0 ? jsx("div"…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
