ASUS Ascent GX10 (DGX Spark) 3台をConnect-Xでリング接続するメモ

ASUS Ascent GX10 (DGX Spark) 3台をConnect-Xで繋ぐメモです。2台版の続きです。

3台をQSFP Link ケーブル3本でリング状に繋ぎます。

IMG_3613.jpg

各台の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