如何选择QP类型-RDMAmojo
本文是对RDMAmojo文章的翻译,由于网站长久未更新,也作保留用
文章目录
当编写一个一个新的RDMA应用的时候(就如同编写新的Socket的应用一样),开发者应当确定应该选择哪一种QP用于开发。
在这一章,我会详细分析这几种不同的传输方式。
在RDMA中,有几种不同的QP类型,他们可以用这种方式表示:XY
X可以是:
Reliable(可靠的):保证消息最多被传递一次,有序并且无损坏
Unreliable(不可靠):不保证消息一定会被送达,不保证有序送达
在RDMA传输中,每一个数据包都有一个CRC*字段,发生损坏的数据包将会被丢掉(对于任何一种传输方式都一样),QP传输的可靠性指的是全部数据的可靠性。
Y可以是:
Connected(连接的):一个QP只能与另一个特定QP之间进行发送/接收操作
Unconnected(非连接的):一个QP可以与任意一个QP之间进行发送/接收操作
以下机制被用于RDMA传输过程中
*CRC:数据包中的CRC字段被用于验证数据在传输过程中未发生损坏
*PSN:数据包的序列编号,用于接收方检测数据包有没有按序到达,可以用于检测数据包丢失或者冗余。
*Acknowledgement:(仅用于RC 传输中)只有当数据被成功写入接收方后,一个ack应答数据包会被发送回数据发送方。如果发送方未收到ack,它将会根据QP的属性再次发送数据。如果从一个QP中无法收到任何ACK,它将会报告发生错误(retry exceeded)。如果接收方发生任何类型的错误(保护域冲突,资源无法访问等),接收方将发送ack给发送方,以此向接收方报告错误。
Rliable Connected(RC) QP 可靠连接
一旦一个RC QP与另一个特定的RC QP通过可靠方式建立了连接(比如发送或接收数据)。它将确保数据在传输过程中最多被传递一次,有序且无损坏。支持的最大单次传输数据为2GB(根据支持的RDMA设备的属性不同,这一值可能更低)(译者注:本文写于2013年,这一数据可能已经改变)。RC QP支持发送Send操作(可添加immediate),RDMA write操作(可添加immediate),RDMA Read操作和Atomic原子操作(具体情况参考RDMA设备支持的操作等级)
如果数据大小大于路径MTU,数据包将在发送侧被分组,在接收方重组
接收方收到数据并将数据写入内存后,将会向发送方发送ACK,发送方收到ACK认为数据发送完成。
当数据成功读取/写入缓存后,接受方认为数据传输完成。
Unreliable Connected(UC) QP 不可靠连接
一旦一个UC QP与另一个特定的UC QP通过不可靠方式建立连接比如发送或接收数据)。它并不确保数据一定会被另一方收到:损坏的包或者乱序的包会被静默地丢掉。一旦一个数据包被丢弃,那包含它的整个数据都将全部丢弃。在这种情况下,接收方不会停止工作,而是会继续接受到来的数据包。并且这种传输方式也不保证数据包的顺序。它所支持的单词最大传输数据为为2GB(根据支持的RDMA设备的属性不同,这一值可能更低)(译者注:本文写于2013年,这一数据可能已经改变)。RC QP支持发送Send操作(可添加immediate),RDMA write操作(可添加immediate)。
如果数据大小大于路径MTU,数据包将在发送侧被分组,在接收方重组
当数据全部发送到链路中后,发送方就认为数据发送完成
当接收方完整接收全部数据,且数据顺序正确,并将数据写入缓存后,接收方认为数据传输完成。
Unreliable Datagram(UD) QP 不可靠数据报
一个QP可以不可靠的方式以单播(一对一)或多播(一对多)的方式向任何其他UD QP发送和接收消息。它并不确保数据一定会被另一方收到:损坏的包或者乱序的包会被静默地丢掉。一旦一个数据包被丢弃,那包含它的整个数据都将全部丢弃。最大支持的消息大小是最大的pmtu,UD QP仅支持Send操作。
当数据全部发送到链路中后,发送方就认为数据发送完成
一旦接收到完整的消息,Responder就认为消息操作已经完成,并将数据写入其(本地)内存。
选择正确的QP类型
选择正确的QP类型对于应用程序的正确性和可拓展至关重要
RC QP应当在这种情况下被选择:
-
链路传输中要求传输的可靠性
-
整个链路的规模不是很大,或者集群的规模很大但是不是所有节点都向同一个节点发送数据
RC QP的几种用途可以是:RDMA上的FTP或RDMA上的文件系统
UC QP应当在这种情况下被选择:
-
链路传输中并不要求可靠性(比如可靠性完全不重要,或者可靠性由应用层来确保)
-
整个链路的规模不是很大,或者集群的规模很大但是不是所有节点都向同一个节点发送数据
-
用于发送大型数据(大于路径MTU)
UC QP的一个用途可以是:RDMA视频。
UD QP应当在这种情况下被选择:
- 链路传输中并不要求可靠性(比如可靠性完全不重要,或者可靠性由应用层来确保)
- 整个链路的规模很大并且所有节点都向任意节点发送数据。UD是解决可拓展性问题的最优方案之一
- 需要数据多播
UD QP的一个用途是:通过RDMA进行语音。
总结
| Metric | UD | UC | RC |
|---|---|---|---|
| Opcode: SEND (w/o immediate) | Supported | Supported | Supported |
| Opcode: RDMA Write (w/o immediate) | Not supported | Supported | Supported |
| Opcode: RDMA Read | Not supported | Not supported | Supported |
| Opcode: Atomic operations | Not supported | Not supported | Supported |
| Reliability | No | No | Yes |
| Connection type | Datagram (One to any/many) | Connected (one to one) | Connected (one to one) |
| Maximum message size | Maximum path MTU | 2 GB | 2 GB |
| Multicast | supported | Not supported | Not supported |
RDMAmojo文章探讨了在RDMA应用中选择正确Queue Pair(QP)类型的重要性。RC QP提供可靠连接,确保数据有序无损传输;UC QP不保证可靠性,适合大型数据传输;UD QP支持多播,适用于大规模网络和可靠性不敏感场景。选择合适的QP类型对应用的性能和可扩展性至关重要。
1758

被折叠的 条评论
为什么被折叠?



