DAOS低時延與高性能RDMA網絡

什么是RDMA
RDMA(Remote Direct Memory Access)遠程直接內存訪問是一種技術,它使兩臺聯網的計算機能夠在主內存中交換數據,而無需依賴任何一臺計算機的處理器、緩存或操作系統。與基于本地的直接內存訪問 ( DMA ) 一樣,RDMA 提高了吞吐量和性能,因為它可以釋放資源(如cpu),從而加快數據傳輸速率并降低延遲。在大規模并行計算機集群中特別有用,比如分布式存儲,超算中心。

RDMA 通過網絡適配器能夠將數據從線路直接傳輸到應用程序內存或從應用程序內存直接傳輸到線路,支持零拷貝,無需在應用程序內存和操作系統中的數據緩沖區之間復制數據。 不需要 CPU、緩存或上下文切換完,并且數據傳輸與其他系統操作并行,減少了消息傳輸的延遲。

Remote Direct Memory Access遠程直接內存訪問是一種技術,它使兩臺聯網的計算機能夠在主內存中交換數據,而無需依賴任何一臺計算機的處理器、緩存或操作系統。與基于本地的直接內存訪問 ( DMA ) 一樣,RDMA 提高了吞吐量和性能,因為它可以釋放資源(如cpu),從而加快數據傳輸速率并降低延遲。RDMA 可以使網絡和存儲應用程序都受益


概念
Fabric: 支持RDMA的局域網(LAN)
CA(Channel Adapter): 通道適配器, 將系統連接到Fabric的硬件組件, 本質是生產和消費包(packet)
HCA: Host Channel Adapter 主機通道適配器, 支持verbs接口的CA, 作用同上, ib協議對其定義為處理器和I/O單元中能夠產生和消耗數據包的IB設備
Verbs: 訪問RDMA硬件的“一組標準動作”。 每一個Verb可以理解為一個Function
RoCE: RDMA over Converged Ethernet (RoCE) protocol: rdma融合以太網協議
zero-copy networking: 零拷貝網絡
bypass the kernel networking stack: 內核旁路(繞過內核)
high-performance computing (HPC): 高性能計算
Memory Registration(MR) : 內存注冊后, 操作系統不能對數據所在的內存進行頁置換(page out)操作 – 物理地址和虛擬地址的映射必須是固定不變的, 底層調用內核提供的函數pin住內存(防止換頁)
va -> pa
protect
pin: lock page(va<=>pa)
服務類型(隊列對qp類型):連接(可靠RC/不可靠UC), 數據報(可靠RD/不可靠UD)

RDMA術語

優點
Zero-copy零拷貝-應用程序可以在不涉及網絡軟件堆棧的情況下執行數據傳輸,并且數據被直接發送到緩沖區,而無需在網絡層之間復制。
Kernel bypass繞過內核 - 應用程序可以直接從用戶空間執行數據傳輸,而無需執行上下文切換。
CPU Offload 卸載 - 應用程序可以訪問遠程內存而不消耗遠程機器中的任何 CPU。無需遠程進程(或處理器)的任何干預。遠程 CPU 中的緩存也不會被傳輸過程中的內存內容填充。
Message based transactions 基于事務的消息 - 數據作為離散消息而不是作為流處理,這消除了應用程序將流分離為不同消息/事務的需要。
Scatter/gather entries 分散/聚集條目支持 - RDMA 支持本地處理多個分散/聚集條目,即讀取多個內存緩沖區并將它們作為一個流發送或獲取一個流并將其寫入多個內存緩沖區

應用場景
低延遲 - 例如:HPC、金融服務、Web 2.0
高帶寬 - 例如:HPC、醫療設備、存儲和備份系統、云計算
CPU 占用空間小 - 例如:HPC、云計算

當今是云計算、大數據的時代,企業業務持續增長需要存儲系統的 IO 性能也持續增長。傳統的 TCP/IP 技術在數據包處理過程中,要經過操作系統及其他軟件層,數據在系統內存、處理器緩存和網絡控制器緩存之間來回進行復制,給服務器的 CPU 和內存造成了沉重負擔。尤其是網絡帶寬、處理器速度與內存帶寬三者的嚴重"不匹配性",更加劇了網絡延遲效應。為了降低數據中心內部網絡延遲,提高帶寬,RDMA 技術應運而生。RDMA 允許用戶態的應用程序直接讀取和寫入遠程內存,避免了數據拷貝和上下文切換;并將網絡協議棧從軟件實現 offload 到網卡硬件,實現了高吞吐量、超低時延和低 CPU 開銷的效果。

