20230810 VMでRoCEv2Pingをする¶
–
前提¶
- おなじセグメント内でいるLinuxがVMWareなどで立ち上がっている。(同じセグメントは必須要件ではない)
- NW I/Fはens34とする
共通¶
IF=ens34
sudo apt -y install infiniband-diags ibverbs-utils infiniband-diags
sudo apt -y install perftest rdma-core wireshark python3-pip libibverbs-dev
sudo apt -y install rdmacm-utils tshark
rdma link show
> なにもない
ls /sys/class/infiniband/
> なにもない
sudo rdma link add rxe0 type rxe netdev $IF
rdma link show
> link rxe0/1 state ACTIVE physical_state LINK_UP netdev ens34
ls /sys/class/infiniband/
> rxe0
sudo modprobe rdma_ucm
sudo modprobe ib_uverbs
sudo modprobe ib_iser
sudo modprobe ib_umad
sudo modprobe ib_ipoib
状態の確認¶
ibstat¶
kanai@ubuntu1:~$ ibstat
> ここで、LIDが0のままだがよい。
> IBの場合DiscoverされるがRoCEの場合LIDはつかない。
CA 'rxe0'
CA type:
Number of ports: 1
Firmware version:
Hardware version:
Node GUID: 0x020c29fffe9122a4
System image GUID: 0x020c29fffe9122a4
Port 1:
State: Active
Physical state: LinkUp
Rate: 10 (FDR10)
Base lid: 0
LMC: 0
SM lid: 0
Capability mask: 0x00010000
Port GUID: 0x020c29fffe9122a4
Link layer: Ethernet
ibv_devinfo -v¶
ibv_devinfo -v
---
hca_id: rxe0
num_comp_vectors: 2
port: 1
GID[ 0]: fe80::20c:29ff:fe46:4c04, RoCE v2
GID[ 1]: ::ffff:192.168.244.128, RoCE v2
GID[ 4]: fe80::6ddb:b1ea:ec80:a442, RoCE v2
# ここで、ipv6のついているモノがあるが、 ip addr showなどでどれが使われているのかを見ておく
# 私の環境ではGID0のアドレスが ip addr showでens34についていなかった...
---
ping¶
rping(IPv4)¶
kanai@ubuntu1:~$ rping -s -a 192.168.101.174 -C 10 -v
> -aでLISTENを指定する必必要はない。rping -sでもOK
server ping data: rdma-ping-0: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
server DISCONNECT EVENT...
kanai@ubuntu2:~$ rping -c -a 192.168.101.174 -C 2 -v
ping data: rdma-ping-0: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
ping data: rdma-ping-1: BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs
tcpdump
14:53:14.201551 IP 192.168.101.147.55410 > 192.168.101.174.4791: UDP, length 280
14:53:14.201572 IP 192.168.101.147.64713 > 192.168.101.174.4791: UDP, length 32
rping(IPv6)¶
kanai@ubuntu1:~$ rping -s -a ::0
> -a で::0を指定しないといけない
> -s server side. To bind to any address with IPv6 use -a ::0
kanai@ubuntu2:~$ rping -c -a fe80::6ddb:b1ea:ec80:a442%ens34 -C 2 -v
tcpdump
14:52:31.957600 IP6 fe80::9f3c:546c:7e0e:29ca.49984 > fe80::6ddb:b1ea:ec80:a442.4791: UDP, length 32
14:52:31.957623 IP6 fe80::6ddb:b1ea:ec80:a442.49984 > fe80::9f3c:546c:7e0e:29ca.4791: UDP, length 20
IP Verb ping(IPv4)¶
Server
kanai@ubuntu1:~$ sudo ibv_rc_pingpong -d rxe0 -g 1
local address: LID 0x0000, QPN 0x000014, PSN 0xb86d37, GID ::ffff:192.168.101.174
remote address: LID 0x0000, QPN 0x000014, PSN 0x71370e, GID ::ffff:192.168.101.147
Client
ibv_rc_pingpong -d rxe0 -g 1 192.168.101.174
local address: LID 0x0000, QPN 0x000014, PSN 0x71370e, GID ::ffff:192.168.101.147
remote address: LID 0x0000, QPN 0x000014, PSN 0xb86d37, GID ::ffff:192.168.101.174
Server (tcpdump)
sudo tcpdump -ni ens34
14:33:20.876929 IP 192.168.101.174.49593 > 192.168.101.147.4791: UDP, length 20
14:33:20.876943 IP 192.168.101.174.49593 > 192.168.101.147.4791: UDP, length 1040
tcpdump
14:47:58.174977 IP 192.168.101.147.57730 > 192.168.101.174.4791: UDP, length 32
14:47:58.174990 IP 192.168.101.174.57730 > 192.168.101.147.4791: UDP, length 20
IPv4で通信されている
IP Verb ping(IPv6)¶
ここで興味深いのは以下でClient側がv4でtargetを指定しているものの、IPv6で通信されていること
Server
kanai@ubuntu1:~$ sudo ibv_rc_pingpong -d rxe0 -g 4
local address: LID 0x0000, QPN 0x00001b, PSN 0x600c60, GID fe80::6ddb:b1ea:ec80:a442
remote address: LID 0x0000, QPN 0x00001b, PSN 0x5fe13c, GID fe80::9f3c:546c:7e0e:29ca
kanai@ubuntu2:~$ ibv_rc_pingpong -d rxe0 -g 4 192.168.101.174
local address: LID 0x0000, QPN 0x00001b, PSN 0x5fe13c, GID fe80::9f3c:546c:7e0e:29ca
remote address: LID 0x0000, QPN 0x00001b, PSN 0x600c60, GID fe80::6ddb:b1ea:ec80:a442
Server (tcpdump)
14:39:00.613401 IP6 fe80::9f3c:546c:7e0e:29ca.49936 > fe80::6ddb:b1ea:ec80:a442.4791: UDP, length 1040
14:39:00.613404 IP6 fe80::9f3c:546c:7e0e:29ca.49936 > fe80::6ddb:b1ea:ec80:a442.4791: UDP, length 1040