前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RDMA之Partition Key(P_key) 分区键

RDMA之Partition Key(P_key) 分区键

作者头像
晓兵
发布2024-02-03 20:31:13
7640
发布2024-02-03 20:31:13
举报
文章被收录于专栏:DPU

有时,在 InfiniBand Fabric网络(即通过电缆物理连接到交换机和路由器的一组终端节点)内,需要在特定节点之间提供隔离并创建只有它们才能通信的“虚拟Fabric”。 在以太网中,这称为虚拟 LAN (VLAN),它定义了广播域。 但是,InfiniBand 不支持广播,因此它仅提供虚拟隔离。 这称为分区。 而且它比VLAN还要强大一点点

分区使用分区键 (P_Key) 来表示(和实现),分区键是一个 16 位值,包含两部分:

  • msb是成员比特位(membership bit), 定义成员级别
    • 0 表示受限制的成员(Limited)
    • 1 表示完整成员
  • 低15位才是定义分区值的关键

只有配置为位于同一分区中的 QP 才能通信,并且至少其中一个 QP 应该是该分区中的完整成员。 我们将在下面详细讨论这一点

分区提供 InfiniBand 结构之间的隔离,并且与子网边界无关

P_Key table 分区键表

P_Key Table是存在于每个端节点端口中的P_Key表。 该表大小是端口的一个属性,可以在 port_attr.pkey_tbl_len 中找到。 该表由分区管理器 (PM) 配置,分区管理器通常是子网管理器 (SM) 的一部分。 该表至少有一个有效的P_Key(关键部分(低15位)不为零的P_Key),默认P_Key 0xFFFF

P_Key表可以包含多个值,即是多个分区的成员,在其中一些分区中它可以是完整成员,在其中一些分区中它可以是部分成员。 它甚至可以是同一分区中的完整成员和部分成员

每个 QP 都配置有 P_Key 表的索引。 在连接建立期间调用 ibv_modify_qp(),可以在与 QP 关联的端口的 P_Key 表中设置索引, P_Key 表中的值不是恒定的,它们可能会发生变化,因此应用程序必须为此做好准备

发送队列中的P_Key

将 SR 发布到 QP 发起要发送的数据包。 每个数据包都携带一个 P_Key 值。 发送数据包时,这个QP会检查报文的P_Key

接收队列中的P_Key

任何传入数据包的 P_Key 值都将与接收方 QP 中配置的 P_Key 进行比较。 将进行以下检查:

  • 检查两个 P_Key 的密钥部分是否相等,即它们都是同一分区中的成员
  • 检查它们, 至少有一个 P_Key 值是完整成员

如果上述检查中只要有一项失败,则该包将被视为 P_Key 违规,并且数据包将被静默丢弃,如果设备支持(IBV_DEVICE_BAD_PKEY_CNTR属性, 在 dev_cap.device_cap_flags 中设置),则 port_attr.bad_pkey_cntr 错误分区键计数器将增加。 但是接收方的QP状态不会改变

重要的是 P_Key 值,而不是它们在 P_Key 表中的位置。 特定的P_Key值可能在子网的不同端口的不同索引中可以找到

从上面的测试可以看出,Limited成员不能接受来自其他Limited成员的流量,并且所有其他成员类型组合之间都允许通信,即至少一方必须是完整成员

举个例子, 以下队列对A, B, C, D分别关联一个P_Key

  • QPA is associated with the P_Key value 0x8001(1000000000000001)
  • QPB is associated with the P_Key value 0x0001(000000000000001)
  • QPC is associated with the P_Key value 0x0001(000000000000001)
  • QPD is associated with the P_Key value 0x8002(1000000000000010)

QPA 和 QPB 可以通信(因为它们都是分区 0x0001 中的成员,并且 QPA 是完整成员)

QPA 和 QPC 可以通信(因为它们都是分区 0x0001 中的成员,并且 QPA 是完整成员)

QPB 和 QPC 无法通信(因为它们都是分区 0x0001 中的成员,但都不是完整成员)

示例中的 QPD 和任何其他 QP 无法通信(因为它们不是同一分区的成员)

P_Key 分区键的值

默认 P_Key 是一个特殊值 (0xFFFF),提供默认分区中的完全成员身份

无效分区键:是一个特殊值,表示分区键表条目不包含有效键

可以缓存分区键么?

P_Key表是由SM配置的并且SM可以改变它,但大多数时候它不能。 如果您缓存 P_Key 表的值,则在发生 IBV_EVENT_PKEY_CHANGE 事件时,您应该刷新这些值

作者: Dotan Barak,2014年4月30日,2018年10月13日

其他相关主题

ibv_query_pkey()July 27, 2012In "General"

Working with IPoIBApril 21, 2015In "General"

IP over InfiniBand (IPoIB) architectureFebruary 16, 2015In "General"

参考

RDMAmojo 分区键: https://www.rdmamojo.com/2014/04/30/partition-key-p_key/

查询分区键: https://www.rdmamojo.com/2012/07/27/ibv_query_pkey/

晓兵(ssbandjl)

博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts

DPU专栏

https://cloud.tencent.com/developer/column/101987

晓兵技术杂谈(系列)

https://cloud.tencent.com/developer/user/5060293/video

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • P_Key table 分区键表
  • 发送队列中的P_Key
  • 接收队列中的P_Key
  • P_Key 分区键的值
  • 可以缓存分区键么?
  • 其他相关主题
  • 参考
  • 晓兵(ssbandjl)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档