當前 RDMA 在以太網上的傳輸協議是 RoCEv2,RoCEv2 是基于無連接協議的 UDP 協議,相比面向連接的 TCP 協議,UDP 協議更加快速、占用 CPU 資源更少,但其傳輸是不可靠的,一旦出現丟包會導致 RDMA 的傳輸效率降低,這是由 RDMA 的 Go-back-N 重傳機制決定的。RDMA 接收方網卡發現丟包時,會丟棄后續接收到的數據包,發送方需要重發之后的所有數據包,這導致性能大幅下降。所以要想 RDMA 發揮出其性能,需要為其搭建一套不丟包的無損網絡環境。

編程

服務器流程
在 RDMA 連接的服務器端建立了以下事件:

創建事件通道。server_cm_ec = rdma_create_event_channel();
創建連接標識并將其與事件通道關聯。可以將任何數量的連接標識與事件通道關聯。
struct rdma_cm_id* listener; rc = rdma_create_id(server_cm_ec, &listener, NULL, RDMA_PS_TCP);
綁定地址后, 服務器偵聽來自客戶機的連接請求。 rc = rdma_bind_addr(listener, (struct sockaddr *)&srv_addr); rc = rdma_listen(listener, BACKLOG); 啟動rdma服務器運行線程: rc = pthread_create(&tid, NULL, rserver_run, this);
當接收到客戶機連接請求時,將對請求進行應答。請求的事件類型為 RDMA_CM_EVENT_CONNECT_REQUEST。
對于從客戶機接收到的每個請求,將會執行以下步驟:
5.1 服務器獲取客戶機連接標識。
5.2 在建立服務器和客戶機之間的連接之前分配必要的 RDMA 結構。需要以下步驟來創建 RDMA 結構:
獲取設備的上下文,該上下文可用于查詢設備、端口或全局唯一標識 (GUID)。
分配保護域PD。
為發布完成事件創建完成通道。
創建完成隊列。
針對完成隊列通知發出工作請求。
創建隊列對。
為數據傳輸分配并注冊直接字節緩沖區。
5.3 (可選)可以啟動完成隊列處理線程。有關發生的事件的更多信息,請參閱完成隊列處理。
5.4 當 RDMA 結構就緒時,服務器會發布接收工作請求。
5.5 接受(accept)工作請求后,會向客戶機發送事件以確認連接已建立并準備就緒以接收 RDMA 發送或接收請求。事件類型為 RDMA_CM_EVENT_ESTABLISHED。
5.6 發布發送或接收請求,該請求會在服務器和客戶機系統之間啟動數據傳輸。
5.7 當工作請求完成時,斷開連接。服務器會生成事件類型 RDMA_CM_EVENT_DISCONNECTED。
按照以下順序移除為數據傳輸創建的 RDMA 結構:
清除并注銷緩沖區。
移除完成隊列。
移除完成通道。
移除隊列對。
要斷開服務器與客戶機系統的連接以阻止進一步的 RDMA 操作,請移除連接標識。
移除事件通道。在接收到所有應答之前,無法移除事件通道。


