如何选择QP类型-RDMAmojo

RDMAmojo文章探讨了在RDMA应用中选择正确Queue Pair(QP)类型的重要性。RC QP提供可靠连接,确保数据有序无损传输;UC QP不保证可靠性,适合大型数据传输;UD QP支持多播,适用于大规模网络和可靠性不敏感场景。选择合适的QP类型对应用的性能和可扩展性至关重要。

如何选择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进行语音。

总结

MetricUDUCRC
Opcode: SEND (w/o immediate)SupportedSupportedSupported
Opcode: RDMA Write (w/o immediate)Not supportedSupportedSupported
Opcode: RDMA ReadNot supportedNot supportedSupported
Opcode: Atomic operationsNot supportedNot supportedSupported
ReliabilityNoNoYes
Connection typeDatagram (One to any/many)Connected (one to one)Connected (one to one)
Maximum message sizeMaximum path MTU2 GB2 GB
MulticastsupportedNot supportedNot supported
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值