Ⅰ 計算機網路之RDMA技術(十)內存機制
姓名:周肇星;學號:22011110028;學院:通信工程學院
【嵌牛導讀】RDMA技術全稱遠程直接數據存取,就是為了解決網路傳輸中伺服器端數據處理的延遲而產生的。RDMA通過網路把資料直接傳入計算機的存儲區,將數據從一個系統快速移動到遠程系統存儲器中,而不對操作系統造成任何影響,這樣就不需要用到多少計算機的處理功能。它消除了外部存儲器復制和上下文切換的開銷,因而能解放內存帶寬和CPU周期用於改進應用系統性能。本專題將針對RDMA技術進行介紹!
【嵌牛鼻子】計算機網路,高性能網路,RDMA
【嵌牛提問】讀完本文,對RDMA技術的SRQ有所認識了嗎?
【嵌牛正文】
InfiniBand specification R1.3, Chapter3, 3.4.2, Page 104【通道適配器提供MTP機制及其功能】
InfiniBand specification R1.3, Chapter3, 3.5.3, Page 112【概述L_Key & R_Key】
InfiniBand specification R1.3, Chapter3, 3.5.4, Page 113【概述虛擬內存地址 & L_Key & R_Key】
InfiniBand specification R1.3, Chapter3, 3.6.1, Page 127【實現遠程訪問內存的兩種機制】
用戶可使用兩種機制來實現遠程訪問內存(RDMA):
任何一種方法均會產生R_Key,用戶可將R_Key和數據緩沖區的虛擬地址提供給遠程節點,只有遠端節點發來的RDMA請求中具有正確的R_Key才能訪問特定的內存區域
註:QP、內存區域、內存窗口必須位於相同的保護域中
MR全稱為Memory Region,可譯為內存區域,指的是由RDMA軟體層在內存中規劃出的一片區域,用於存放收發的數據。IB協議中,用戶在申請完用於存放數據的內存區域之後,都需要通過調用IB框架提供的API注冊MR,才能讓RDMA網卡訪問這片內存區域
Memory Region,它是一片由用戶注冊的特殊的內存區域:一方面其中的內容不會被換頁到硬碟中,另一方面RDMA網卡中記錄了它的地址轉換關系,使得硬體拿到用戶指定在WR中的虛擬地址之後找到對應的物理地址
通道適配器提供了一種內存轉換和保護(Memory Translation & Protection,MTP)機制,它將虛擬地址轉換為物理地址,並驗證訪問許可權。因此IBA應用程序無需對任何操作使用物理定址
注冊MR的過程中,硬體會在內存中創建並填寫一個VA to PA的映射表,這樣需要的時候就能通過查表把VA轉換成PA了
現在假設左邊的節點向右邊的節點發起了RDMA WRITE操作,即直接向右節點的內存區域中寫入數據。假設圖中兩端都已經完成了注冊MR的動作,MR即對應圖中的「數據Buffer」,同時也創建好了VA->PA的映射表。
對於右側節點來說,無論是地址轉換還是寫入內存,完全不用其CPU的參與
因為HCA訪問的內存地址來自於用戶,如果用戶傳入了一個非法的地址(比如系統內存或者其他進程使用的內存),HCA對其進行讀寫可能造成信息泄露或者內存覆蓋。所以我們需要一種機制來確保HCA只能訪問已被授權的、安全的內存地址。IB協議中,APP在為數據交互做准備的階段,需要執行注冊MR的動作
而用戶注冊MR的動作會產生兩把鑰匙:L_KEY(Local Key)和R_KEY(Remote Key),鑰匙的實體其實就是一串序列而已。它們將分別用於保障對於本端和遠端內存區域的訪問許可權
因為物理內存是有限的,所以操作系統通過換頁機制來暫時把某個進程不用的內存內容保存到硬碟中。當該進程需要使用時,再通過缺頁中斷把硬碟中的內容搬移回內存,這一過程幾乎必然導致VA-PA的映射關系發生改變
由於HCA經常會繞過CPU對用戶提供的VA所指向的物理內存區域進行讀寫,如果前後的VA-PA映射關系發生改變,那麼我們在前文提到的VA->PA映射表將失去意義,HCA將無法找到正確的物理地址
為了防止換頁所導致的VA-PA映射關系發生改變,注冊MR時會"Pin"住這塊內存(亦稱「鎖頁」),即鎖定VA-PA的映射關系。也就是說,MR這塊內存區域會長期存在於物理內存中不被換頁,直到完成通信之後,用戶主動注銷這片MR
Memory Window簡稱MW,中文為內存窗口。是一種由用戶申請的,用於讓遠端節點訪問本端內存區域的RDMA資源。每個MW都會綁定(稱為bind)在一個已經注冊的MR上,但是它相比於MR可以提供更靈活的許可權控制。MW可以粗略理解為是MR的子集,一個MR上可以劃分出很多MW,每個MW都可以設置自己的許可權
用戶注冊MR的過程,需要從用戶態陷入內核態,調用內核提供的函數pin住內存(防止換頁),然後製作虛擬-物理地址映射表並下發給硬體
因為MR是由內核管理的,如果用戶想修改一個已經存在的MR的信息,比如我想收回某個MR的遠端寫許可權,只保留遠端讀許可權;或者想要使一個之前已經授權給遠端節點的R_Key失效,那麼用戶需要通過重注冊MR(Reregister MR)介面來進行修改,該介面等價於先取消注冊MR(Deregister MR),然後注冊MR(Register MR)。上述流程需要陷入內核態來完成,而這個過程是耗時較長的
不同於需要通過控制路徑修改許可權的MR,MW在創建好之後,可以通過數據路徑(即通過用戶態直接下發WR到硬體的方式)動態的綁定到一個已經注冊的MR上,並同時設置或者更改其訪問許可權,這個過程的速度遠遠超過重新注冊MR的過程
IB規范通過下述兩種機制,來確保MR可以按照用戶的期望被正確且安全的訪問
A給自己的房間(MR)配了兩把鑰匙(Memory Key),一把留作自用(L_Key),另一把鑰匙(R_Key)郵寄(可以是任何通信方式)給了B。B可以在A不在家的時候(本端CPU不感知遠端節點對本地內存的RDMA操作),通過鑰匙(R_Key)打開門。打開門之後,可能B只能隔著玻璃查看房間的擺設(A只給了這個MR遠程讀許可權),或者進入房間內發現漆黑一片什麼也看不到,但是可以向房間里放物品(A只給了這個MR遠程寫許可權),當然也有可能沒有玻璃也開了燈(同時給了遠程讀寫許可權)
這里的許可權,指的是本端/對端節點,對於本端內存的讀/寫許可權,它們兩兩組合形成了四種許可權(除了這四種許可權之外,還有Atomic許可權等)
上表中這四種許可權中最低的是本地讀(Local Read),是用戶必須賦予MR/MW的許可權,因為如果一塊內存本地的用戶都無法訪問的話,那就失去意義了;另外還有個限制,如果某個MR需要配置遠端寫(Remote Write)或者遠端原子操作許可權(Remote Atomic),那麼也一定要配置本地寫(Local Write)許可權。在此約束之下,每個MR或者MW都可以按需配置許可權,比如注冊的一個MR需要允許遠端節點寫入數據,而不允許讀,那麼我們就打開Remote Write許可權,關閉Remote Read許可權。這樣HCA(網卡)收到對端發起的對這個MR范圍內的某個地址的WRITE請求之後,就可以予以放行;而HCA收到對端對這個MR的READ操作時,就會拒絕這個請求,並返回錯誤信息給對端
Key是一串數字,由兩部分組成:24bit的Index以及8bit的Key
其中,Index用於HCA快速索引到本地的虛擬-物理地址轉換表等MR相關的信息,而Key用於校驗整個欄位的合法性,以防止未授權的用戶任意傳遞Index
即Local Key,關聯到一個MR上,用於HCA訪問本端內存。當本端的某個進程試圖使用一個已經注冊的MR的內存時,HCA會校驗其傳遞的L_Key。並且利用L_Key中的索引查找地址轉換表,把虛擬地址翻譯成物理地址然後訪問內存
sge由起始地址、長度和秘鑰組成。用戶在填寫WR時,如果需要HCA訪問本端內存,那麼就需要通過一個sge的鏈表(sgl)來描述內存塊,這里sge的秘鑰填的就是L_Key,也就是下圖中的key1和key3,他們分別是MR1的L_Key和MR2的L_Key
即Remote Key,關聯到一個MR或者MW上,用於遠端節點訪問本端內存。當遠端節點試圖訪問本端的內存時,一方面本端的HCA會校驗R_Key是否合法,另一方面會利用R_Key中的索引查地址轉換表,把虛擬地址翻譯成物理地址然後訪問內存
凡是RDMA操作(即Write/Read/Atomic),用戶都要在WR中攜帶遠端內存區域的R_Key
指的是將一個MW「關聯」到一個已經注冊的MR的指定范圍上,並配置一定的讀寫許可權。綁定的結果會產生一個R_key,用戶可以把這個R_Key傳遞給遠端節點用於遠程訪問。注意一個MW可以被多次綁定,一個MR上也可以綁定多個MW。如果一個MR還有被綁定的MW,那麼這個MR是不能被取消注冊的
Bind有兩種方式,一種是調用Post Send介面下發Bind MW WR,一種是調用Bind MW介面:
指的是用戶通過下發一個帶有Invalidate操作碼的WR到硬體而使一個R_Key無效的操作
Invalidate操作的對象是R_Key而不是MW本身,即Invalidate之後的效果是:遠端用戶無法再使用這個R_Key訪問對應的MW,而MW資源仍然存在,以後仍然可以生成新的R_Key給遠端使用
按照Invalidate操作的發起方不同,又可以進一步分成兩種:
Ⅱ 網路數據是直接到內存,然後再去硬碟嗎
網路數據是直接到內存,然後再去硬碟的。
所有的網路的數據,吵液都是要寫入硬碟的。
但所有的硬碟數據,一定是要經過內存的。
內存是一台電腦最基本的存儲器之一,它和硬碟的分工是內存是輔助CPU工作的,皮腔硬碟是存儲數據的。
內存不是存儲數據用的,數據從網上下載,先讀入升握物內存,很快就寫入硬碟,然後內存就釋放空間,去做其它的事情。
上網所看到的所有東西,基本都是要寫入硬碟的。
網路數據是現實世界中最常用的數據類型之一。人與人之間的關系,城市之間的道路連接,科研論文之間的引用都組成了網路。樹形結構表達了層次結構關系,而不具備層次結構的關系數據,可統稱為網路數據。