【微知】Mellanox网卡的硬件counter工具 show_counter使用方法?(show_counters mlx5_0 | grep -E “rx_write_requests|rx_r)

快速回忆

show_counters mlx5_0
# 查看几个关键值
show_counters mlx5_0 | grep -E "rx_write_requests|rx_read_requests|req|rep|rtu" #一般在执行数据前后分别执行

背景

对于RDMA运行过程中产生过多少次out of sequence,多少次rx_write_request,多少次rx_read_request这种信息一般没有关注,但是Mellanox的mlnx-tools工具中的show_counters能够查看这些信息。尤其是有些场景还需要类似查看req、resp、mra等报文统计,但是很遗憾,将两个口bond到一起之后少了很多信息,本文主要针对没有bond之前的一些counter的记录

用法

需要先安装mlnx-tools的rpm包,具体参考https://blog.youkuaiyun.com/essencelite/article/details/142036005

ibdev2netdev
show_counters mlx5_0 #指定一个mlx口

分为:
Port 1 hw counters
Port 1 cm counters:

实操

下面额数据包含执行过一次RDMA_CM建链的打流。
可以看到rdma_cm建链的数据:2次req和req以及dreq和dreq,还有rtu2次。
drep: 2
dreq: 2
lap: 0
mra: 0
rej: 0
rep: 2
req: 2
rtu: 2

关于RTU:当客户端(Client)向服务器(Server)发送连接请求(REQ)后,服务器会回复一个连接响应(REP)。客户端收到REP报文并校验通过后,会发送一个**RTU(Ready To Use)消息给服务器,表示客户端已经准备好,可以开始使用连接进行数据传输。RTU消息的发送标志着客户端的队列对(QP)状态从Ready To Receive(RTR,准备接收)转换为Ready To Send(RTS,准备发送)**状态。服务器端收到RTU消息后,也会将自身状态切换为IB_CM_ESTABLISHED,表示连接已经完全建立,可以进行数据传输。

并且也会看到这里发起过10000次的rx_write_requests。
counter数据:

[root@localhost ~]# show_counters mlx5_0
Port 1 hw counters:
duplicate_request: 0
implied_nak_seq_err: 0
lifespan: 10
local_ack_timeout_err: 0
np_cnp_sent: 0
np_ecn_marked_roce_packets: 0
out_of_buffer: 0
out_of_sequence: 0
packet_seq_err: 0
req_cqe_error: 0
req_cqe_flush_error: 0
req_remote_access_errors: 0
req_remote_invalid_request: 0
resp_cqe_error: 0
resp_cqe_flush_error: 0
resp_local_length_error: 0
resp_remote_access_errors: 0
rnr_nak_retry_err: 0
rp_cnp_handled: 0
rp_cnp_ignored: 0
rx_atomic_requests: 0
rx_icrc_encapsulated: 0
rx_read_requests: 0
rx_write_requests: 10000
Port 1 cm counters:
apr: 0
drep: 0
dreq: 0
lap: 0
mra: 0
rej: 0
rep: 0
req: 0
rtu: 0
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 2
dreq: 2
lap: 0
mra: 0
rej: 0
rep: 2
req: 2
rtu: 2
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 2
dreq: 2
lap: 0
mra: 0
rej: 0
rep: 2
req: 2
rtu: 2
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 0
dreq: 0
lap: 0
mra: 0
rej: 0
rep: 0
req: 0
rtu: 0
sidr_rep: 0
sidr_req: 0

假设再来一次rdma_cm建链的数据:
我的拓扑结构是用同一个服务器的mlx5_0作为服务端,用mlx5_1作为客户端发起write_bw的数据。
实验数据:
在这里插入图片描述

实验结束后的show_counters数据:
可以看到mlx5_0也就是服务端的计数中,rx_write_requests增加到15000,之前是10000次,也就是本次rdma_cm打流增加了5000个rx的wirte_requests,因为他是服务端,本次发起的是ib_write_bw,所以服务端是rx write的req。并且可以看到因为是cm建链所以,req rep rtu都增加了2次。

[root@localhost ~]# show_counters mlx5_0
Port 1 hw counters:
duplicate_request: 0
implied_nak_seq_err: 0
lifespan: 10
local_ack_timeout_err: 0
np_cnp_sent: 0
np_ecn_marked_roce_packets: 0
out_of_buffer: 0
out_of_sequence: 0
packet_seq_err: 0
req_cqe_error: 0
req_cqe_flush_error: 0
req_remote_access_errors: 0
req_remote_invalid_request: 0
resp_cqe_error: 0
resp_cqe_flush_error: 0
resp_local_length_error: 0
resp_remote_access_errors: 0
rnr_nak_retry_err: 0
rp_cnp_handled: 0
rp_cnp_ignored: 0
rx_atomic_requests: 0
rx_icrc_encapsulated: 0
rx_read_requests: 0
rx_write_requests: 15000
Port 1 cm counters:
apr: 0
drep: 0
dreq: 0
lap: 0
mra: 0
rej: 0
rep: 0
req: 0
rtu: 0
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 4
dreq: 4
lap: 0
mra: 0
rej: 0
rep: 4
req: 4
rtu: 4
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 4
dreq: 4
lap: 0
mra: 0
rej: 0
rep: 4
req: 4
rtu: 4
sidr_rep: 0
sidr_req: 0
apr: 0
drep: 0
dreq: 0
lap: 0
mra: 0
rej: 0
rep: 0
req: 0
rtu: 0
sidr_rep: 0
sidr_req: 0

其他

用rdmacm建链的工具测试

ucmatose是专门用于测试两台服务器rdma_cm建链的工具。
参考兄弟篇:Mellanox提供的一个不错的测试rdma_cm方式建链的工具软件ucmatose
客户端:
在这里插入图片描述

服务端:在这里插入图片描述
counter统计数据:
在这里插入图片描述

可以看到req rep rtu相比于上一次,都增加了1个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值