新四季網

rdma的基本元素(3.RDMA基本元素)

2023-04-16 09:15:18 2

本文轉自知乎Savir的專欄

RDMA技術中經常使用縮略語,很容易讓剛接觸的人一頭霧水,本篇的目的是講解RDMA中最基本的元素及其含義。

我將常見的縮略語對照表寫在前面,閱讀的時候如果忘記了可以翻到前面查閱。

WQ

Work Queue簡稱WQ,是RDMA技術中最重要的概念之一。WQ是一個儲存工作請求的隊列,為了講清楚WQ是什麼,我們先介紹這個隊列中的元素WQE(Work Queue Element,工作隊列元素)。

WQE

WQE可以認為是一種「任務說明」,這個工作請求是軟體下發給硬體的,這份說明中包含了軟體所希望硬體去做的任務以及有關這個任務的詳細信息。比如,某一份任務是這樣的:「我想把位於地址0x12345678的長度為10位元組的數據發送給對面的節點」,硬體接到任務之後,就會通過DMA去內存中取數據,組裝數據包,然後發送。

WQE的含義應該比較明確了,那麼我們最開始提到的WQ是什麼呢?它就是用來存放「任務書」的「文件夾」,WQ裡面可以容納很多WQE。有數據結構基礎的讀者應該都了解,隊列是一種先進先出的數據結構,在計算機系統中非常常見,我們可以用下圖表示上文中描述的WQ和WQE的關係:

WQ這個隊列總是由軟體向其中增加WQE(入隊),硬體從中取出WQE,這就是軟體給硬體「下發任務」的過程。為什麼用隊列而不是棧?因為進行「存」和「取「操作的分別是軟體和硬體,並且需要保證用戶的請求按照順序被處理在RDMA技術中,所有的通信請求都要按照上圖這種方式告知硬體,這種方式常被稱為「Post」。

QP

Queue Pair簡稱QP,就是「一對」WQ的意思。

SQ和RQ

任何通信過程都要有收發兩端,QP就是一個發送工作隊列和一個接受工作隊列的組合,這兩個隊列分別稱為SQ(Send Queue)和RQ(Receive Queue)。我們再把上面的圖豐富一下,左邊是發送端,右邊是接收端:

WQ怎麼不見了?SQ和RQ都是WQ,WQ只是表示一種可以存儲WQE的單元,SQ和RQ才是實例。

SQ專門用來存放發送任務,RQ專門用來存放接收任務。在一次SEND-RECV流程中,發送端需要把表示一次發送任務的WQE放到SQ裡面。同樣的,接收端軟體需要給硬體下發一個表示接收任務的WQE,這樣硬體才知道收到數據之後放到內存中的哪個位置。上文我們提到的Post操作,對於SQ來說稱為Post Send,對於RQ來說稱為Post Receive。

需要注意的是,在RDMA技術中通信的基本單元是QP,而不是節點。如下圖所示,對於每個節點來說,每個進程都可以使用若干個QP,而每個本地QP可以「關聯」一個遠端的QP。我們用「節點A給節點B發送數據」並不足以完整的描述一次RDMA通信,而應該是類似於「節點A上的QP3給節點C上的QP4發送數據」。

每個節點的每個QP都有一個唯一的編號,稱為QPN(Query Pair Number),通過QPN可以唯一確定一個節點上的QP。

SRQ

Shared Receive Queue簡稱SRQ,意為共享接收隊列。概念很好理解,就是一種幾個QP共享同一個RQ時,我們稱其為SRQ。以後我們會了解到,使用RQ的情況要遠遠小於使用SQ,而每個隊列都是要消耗內存資源的。當我們需要使用大量的QP時,可以通過SRQ來節省內存。如下圖所示,QP2~QP4一起使用同一個RQ:

CQ

Completion Queue簡稱CQ,意為完成隊列。跟WQ一樣,我們先介紹CQ這個隊列當中的元素——CQE(Completion Queue Element)。可以認為CQE跟WQE是相反的概念,如果WQE是軟體下發給硬體的「任務書」的話,那麼CQE就是硬體完成任務之後返回給軟體的「任務報告」。CQE中描述了某個任務是被正確無誤的執行,還是遇到了錯誤,如果遇到了錯誤,那麼錯誤的原因是什麼。

而CQ就是承載CQE的容器——一個先進先出的隊列。我們把表示WQ和WQE關係的圖倒過來畫,就得到了CQ和CQE的關係:

每個CQE都包含某個WQE的完成信息,他們的關係如下圖所示:

下面我們把CQ和WQ(QP)放在一起,看一下一次SEND-RECV操作中,軟硬體的互動(圖中序號順序不表示實際時序):

接收端APP以WQE的形式下發一次接收任務。

接收端硬體從RQ中拿到任務書,準備接收數據。發送端APP以WQE的形式下發一次SEND任務。發送端硬體從SQ中拿到任務書,從內存中拿到待發送數據,組裝數據包。發送端網卡將數據包通過物理鏈路發送給接收端網卡。接收端收到數據,進行校驗後回復ACK報文給發送端。接收端硬體將數據放到WQE中指定的位置,然後生成「任務報告」CQE,放置到CQ中。接收端APP取得任務完成信息。發送端網卡收到ACK後,生成CQE,放置到CQ中。接收端APP取得任務完成信息。

至此,通過WQ和CQ這兩種媒介,兩端軟硬體共同完成了一次收發過程。

WR和WC

說完了幾個Queue之後,其實還有兩個文章開頭提到的概念沒有解釋,那就是WR和WC(不是Water Closet的縮寫)。

WR全稱為Work Request,意為工作請求;WC全稱Work Completion,意為工作完成。這兩者其實是WQE和CQE在用戶層的「映射」。因為APP是通過調用協議棧接口來完成RDMA通信的,WQE和CQE本身並不對用戶可見,是驅動中的概念。用戶真正通過API下發的是WR,收到的是WC。

WR/WC和WQE/CQE是相同的概念在不同層次的實體,他們都是「任務書」和「任務報告」。於是我們把前文的兩個圖又加了點內容:

總結

好了,我們用IB協議[1]3.2.1中的Figure 11這張圖總結一下本篇文章的內容:

用戶態的WR,由驅動轉化成了WQE填寫到了WQ中,WQ可以是負責發送的SQ,也可以是負責接收的RQ。硬體會從各個WQ中取出WQE,並根據WQE中的要求完成發送或者接收任務。任務完成後,會給這個任務生成一個CQE填寫到CQ中。驅動會從CQ中取出CQE,並轉換成WC返回給用戶。

基礎概念就介紹到這裡,下一篇將介紹RDMA的幾種常見操作類型。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了