如何选择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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值