2017年5月26日 星期五

[筆記] 支援 RDMA 的技術:(一)iWARP

iWARP

iWARP 簡單來說,就是 RFC 定義的 RDMA 技術。
(詳見維基百科中 iWARP 的條目
  • RFC 5040 A Remote Direct Memory Access Protocol Specification
  • RFC 5041 Direct Data Placement over Reliable Transports
  • RFC 5043 Stream Control Transmission Protocol (SCTP) Direct Data Placement (DDP) Adaptation
  • RFC 5044 Marker PDU Aligned Framing for TCP Specification
  • RFC 5042 Direct Data Placement Protocol (DDP) / Remote Direct Memory Access Protocol (RDMAP) Security
  • RFC 6580 IANA Registries for the Remote Direct Data Placement (RDDP) Protocols
  • RFC 6581 Enhanced Remote Direct Memory Access (RDMA)
  • RFC 7306 Remote Direct Memory Access (RDMA) Protocol Extensions


RFC 中定義的 RDMA 具有以下幾種操作動作:
  1. Send
將訊息(Messenge)送至接收方尚未聲明(Advertisment)的緩衝區(buffer)內。與 RDMA Write 不同的地方在於對方的緩衝區有沒有被聲明
  1. Send with Invalidate
將訊息送至接收方尚未聲明的緩衝區,接收方收到訊息後這段緩衝區無法被傳送方存取,直到接收方重新開放存取並聲明這塊緩衝區。
  1. Send with Solicited Events
Solicited Event,詳見 RDMAmojo。簡單的說就有點像是寄雙掛號的意思,接收方收到傳送方的訊息之後,會回傳 Solicited Events。
  1. Send with Solicited Events and Invalidate
照字面上的意思,就是除了發 Invalidate,還會發 Solicited Events。
  1. RDMA Write
接收方會先聲明一塊緩衝區,然後傳送方在訊息上加上 sTag,把訊息傳送到被聲明的緩衝區裡。
  1. RDMA Read
要讀取方會先聲明一塊緩衝區,然後通知對方要讀取,對方會在讀取的內容上加上 sTag 傳送過來這塊緩衝區。
  1. Terminate

這邊提到的對緩衝區做的任何動作,像是聲明緩衝區、對緩衝區貼上 sTag,
這些都不是 RDMA 能辦到的事,而是它底層的 DDP 負責的事。
但光是 RDMA + DDP 仍然不夠,因為並沒有傳輸功能,
所以還要依靠再下層的傳輸協定。

也就是說,如果下層的傳輸協定是可信賴的(reliable ),
那這個 RDMA 就是可信賴的,反之亦然。
所以 RFC 又針對 RDMA + DDP 定義了可信賴連線,
就是上圖的 Stack 了!