【verbs】ibv_query_port()

 

描述


ibv_query_port()返回RDMA设备上下文(context)的端口的属性。
这是struct ibv_port_attr的完整描述:

NameProtocolDescription
stateIB/IBoE/iWARP

逻辑端口状态。它可以是下列枚举值之一:

 

  • IBV_PORT_NOP - 保留值, 不应该出现
  • IBV_PORT_DOWN - 逻辑链接已断开。端口的物理链路未up。在这种状态下,链路层将丢弃递送给它的所有数据包。
  • IBV_PORT_INIT - 逻辑链接正在初始化。端口的物理链路已建立,但SM尚未配置逻辑链路。在这种状态下,链路层只能接收和发送SMP和流控制链路数据包,递交给它的其他类型的数据包将被丢弃
  • IBV_PORT_ARMED - 逻辑链接已布防(Logical link is Armed)。端口的物理链路已建立,但SM尚未完全配置逻辑链路。在这种状态下,链路层可以接收和发送SMP和流控制链路数据包,可以接收其他类型的数据包,但是会丢弃非SMP数据包以进行发送。(but discards non SMP packets for sending)
  • IBV_PORT_ACTIVE - 逻辑链接是活动的。链路层可以发送和接收所有数据包类型
  • IBV_PORT_ACTIVE_DEFER - 逻辑链接处于“活动延迟”状态。逻辑链接为活动,但物理链接出现故障。如果错误在超时之前恢复,则逻辑链接将返回到IBV_PORT_ACTIVE,否则它将移动到IBV_PORT_DOWN

