1. Introduce
Accelio是一個高性能異步的可靠消息傳遞和RPC庫,能優(yōu)化硬件加速。 RDMA和TCP / IP傳輸被實(shí)現(xiàn),并且其他的傳輸也能被實(shí)現(xiàn),如共享存儲器可以利用這個高效和方便的API的優(yōu)點(diǎn)。Accelio 是 Mellanox 公司的RDMA中間件,用于高性能異步的可靠消息傳遞和RPC庫。
2. Accelio 設(shè)計(jì)目標(biāo)
Accelio提供了一個易于使用的,可靠的,可擴(kuò)展和高性能的數(shù)據(jù)/消息傳遞中間件,最大限度地提高現(xiàn)代CPU和網(wǎng)卡硬件的效率,減少將新的擴(kuò)展應(yīng)用程序產(chǎn)品推向市場的的時間。
3. Accelio Key Features
- 專注于高性能異步的API
- 可靠的消息傳遞(端對端)
- 請求/響應(yīng)(交易)或發(fā)送/接收模式
- 提供連接和資源抽象到最大的可擴(kuò)展性和可用性
- 最大限度地發(fā)揮每個線程專用的硬件資源,多線程應(yīng)用程序的性能
- 旨在最大限度地利用RDMA,硬件卸載和多核CPU的優(yōu)勢
- 支持多種傳輸選項(xiàng)(RDMA,TCP,..)
- 服務(wù)和存儲集群/向外擴(kuò)展的原生支持
- 小消息合并
- 簡單和抽象的API
4. Who can take advantage of it?
對那些高效的,高性能的,可靠消息傳遞實(shí)現(xiàn)的應(yīng)用,如集群,橫向擴(kuò)展塊/文件/對象存儲,BigData和NoSQL應(yīng)用程序,快速消息總線等,感興趣的開發(fā)商可以使用。
5. Accelio 的結(jié)構(gòu)示意圖
?
Accelio的主層分別是:
?應(yīng)用程序接口?- 提供易于使用的原語進(jìn)行快速,可靠的異步消息隊(duì)列或RPC
?連接和會話管理?- 提供可靠的終端到終端的連接等端點(diǎn),動態(tài)連接建立,池,故障恢復(fù)和遷移/重定向
?可插拔傳輸層?- 使映射到不同的硬件或軟件傳輸實(shí)現(xiàn)
6. Accelio Integration With Other Applications/Projects
Accelio被用作高性能,低延遲,可靠消息/ RPC庫的各種開源和商業(yè)產(chǎn)品,客戶項(xiàng)目
支持多種綁定(Kernel C, User Space C/C++, Java, Python (future))。
7. 一個會話/連接建立流程
在建立連接到遠(yuǎn)程端點(diǎn),客戶指定遠(yuǎn)程統(tǒng)一資源標(biāo)識符(URI)。URI包含首選傳輸方式,強(qiáng)制領(lǐng)先的IP地址和可選端口數(shù)目,以及可選的資源ID或名稱。
/服務(wù)器端響應(yīng)會話請求,下列選項(xiàng)之一:
?接受可選屬性的連接
?拒絕連接
?無縫地將連接重定向到一個不同的進(jìn)程或?qū)嶓w
/成功或重定向響應(yīng),客戶端建立一個或多個并聯(lián)連接到對端,將試圖重用現(xiàn)有的連接,以減少開銷。
/*會話和連接初始化流程
(1)打開一個會話到遠(yuǎn)程資源
--例如“remote-ip:port/resource-name”
(2)服務(wù)器端回應(yīng),接受,拒絕或重定向
--用“重定向”負(fù)載平衡或遷移資源穿過整個集群(多個節(jié)點(diǎn)或進(jìn)程)
--服務(wù)器提供一個portals列表(IPs+Ports)
--每個portal識別port(IP),然后CPU/Thread去訪問
--服務(wù)器基于round/robin,Hash或者custom logic,可以加載平衡通信通過多個ports/cores
--建立連接(S)和發(fā)送/接收郵消息
--可以有多個連接(例如每個客戶端線程1個)
--如果連接已經(jīng)提供給遠(yuǎn)程進(jìn)程,可重用
--故障/變化上的重建或遷移連接
8. 高級別傳輸流程 - 異步請求/響應(yīng)模型(Transaction Delivery API Model)
Accelio提供一個RPC-like的請求/回應(yīng)事務(wù)模式,或可靠消息發(fā)送/接收模式。
在事務(wù)模式中,發(fā)起方發(fā)送一個請求,它包含專用應(yīng)用程序的頭和指向輸入與輸出數(shù)據(jù)緩沖區(qū)的指針,允許零拷貝操作和RDMA。
當(dāng)請求到達(dá)接收端時,它觸發(fā)一個回調(diào)通知,基于該接收的應(yīng)用程序處理該事務(wù)。當(dāng)在接收端完成該處理時,它以返回的狀態(tài)和數(shù)據(jù)來發(fā)送響應(yīng)。服務(wù)器端可以異步操作,并發(fā)出響應(yīng)在其方便的時候,也就是,當(dāng)所返回的數(shù)據(jù)是可用的。
發(fā)起方可以請求消息到達(dá)確認(rèn)。在這樣的情況下,接收方接受該消息之后,一個確認(rèn)消息返回到發(fā)起方。該確認(rèn)消息可用于阻擋/同步操作和消息跟蹤。
響應(yīng)到達(dá)時,發(fā)起方被通知。在這個時候,發(fā)起方的數(shù)據(jù)緩沖區(qū)包含返回的數(shù)據(jù),并且回叫應(yīng)答指向原始請求。
如果傳輸失敗,同樣的傳輸被重新傳輸?shù)揭鸦謴?fù)或備用的連接上。
發(fā)起方可以要求中止/取消某范圍內(nèi)的消息(例如,請求超時)。接收方試圖中止操作(如果不執(zhí)行他們),并以成功或失敗來反應(yīng)。無論哪種方式,相關(guān)的響應(yīng)不返回到發(fā)起方。注意,請求可以通過客戶端(無源)或服務(wù)器(有源)端發(fā)出。
發(fā)送/接收操作遵循相似的流程去請求/響應(yīng),唯獨(dú)沒有響應(yīng)消息。消息從發(fā)起方發(fā)送,引發(fā)回調(diào)到接收端,使用可選的確認(rèn)通知。
9. 本地多線程(多進(jìn)程)支持
對于客戶端和服務(wù)器端,Accelio支持全并行和多線程操作
--應(yīng)用程序使用單個CPU核心/線程的時候的性能可以被限制
--當(dāng)多個線程在使用同一個網(wǎng)絡(luò)資源,需要復(fù)雜的狀態(tài)管理和鎖定,這樣會增加應(yīng)用程序的開銷,并限制其性能和可伸縮性
--Accelio支持全并行為客戶端和服務(wù)器
**每個線程可以被相關(guān)聯(lián)有獨(dú)立的硬件資源(QP的&個CQ)和事件循環(huán),從而無需鎖定,并允許最大的并行
**每個會話可以由多個并聯(lián)連接(每個關(guān)聯(lián)使用不同的CPU線程)組成
**服務(wù)器端可以公開多個portal(IP:port)為相同的資源/服務(wù),每個port可以由不同的CPU線程和事件循環(huán)提供服務(wù)。
如下圖所示可以直觀Accelio的多線程支持
10. 內(nèi)存管理
--Accelio管理2種類型緩沖區(qū)
**發(fā)送/接收緩沖環(huán)的頭和小數(shù)據(jù)(通常4-8KB每個)
**大的緩沖區(qū)為大型的IOs和RDMA
--大緩沖區(qū)被應(yīng)用程序的庫來分配和控制
--應(yīng)用控制緩沖區(qū):
**需要預(yù)注冊內(nèi)存緩沖區(qū)(使用reg_mr),并保證零拷貝
--庫控制緩沖區(qū)
**可能會在客戶端上有一個copy
**接收端零拷貝(應(yīng)用程序?qū)⒌玫揭粋€指向接收緩沖區(qū))
**當(dāng)做完時,請求應(yīng)用程序來釋放緩沖區(qū)(用release_msg)
11. Accelio中的一些主要函數(shù)調(diào)用
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. 異步事件處理
高性能的應(yīng)用程序使用異步API來進(jìn)行多個操作,并利用多種資源并行。
?Accelio以下面的方式處理異步事件:
1,放置一個回調(diào)在事件循環(huán),該事件循環(huán)結(jié)合來自多個資源的事件。
2,當(dāng)一個事件,發(fā)出的一組操作,諸如從網(wǎng)絡(luò)接收的消息和寫入到磁盤。
?Accelio內(nèi)置了epoll的支持。應(yīng)用程序提供的事件循環(huán)是可用的。
?對于最低的消息延遲,Accelio提供了優(yōu)化事件處理,當(dāng)一個事件循環(huán)處于空閑狀態(tài)(一個預(yù)定義的時間)時,其會結(jié)合忙等待池。
13. Accelio概述與總結(jié)
Accelio是一個開源的高性能,異步,可靠消息傳遞和遠(yuǎn)程過程調(diào)用(RPC)的庫。對于遠(yuǎn)程直接內(nèi)存訪問(RDMA),TCP / IP和共享內(nèi)存, Accelio優(yōu)化硬件加速。 Accelio最大化消息和CPU并行性,同時最大限度地降低CPU的爭用和鎖定。并行和異步體系結(jié)構(gòu),無鎖定設(shè)計(jì)和零數(shù)據(jù)復(fù)制機(jī)制,提供每秒無與倫比的傳輸和帶寬性能,以及更低的延遲和CPU開銷。 Accelio保證終端到終端的事務(wù)傳遞和執(zhí)行力,它支持事務(wù)請求 - 應(yīng)答的通信模型。
Accelio通過提供內(nèi)置的多路徑,實(shí)時會話重定向/遷移和集群服務(wù)或存儲,解決了擴(kuò)展性和虛擬化環(huán)境的挑戰(zhàn)。管理作為一種模塊化的開源項(xiàng)目,Accelio無縫地延伸到新的功能,實(shí)現(xiàn)傳輸和服務(wù)。
libxio(又名庫accelio)是一個位于RDMA之上的輕量級消息傳遞庫。該庫為零拷貝消息傳遞和無鎖定可擴(kuò)展性,提供了異步消息傳遞設(shè)計(jì)。
Accelio是一種創(chuàng)新的API,它解決了一些現(xiàn)代計(jì)算機(jī),網(wǎng)絡(luò)和存儲系統(tǒng)主要挑戰(zhàn),如:
?有效地利用多內(nèi)核
?強(qiáng)大的橫向擴(kuò)展
?降低硬件和軟件堆棧開銷
?減少通信開銷和延遲
Accelio提供了一個強(qiáng)大的,靈活的通信和消息傳遞層,從而使得應(yīng)用程序擴(kuò)展和中間件快速發(fā)展。它能夠整合性能,可用性,管理和安全功能于一體的實(shí)現(xiàn),可用于多種應(yīng)用。工作促進(jìn)了Accelio開源社區(qū),供應(yīng)商可以專注于自己的應(yīng)用程序的核心附加價值,與開發(fā)者在一個更大的社區(qū)分享他們的實(shí)現(xiàn)和體驗(yàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-657010.html
這個庫已經(jīng)停止開發(fā)了,在github主頁的issue 部分開發(fā)者說由于公司中心轉(zhuǎn)移,這個庫不開發(fā)了,建議用別的庫。文章來源地址http://www.zghlxwxcb.cn/news/detail-657010.html
到了這里,關(guān)于[RDMA] 高性能異步的消息傳遞和RPC :Accelio的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!