客戶機流程
在 RDMA 連接的客戶端發生了以下事件:
8. 創建事件通道。struct rdma_event_channel* cm_ec; client_cm_context.cm_ec = rdma_create_event_channel();
9. 創建連接標識并將其與事件通道關聯。可以將任何數量的連接標識與事件通道關聯。 struct rdma_cm_id rdma_id; rdma_create_id(client_cm_context.cm_ec, &rdma_id, NULL, RDMA_PS_TCP)
10. 客戶機使用 ConnectionID.ResolveAddress() 方法查詢服務器系統的地址。當接收到事件類型 RDMA_CM_EVENT_ADDRESS_RESOLVED 時,客戶機發送應答。rdma_resolve_addr(rdma_id, NULL, (struct sockaddr)addr, RDMA_RESOLVE_ADDR_TIMEOUT_MS) case RDMA_CM_EVENT_ADDR_RESOLVED: 執行回調rc = on_addr_resolved(&evt_cpy); -> rdma_resolve_route(evt->id, RDMA_RESOLVE_ROUTE_TIMEOUT_MS)
11. 客戶機使用 ConnectionID.ResolveRoute() 方法查詢服務器系統的路由。當接收到事件類型 RDMA_CM_EVENT_ROUTE_RESOLVED 時,客戶機發送應答。收到事件: case RDMA_CM_EVENT_ROUTE_RESOLVED: -> rc = on_client_route_resolved(&evt_cpy);
12. 在建立客戶機和服務器之間的連接之前分配必要的 RDMA 結構。需要以下步驟來創建 RDMA 結構:
獲取設備的上下文,該上下文可用于查詢設備、端口或全局唯一標識 (GUID)。struct rdma_cm_id id = evt->id; struct rdma_device_context dev_ctx = get_dev_context(evt->id->verbs, rdma_name);
分配保護域。struct rdma_connection_priv priv_data;
為發布完成事件創建完成通道。struct ibv_qp_init_attr qp_attr;
創建完成隊列。poller_ctx->cq = ibv_create_cq(rdma_ctx, 8192, NULL, poller_ctx->comp_ec, 0)
針對完成隊列通知發出工作請求。rc = ibv_req_notify_cq(poller_ctx->cq, 0);
創建隊列對。 rdma_create_qp(evt->id, dev_ctx->pd, &qp_attr)
為數據傳輸分配并注冊直接字節緩沖區。
發送對列: qp_attr.send_cq = dev_ctx->poller_ctx[conn->rdma_poller_index].cq;
接收隊列: qp_attr.recv_cq = dev_ctx->poller_ctx[conn->rdma_poller_index].cq;
6.(可選)可以啟動完成隊列處理線程。有關發生的事件的更多信息,請參閱完成隊列處理。
13. 向服務器發出發布接收請求。
14. 向服務器發出連接請求。這會生成事件類型 RDMA_CM_CONNECT_REQUEST 并將其發送到服務器。rdma_connect(evt->id, &cm_params)
15. 客戶機等待直至從服務器接收到事件類型 RDMA_CM_EVENT_ESTABLISHED。此事件指示已建立連接且可以進行數據傳輸。
16. 發布發送或接收工作請求,該請求會在服務器和客戶機系統之間啟動數據傳輸。
17. 當工作請求完成時,斷開連接。客戶機會生成事件類型 RDMA_CM_EVENT_DISCONNECTED。
18. 按照以下順序移除為數據傳輸創建的 RDMA 結構:
清除并注銷緩沖區。
移除完成隊列。
移除完成通道。
移除隊列對。
19. 要斷開客戶機與服務器的連接以阻止進一步的 RDMA 操作,請移除連接標識。
20. 移除事件通道。

完成隊列處理
下圖擴展在選擇處理完成隊列時所需的編程步驟。此過程在第一張圖中顯示為以“完成隊列處理”標示的單個步驟,該步驟使用編號 3 進行標記。
圖中顯示了以下步驟:
21. 客戶機或服務器使用 getCQEvent() 和 pollCQEvent() 方法來從觸發處理的事件隊列通道檢索類型為 RDMA_CM_EVENT ESTABLISHED 的事件。
22. 處理工作完成。
23. 向完成隊列發送應答以確認工作完成。
24. 針對完成隊列通知發出請求以確保完成隊列接收到應答。

DAOS與RDMA

Libfabric與RDMA

操作

OFI與Mercury(水銀HG)

Mercury 是 Mochi(麻糬)微服務生態系統的核心組件,是 R&D 100 獲獎項目,對libfabric封裝,提供網絡抽象NA,點對點RPC(對應RDMA的send/recv),大塊Bulk數據傳輸(如將RDMA的write/read封裝為put/get), 提供了靈活的RPC注冊, 回調, RPC飛行隊列/等待隊列擁塞控制, 單個RPC超時時間設置和跟蹤,重試機制, 存儲池等,充分利用底層網絡性能

CaRT(集體和 RPC 傳輸)與Mercury

CaRT 是用于大數據和 百億級 HPC 的開源 RPC 傳輸層。它支持傳統的 P2P RPC 和集體 RPC,后者通過可擴展的基于樹的消息傳播在一組目標服務器上調用 RPC。Cart將Mercury封裝,對應用程序提供初始化上下文,創建請求,發送請求,請求回調等數據通道接口,典型的上層應用如心跳swim,rank管理, 持久內存和Nvme讀寫io。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165516.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ Qt屬性Property使用介紹

