在 InfiniBand(IB)网络通信中,priv->qp->qp_num
(队列对编号)和 GID(全局标识符)是两个核心概念,它们在 IB 卡的配置和通信中起着关键作用。以下是对这两个概念的详细解释,结合代码分析它们的动态性以及在设备初始化和网络通信中的具体应用。
一、priv->qp->qp_num 的定义与分配
(一)定义
qp_num
是 Queue Pair(队列对)的编号,用于唯一标识一个队列对。在 InfiniBand 协议中,每个队列对都有一个唯一的 24 位编号。队列对包含一个发送队列(Send Queue)和一个接收队列(Receive Queue),用于管理数据传输。
(二)分配方式
当创建一个队列对时,驱动程序或硬件会为其分配一个 qp_num
。这个编号在节点内是唯一的,但不同的节点上可以存在相同的 qp_num
。例如,在创建队列对时,IB 驱动会从可用范围内分配一个唯一的 qp_num
:
struct ib_qp_init_attr qp_attr = { ... };