(If the error will be recovered within a timeout, the logical link will return to IBV_PORT_ACTIVE, otherwise it will move to IBV_PORT_DOWN

max_mtuIB/IBoE/iWARP 

该端口支持的最大MTU。它可以是下列枚举值之一:

  • IBV_MTU_256 - MTU is 256 bytes
  • IBV_MTU_512 - MTU is 512 bytes
  • IBV_MTU_1024 - MTU is 1024 bytes
  • IBV_MTU_2048 - MTU is 2048 bytes
  • IBV_MTU_4096 - MTU is 4096 bytes
active_mtuIB/IBoE/iWARP

Active maximum MTU enabled on this port to transmit and receive. It can be one of the following enumerated values which specified for max_mtu. This value specify the maximum message size that can be configured in UC/RC QPs and the maximum message size that an UD QP can transmit

在此端口上启用的最大活动MTU进行发送和接收。它可以是为max_mtu指定的以下枚举值之一。此值指定可以在UC / RC QP中配置的最大消息大小以及UD QP可以传输的最大消息大小

gid_tbl_lenIB/IBoE/iWARPLength of the Source GID Table of this port
port_cap_flagsIB/IBoE/iWARPPort's supported capabilities as bitwise ORed of the following numeric values since those values aren't enumerated:

 

  • 1 << 1   - Indication that the SM that manages the subnet sending the packets from this port
  • 1 << 10 - Indication that there is an SM which isn't active in this port
  • 1 << 17 - Indication that an SNMP Tunneling agent is listening on this port
  • 1 << 19 - Indication that a Device Management agent is listening on this port
  • 1 << 20 - Indication that a Vendor specific agent is listening on this port
  • 1 << 25 - Indication that this port capable of generating the IBV_EVENT_CLIENT_REREGISTER asynchronous event
max_msg_szIB/IBoE/iWARPMaximum message size supported by this port
bad_pkey_cntrIB/IBoEBad P_Key counter of the port, if supported by the device (IBV_DEVICE_BAD_PKEY_CNTR is set in dev_cap.device_cap_flags)
qkey_viol_cntrIB/IBoEQ_Key violations packets of the port, if supported by the device (IBV_DEVICE_BAD_QKEY_CNTR is set in dev_cap.device_cap_flags)
pkey_tbl_lenIB/IBoE*/iWARP*Length of the partition table of this port
lidIBThe base LID of this port, valid only if state is IBV_PORT_ARMED or IBV_PORT_ACTIVE
sm_lidIBThe LID of the SM that manages this port
lmcIBPort LID mask of this port (used in multipath), valid only if state is IBV_PORT_ARMED or IBV_PORT_ACTIVE
max_vl_numIBThe maximum number of VLs supported by this port. There isn't any enumeration of this value, and the numeric value can be one of the following:

 

  • 1 - 1 VL: VL0
  • 2 - 2 VLs: VL0, VL1
  • 3 - 4 VLs: VL0 - VL3
  • 4 - 8 VLs: VL0 - VL7
  • 5 - 15 VLs: VL0 - VL14
sm_slIBThe SL of the SM that manages this port
subnet_timeoutIBSpecifies the maximum expected subnet propagation delay, which depends upon the configuration of the switches, to reach any other port in the subnet and also used to determine the maximum rate which SubnTrap()s can be sent from this port.
The duration of time is calculated based on: 4.096*2^{SubnetTimeOut}
init_type_replyIBValue configured by the SM prior to changing the port to IBV_PORT_ACTIVE or IBV_PORT_ARMED state that indicates the type of initialization performed, if supported by the device (IBV_DEVICE_INIT_TYPE is set in dev_cap.device_cap_flags)
active_widthIB/IBoE*/iWARP*The active link width of this port. There isn't any enumeration of this value, and the numeric value can be one of the following:

 

  • 1 - 1x
  • 2 - 4x
  • 4 - 8x
  • 8 - 12x
active_speedIB/IBoE*/iWARP*The active link speed of this port. There isn't any enumeration of this value, and the numeric value can be one of the following:

 

  • 1 - 2.5 Gbps
  • 2 - 5.0 Gbps
  • 4 - 10.0 Gbps
  • 8 - 10.0 Gbps
  • 16 - 14.0 Gbps
  • 32 - 25.0 Gbps
phys_stateIBThe physical link status. There isn't any enumeration for this value, and the numeric value can be one of the following:

 

  • 1 - Sleep: The port drives its output to quiescent levels and does not respond to received data. In this state, the link is deactivated  without powering off the port
  • 2 - Polling: The port transmits training sequences and responds to receive training sequences.
  • 3 - Disabled: The port drives its output to quiescent levels and does not respond to receive data
  • 4 - PortConfigurationTraining: Both transmitter and receive active and the port is attempting to configure and transition to the LinkUp state
  • 5 - LinkUp: The port is available to send and receive packets
  • 6 - LinkErrorRecovery: Port attempts to re-synchronize the link and return it to normal operation
  • 7 - Phytest: Port allows the transmitter and received circuitry to be tested by external test equipment for compliance with the transmitter and receiver specifications
link_layerIB/IBoE/iWARPThe link layer protocol used by this port. It can be one of the following enumerated values:

 

  • IBV_LINK_LAYER_UNSPECIFIED - Legacy value, used to indicate that the link layer protocol is InfiniBand
  • IBV_LINK_LAYER_INFINIBAND - Link layer protocol is InfiniBand
  • IBV_LINK_LAYER_ETHERNET - Link layer protocol is Ethernet, thus IBoE (or RoCE) can be used

* supported, but not really relevant

Most of the port attributes, returned by ibv_query_port(), aren't constant and may be changed, mainly by the SM (in InfiniBand), or by the Hardware. It is highly recommended avoiding saving the result of this query, or to flush them when a new SM (re)configures the subnet.

Parameters

NameDirectionDescription
contextinRDMA device context, that was returned from ibv_open_device()
port_numinPort number to query, values can be [1..dev_cap.phys_port_cnt]
port_attroutPort attributes

Return Values

ValueDescription
0On success
errnoOn failure
EINVALport_num is invalid
ENOMEMOut of memory

Examples

Query a port attributes:

struct ibv_port_attr port_attr;
int port_num = 1;
 
rc = ibv_query_port(ctx, port_num, &port_attr);
if (rc) {
	fprintf(stderr, "Error, failed to query port %d attributes in device '%s'\n",
		port_num, ibv_get_device_name(ctx->device));
	return -1;
}

show_port_attr.c

FAQs

I'm using iWarp/IBoE, do I need all of the values that ibv_query_port() returns?

No. Check the protocol columns, to understand which attributes are relevant for you.

I'm using IB, do I need all of the values that ibv_query_port() returns?

No. There are fields that you will use more often (such as state), some you may use when debugging problems (the counters) and some of them are informative for other services.

Calling every time to ibv_query_port() when I need a port attribute takes time, can I cache some of the attributes?

Actually, yes. The attributes, which indicates the port supported attributes (such as supported table length and capabilities) won't change, but others, which are configured by the SM, state and counters may change.

In InfiniBand, if you want, you can cache the returned structure and query it only when an unaffiliated asynchronous event occurred (this will be discussed later on in other posts).

posted on 2022-10-04 01:23  bdy  阅读(55)  评论(0编辑  收藏  举报

导航