文章目錄 C++ 普通類使用Qt屬性Qt窗口類使用屬性自定義控件使用屬性在 Qt 中,屬性(Property)系統提供了一種機制來定義對象的屬性。這些屬性可以在運行時動態地查詢和修改,而且可以通過設計師工具進行可視化編輯。Qt 屬性系統還支持屬性綁定、動畫和其他高級特性。 屬性在…

DFS連通塊問題

DFS連通塊問題 只要是位置的上下左右都有 ‘1’ 的就是同一塊連通塊 一般題目類型有&#xff1a; 連通塊中數量最多的連通塊聯通塊的數量 110010000011111110101001001001101010111011011011101001111110 010000000001010001101100000010010110001111100010101100011110 00…

5-linux-用戶操作、su和sudo、普通權限、特殊權限、解壓壓縮、軟件管理(rpm和yum)、源碼安裝nginx、系統服務、進程管理

1 用戶操作 2 su和sudo 3 普通權限 4 特殊權限 5 解壓壓縮 6 軟件管理&#xff0c;rpm和yum 6.1 rpm 6.2 yum 7 源碼安裝nginx 8 系統服務 9 進程管理 1 用戶操作 ####創建用戶####1 創建sa和sutdents組 groupadd sa groupadd students # 2 用戶可以屬于多個組&#xff0c;只…

03-詳細介紹Stream及其常用API

Stream API Stream API(java.util.stream)把真正的函數式編程風格引入到Java中,可以極大地提高程序員生產力&#xff0c;讓程序員寫出高效、簡潔的代碼 實際開發中項目中多數數據源都是來自MySQL、Oracle等關系型數據庫,還有部分來自MongDB、Redis等非關系型數據庫 從關系型…

1.測試基礎

目錄 一、測試基礎 1.軟件測試中基礎信息定義 2.測試主流技能 3.常見的測試分類 3.1按階段劃分 3.2按代碼可見度劃分 3.3其他 4.測試模型 5.測試流程 6.測試用例 二、用例設計方法 2.1等價類 2.2 邊界值 2.3判定表法 2.4場景法 2.5錯誤推測法 三、缺陷管理 1…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《交直流配電網中柔性軟開關接入的規劃-運行協同優化方法》

這個標題涉及到交直流配電網中柔性軟開關接入的規劃-運行協同優化方法。下面是對這個標題各部分的詳細解讀&#xff1a; 交直流配電網&#xff1a; 這指的是一個電力系統&#xff0c;同時包含交流和直流電力傳輸的元素。這樣的系統可能結合了傳統的交流電力傳輸和近年來興起的直…

python中一個文件(A.py)怎么調用另一個文件(B.py)中定義的類AA詳解和示例

本文主要講解python文件中怎么調用另外一個py文件中定義的類&#xff0c;將通過代碼和示例解讀&#xff0c;幫助大家理解和使用。 目錄 代碼B.pyA.py 調用過程 代碼 B.py 如在文件B.py,定義了類別Bottleneck&#xff0c;其包含卷積層、正則化和激活函數層&#xff0c;主要對…

WordPress用sql命令批量刪除所有文章

有時我們需要將一個網站搬遷到另一個服務器。我們只想保留網站的模板樣式&#xff0c;而不需要文章內容。一般情況下我們可以在后臺刪除已發表的文章&#xff0c;但如果有很多文章&#xff0c;我們則需要一次刪除所有文章。 WordPress如何批量刪除所有文章 進入網站空間后臺&a…

常見樹種(貴州省):013桉樹、米櫧、栲類

摘要&#xff1a;本專欄樹種介紹圖片來源于PPBC中國植物圖像庫&#xff08;下附網址&#xff09;&#xff0c;本文整理僅做交流學習使用&#xff0c;同時便于查找&#xff0c;如有侵權請聯系刪除。 圖片網址&#xff1a;PPBC中國植物圖像庫——最大的植物分類圖片庫 一、桉樹 …

Java中的字符串String

目錄 一、常用方法 1、字符串構造 2、String對象的比較 &#xff08;1&#xff09;、equals方法 &#xff08;2&#xff09;、compareTo方法 &#xff08;3&#xff09;、compareToIgnoreCase方法&#xff08;忽略大小寫進行比較&#xff09; 3、字符串查找 4、轉化 &…

