【infiniband】 ib_portid_t结构

typedef struct portid {
    int lid;        /* lid or 0 if directed route */
    ib_dr_path_t drpath;
    int grh_present;    /* flag */
    ibmad_gid_t gid;
    uint32_t qp;
    uint32_t qkey;
    uint8_t sl;
    unsigned pkey_idx;
} ib_portid_t;
这是InfiniBand网络编程中portid结构的定义,它包含一个端口的标识信息。
具体字段含义:
- lid: 本地标识符,用于在IB交换机的一个端口。
- drpath: 直接路由路径,用于直接路由的情况。
- grh_present: 标志位,是否使用GRH(全局路由头)。
- gid: 全局标识符,用于标识一个端口。
- qp: Queue Pair号,用于指定连接的QP。
- qkey: QP的QKey。
- sl: 服务级别。
- pkey_idx: 分区键索引。
portid包含本地地址信息(lid)和全局地址信息(gid),可以标识InfiniBand网络中的一个端口。
通过portid,可以在网络中定位某个端口,建立连接(QP)并进行通信。
它是InfiniBand网络提供端到端通信的基础。对应用程序提供网络标识和寻址的抽象。
在 InfiniBand 网络中,pkey_idx代表分区键(Partition Key)索引。
分区键是InfiniBand架构中的一个重要概念,用于隔离网络中的流量。每个InfiniBand端口都会关联一个分区键表(PKey Table),其中包含多个PKey。
PKey可以用于在端口级别隔离通信,只有使用相同PKey的端口之间才能通信。每个分区键表中可配置多达16个分区键。
pkey_idx就是用来索引这个分区键表的,取值范围是0到15。应用程序在创建QP时,可以指定pkey_idx来选择要使用的PKey。
举个例子:
- 端口A的PKey表中,pkey_idx=3对应的PKey是0x1234
- 端口B的PKey表中,pkey_idx=3对应的PKey也是0x1234
那么端口A和端口B之间的QP如果都指定了pkey_idx=3,就可以通信,因为两边的PKey相同。
这种机制可以用于在网络层面隔离不同的应用流量,避免流量干扰。
所以pkey_idx是一个重要的网络策略参数,rdma-core中ib_portid_t结构体包含它,可以方便地为QP资源指定分区键,从而实现流量隔离。

猜你喜欢

转载自blog.csdn.net/eidolon_foot/article/details/132583708