# 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 ```