4.3 實時陰影

一、基于圖像的陰影技術&#xff08;Shadow Map&#xff09; 什么是陰影 當來自光源的至少一個點在空間中被遮擋時&#xff0c;就產生了陰影區域。 陰影的前提 直接光照不透明物體 陰影的實現方式 陰影體&#xff08;Shadow Volumes&#xff09;——空間中黑暗部分的幾何…

Springboot集成swagger之knife4j

knife4j的最終效果&#xff1a; 支持直觀的入參介紹、在線調試及離線各種API文檔下載。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…

python 3.7安裝并配置 pytorch(torch 1.8.2 + cuda 11.1 + torchaudio 0.8.2 + torchvision 0.9.2)

文章目錄 前言一、安裝 python二、安裝 cuda cudnn二、安裝 pytorch2.1 版本匹配2.1.1 方法一2.1.2 方法二2.2 安裝 .tar.bz2 三、驗證是否安裝成功總結 前言 本篇文章主要介紹在Windows下 python 3.7 配置 pytorch&#xff0c;幫助需要的朋友避坑 安裝 pytorch 需要多個版本適…

內建組件和模塊

討論 Vue.js 中幾個非常重要的內建組件和模塊&#xff0c;例如 KeepAlive 組件、Teleport 組件、Transition 組件等&#xff0c;它們都需要渲染器級別的底層支持。另外&#xff0c;這些內建組件所帶來的能力&#xff0c;對開發者而言非常重要且實用&#xff0c;理解它們的工作原…

Word中如何實現 圖片 | 表格 自動編號與文中引用編號對應

當我們在進行大篇幅word文檔的編寫時&#xff0c;為了節約修改文章中圖片或表格所花費的大量時間&#xff0c;可以將圖片自動編號&#xff0c;且讓文中引用的順序跟著圖片順序的變化而變化&#xff0c;具體操作如下&#xff1a; 1. 將鼠標定位在圖片或者表格欲加編號的下方或上…

Banana Pi [BPi-R3-Mini] 回顧和主線 ImmortalWrt 固件支持

BananaPi BPi-R3 Mini 采用 MediaTek 830&#xff08;4 個 A53&#xff0c;最高 2.0 GHz&#xff09;&#xff0c;具有 2 個 2.5 GbE、AX4200 2.4G/5G 無線和 USB 2.0 端口。它還具有兩個 M.2 連接器&#xff0c;可用于 NVMe SSD 和 5G 模塊&#xff08;板上包含 Nano SIM 插槽…

ELK企業級日志分析平臺——kibana數據可視化

部署 新建虛擬機server5&#xff0c;部署kibana [rootelk5 ~]# rpm -ivh kibana-7.6.1-x86_64.rpm [rootelk5 ~]# cd /etc/kibana/[rootelk5 kibana]# vim kibana.ymlserver.host: "0.0.0.0"elasticsearch.hosts: ["http://192.168.56.11:9200"]i18n.local…

微服務學習(十二):安裝Minio

微服務學習&#xff08;十二&#xff09;&#xff1a;安裝Minio 一、簡介 MinIO 是一款基于Go語言發開的高性能、分布式的對象存儲系統。客戶端支持Java,Net,Python,Javacript, Golang語言。MinIO系統&#xff0c;非常適合于存儲大容量非結構化的數據&#xff0c;例如圖片、視…

2023亞太杯數學建模C題:我國新能源電動汽車的發展趨勢,思路模型代碼

問題C 我國新能源電動汽車的發展趨勢 賽題思路&#xff1a;獲取思路見文末名片&#xff0c;第一時間更新 新能源汽車是指以先進技術原理、新技術、新結構的非常規汽車燃料為動力來源( 非常規汽車燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;將先進技術進行汽車動力控制…

Qt 軟件開發框架(主要部分)

目錄 1、 一個軟件基本要素 &#xff08;1&#xff09;UI模塊 &#xff08;2&#xff09;網絡模塊 &#xff08;3&#xff09;業務邏輯模塊 &#xff08;4&#xff09;中間層 &#xff08;5&#xff09;獨立模塊&#xff08;守護進程、更新模塊、日志收集模塊…&#xff…