ASUS Ascent GX10 (DGX Spark) 3台をConnect-Xでリング接続するメモ
ASUS Ascent GX10 (DGX Spark) 3台をConnect-Xで繋ぐメモです。2台版の続きです。
3台をQSFP Link ケーブル3本でリング状に繋ぎます。

各台のport0を次の台のport1に繋ぎます。2台版では1台目と2台目のport0同士を繋いでいたので、2台目側のケーブルをport1に挿し直し、空いた2台目のport0と3台目のport1、3台目のport0と1台目のport1をそれぞれ新しいケーブルで繋ぎます。
+------------------+
| Spark 1 |
| 192.168.xx.20 |
| port0 port1 |
+--+------------+--+
| ^
A | | C
100.20 -> 100.30 | | 102.40 -> 102.20
v |
+-----------------+-+ +-+-----------------+
| port1 | | port0 |
| Spark 2 | | Spark 3 |
| 192.168.xx.30 | | 192.168.xx.40 |
| port0 +------->+ port1 |
+-------------------+ B +-------------------+
104.30 -> 104.40
| ケーブル | 接続 | サブネット |
|---|---|---|
| A | 1台目 port0 → 2台目 port1 | 192.168.100.0/24, 192.168.101.0/24 |
| B | 2台目 port0 → 3台目 port1 | 192.168.104.0/24, 192.168.105.0/24 |
| C | 3台目 port0 → 1台目 port1 | 192.168.102.0/24, 192.168.103.0/24 |
1つのポートは2つのネットワークデバイス (enp1s0f* と enP2p1s0f*) として見えるので、ケーブル1本につきサブネットを2つ割り当てます。2台目の192.168.100.30と192.168.101.30は、挿し直しに合わせてport1側のデバイスに移ります。
RoCEインターフェースとLinuxのネットワークデバイスとのマッピングの確認
3台とも同じです。2台版と違い、両ポートがUpになります。
$ ibdev2netdev
rocep1s0f0 port 1 ==> enp1s0f0np0 (Up)
rocep1s0f1 port 1 ==> enp1s0f1np1 (Up)
roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Up)
roceP2p1s0f1 port 1 ==> enP2p1s0f1np1 (Up)
Netplan設定ファイルの作成
1台目
sudo tee /etc/netplan/40-cx7.yaml > /dev/null <<EOF
network:
version: 2
ethernets:
enp1s0f0np0:
addresses:
- 192.168.100.20/24
dhcp4: no
mtu: 9000
enP2p1s0f0np0:
addresses:
- 192.168.101.20/24
dhcp4: no
mtu: 9000
enp1s0f1np1:
addresses:
- 192.168.102.20/24
dhcp4: no
mtu: 9000
enP2p1s0f1np1:
addresses:
- 192.168.103.20/24
dhcp4: no
mtu: 9000
EOF
sudo chmod 600 /etc/netplan/40-cx7.yaml
sudo netplan apply
2台目
sudo tee /etc/netplan/40-cx7.yaml > /dev/null <<EOF
network:
version: 2
ethernets:
enp1s0f0np0:
addresses:
- 192.168.104.30/24
dhcp4: no
mtu: 9000
enP2p1s0f0np0:
addresses:
- 192.168.105.30/24
dhcp4: no
mtu: 9000
enp1s0f1np1:
addresses:
- 192.168.100.30/24
dhcp4: no
mtu: 9000
enP2p1s0f1np1:
addresses:
- 192.168.101.30/24
dhcp4: no
mtu: 9000
EOF
sudo chmod 600 /etc/netplan/40-cx7.yaml
sudo netplan apply
3台目
sudo tee /etc/netplan/40-cx7.yaml > /dev/null <<EOF
network:
version: 2
ethernets:
enp1s0f0np0:
addresses:
- 192.168.102.40/24
dhcp4: no
mtu: 9000
enP2p1s0f0np0:
addresses:
- 192.168.103.40/24
dhcp4: no
mtu: 9000
enp1s0f1np1:
addresses:
- 192.168.104.40/24
dhcp4: no
mtu: 9000
enP2p1s0f1np1:
addresses:
- 192.168.105.40/24
dhcp4: no
mtu: 9000
EOF
sudo chmod 600 /etc/netplan/40-cx7.yaml
sudo netplan apply
デバイス情報を確認
$ nmcli device
DEVICE TYPE STATE CONNECTION
enP7s7 ethernet connected Wired connection 3
enP2p1s0f0np0 ethernet connected netplan-enP2p1s0f0np0
enP2p1s0f1np1 ethernet connected netplan-enP2p1s0f1np1
enp1s0f0np0 ethernet connected netplan-enp1s0f0np0
enp1s0f1np1 ethernet connected netplan-enp1s0f1np1
docker0 bridge connected (externally) docker0
lo loopback connected (externally) lo
wlP9s9 wifi disconnected --
p2p-dev-wlP9s9 wifi-p2p disconnected --
疎通確認
各ケーブルについて、port0側から相手のport1側にpingします。
1台目 → 2台目 (ケーブルA)
$ ping -c 3 192.168.100.30
PING 192.168.100.30 (192.168.100.30) 56(84) bytes of data.
64 bytes from 192.168.100.30: icmp_seq=1 ttl=64 time=0.831 ms
64 bytes from 192.168.100.30: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 192.168.100.30: icmp_seq=3 ttl=64 time=1.45 ms
--- 192.168.100.30 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2077ms
rtt min/avg/max/mdev = 0.635/0.972/1.451/0.347 ms
2台目 → 3台目 (ケーブルB)
$ ping -c 3 192.168.104.40
PING 192.168.104.40 (192.168.104.40) 56(84) bytes of data.
64 bytes from 192.168.104.40: icmp_seq=1 ttl=64 time=0.759 ms
64 bytes from 192.168.104.40: icmp_seq=2 ttl=64 time=1.19 ms
64 bytes from 192.168.104.40: icmp_seq=3 ttl=64 time=0.247 ms
--- 192.168.104.40 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 0.247/0.731/1.189/0.385 ms
3台目 → 1台目 (ケーブルC)
$ ping -c 3 192.168.102.20
PING 192.168.102.20 (192.168.102.20) 56(84) bytes of data.
64 bytes from 192.168.102.20: icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from 192.168.102.20: icmp_seq=2 ttl=64 time=0.694 ms
64 bytes from 192.168.102.20: icmp_seq=3 ttl=64 time=1.23 ms
--- 192.168.102.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2040ms
rtt min/avg/max/mdev = 0.694/0.977/1.231/0.220 ms
enP2p1s0f* 側の192.168.101.30、192.168.105.40、192.168.103.20も同様に疎通します。MTU 9000が通ることは、フラグメント禁止の最大サイズ (9000 - 28 = 8972バイト) で確認できます。
$ ping -c 1 -M do -s 8972 192.168.100.30
PING 192.168.100.30 (192.168.100.30) 8972(9000) bytes of data.
8980 bytes from 192.168.100.30: icmp_seq=1 ttl=64 time=0.370 ms