Skip to content

Chapter 3: The CLI -- Reading the Fabric · Part 3 of 10

Act 1 -- Layer 1: Both ends of the link

Every physical link has two ends. This sounds obvious but it is the single most important thing to internalise before you run your first diagnostic command, because most Layer 1 problems only show symptoms on one end -- and if you only check one end, you will not find them.

On a RoCEv2 deployment (Spectrum-X): The ConnectX-7 NIC in the DGX node operates in Ethernet mode. The link between the NIC and the leaf switch is an Ethernet link. It has a DGX end and a switch end. Both ends need to report the link as up for traffic to flow.

On an InfiniBand deployment (QM9700): The ConnectX-7 NIC operates in InfiniBand mode. The link between the NIC and the leaf switch is an InfiniBand link. Same principle -- DGX end and switch end.

In both cases, a complete Layer 1 check means checking both ends of the cable. Not just the DGX. Not just the switch. Both.

Every link has two ends — what each side sees

DGX ConnectX-7mlx5_0 / eth0400GbE optical cableibstat → DGX endshow interface counters → switch endSpectrum-X porteth0 (switch-side)
DGX end — green terminal
Active / LinkUp

ibstat: State Active. rdma link show: ACTIVE. The NIC sees optical signal and reports up.

Switch end — blue terminal
Err-disabled

Switch disabled port after 6 link flaps in 30 seconds. Admin Up, Oper Error-disabled. Reason: link-flap.

Diagnosis: This is the Lab 0 fault. DGX side looks completely healthy. Only checking the switch reveals the error. The NIC cannot know the switch disabled its port.
⚠ DGX alone cannot detect this fault. You must check the switch end. This is why the two-end check is mandatory, not optional.

Why both ends matter:

The most deceptive Layer 1 fault is when the two ends disagree. The NIC reports the link as Active -- it is sending electrical or optical signals and receiving them back. The switch has disabled its port due to repeated link flaps. The NIC has no way to know the switch port is error-disabled from its own perspective -- it just sees a physical signal present and reports up. This is exactly the fault in Lab 0, and it is invisible if you only check the DGX side.

Checking the DGX end

Open the DGX host terminal (green prompt in ProDeploy -- click the DGX node in the topology).

ibstat -- the NIC's view of every link

ibstat shows you all 8 ConnectX-7 NICs simultaneously from the DGX host's perspective. Run it first -- it gives you the complete picture of all 8 rails in one output.

The output looks different depending on whether your ConnectX-7 is in RoCEv2 mode or InfiniBand mode. The key diagnostic fields are Link layer, Base lid, and SM lid.

ibstat output — explore each state

CA 'mlx5_0'
CA type: MT4129
Firmware version: 28.38.1002
Port 1:
State:Active
Physical state: LinkUp
Rate: 400 Gb/s
Base lid: 12
SM lid: 1
Link layer: Ethernet
Meaning: RDMA fully operational. Link is up and initialised by the Subnet Manager.
Cause: Normal operation.
Action: No action needed.

RoCEv2 / Ethernet mode -- this is what ProDeploy models:

dgx-node-a:~$ ibstat

CA 'mlx5_0'
        CA type: MT4129
        Firmware version: 28.38.1002
        Node GUID: 0x506b4b0300a1b200
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 400
                Base lid: 0          <- zero: no IB SM, no LID assignment
                SM lid:   0          <- zero: no Subnet Manager on this fabric
                Link layer: Ethernet <- RoCEv2 mode confirmed

InfiniBand mode -- what you would see on a pure IB deployment:

dgx-node-a:~$ ibstat

CA 'mlx5_0'
        CA type: MT4129
        Firmware version: 28.38.1002
        Node GUID: 0x506b4b0300a1b200
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 400
                Base lid: 12          <- non-zero: SM assigned LID 12 to this port
                SM lid:   1           <- non-zero: Subnet Manager is at LID 1
                Link layer: InfiniBand <- IB mode confirmed

The Base lid and SM lid fields tell you immediately which mode you are on. Non-zero = InfiniBand mode with an active Subnet Manager. Zero = Ethernet/RoCEv2 mode with no SM. You should never see Link layer: Ethernet with a non-zero Base lid -- if you do, something is misconfigured.

Reading the key fields:

State: Active -- The RDMA state machine is fully operational. This is the DGX end saying "my side of the link is up and initialised." Other values: Down (no signal -- cable unplugged or switch port disabled), Polling (signal present but handshake not completing -- switch may still be booting), Init (SM has discovered but not yet armed this port -- transient). If you have not read Ch0's RDMA internals section, QP errors will seem mysterious. The short version: a dropped packet causes a PSN gap, the QP enters error state, and the GPU on that rail cannot participate in AllReduce until the QP is reset.

Physical state: LinkUp -- Electrical or optical signal is present. You can have Physical state: LinkUp with State: Polling -- meaning the physical signal is there but the RDMA initialisation handshake has not completed. Polling with LinkUp usually means the switch port is up but the RDMA layer is not ready. Polling without LinkUp means no signal at all.

Rate: 400 -- The negotiated link speed in Gb/s. If this shows 200 or 100, the link negotiated down -- usually a cable that does not meet NDR specification.

Link layer: Ethernet -- This NIC is in RoCEv2 mode, set via mlxconfig LINK_TYPE_P1=ETH. This is what you expect on a Spectrum-X deployment.

rdma link show -- faster overview of all rails

Where ibstat gives verbose detail per NIC, rdma link show gives a compact summary of all rails at once. Use this for a quick check:

dgx-node-a:~$ rdma link show

link mlx5_0/1 state ACTIVE physical_state LINK_UP
  type RoCE  netdev eth0  roce_mode: RoCEv2

link mlx5_1/1 state ACTIVE physical_state LINK_UP
  type RoCE  netdev eth1  roce_mode: RoCEv2

link mlx5_3/1 state ACTIVE physical_state LINK_UP
  type RoCE  netdev eth3  roce_mode: RoCEv2
  WARNING: PFC disabled -- lossless operation not guaranteed

[... mlx5_4 through mlx5_7 all ACTIVE ...]

Notice: netdev eth0, netdev eth3. Each ConnectX-7 NIC has two names -- mlx5_N at the RDMA layer and ethN at the Ethernet layer. Same physical card, two software identities. mlx5_0 and eth0 are the same hardware.

The WARNING on mlx5_3 -- PFC disabled -- tells you the RDMA link is up physically, but PFC is not configured. The physical layer is fine; the lossless configuration layer is not. You will investigate this in Act 3.

What the DGX end tells you -- and what it does not:

If all 8 NICs show State: Active and Physical state: LinkUp, the DGX is satisfied. But this only confirms the DGX end of each cable sees a signal and completed RDMA initialisation. It says nothing about whether the switch port is healthy, whether the switch has error-disabled the port, or whether the switch is seeing errors on its end of the cable.

That is why you must also check the switch end.

Checking the switch end

Open the leaf switch terminal (blue prompt in ProDeploy -- click the leaf switch in the topology).

On a Spectrum-X deployment you use show interface counters. On an ONYX InfiniBand switch you use show interfaces ib status. Both show you the switch's perspective on the same physical cables that ibstat showed you from the DGX side.

For RoCEv2 / Spectrum-X -- show interface counters:

leaf-switch # show interface counters

Interface swp1        <- the switch port connected to DGX mlx5_0
  Admin state:   Up
  Oper state:    Up
  Link speed:    400G

Interface swp4        <- the switch port connected to DGX mlx5_3
  Admin state:   Up
  Oper state:    Up
  Link speed:    400G

Note the naming convention: Cumulus Linux and NVUE on Spectrum-X switches use swp (switchport) names -- swp1, swp2, ... swp32 for front-panel ports. The DGX NIC side uses eth0/mlx5_0, eth3/mlx5_3 etc. These are different names for each end of the same cable. When reading diagnostics, swp1 on the switch and eth0 (or mlx5_0) on the DGX refer to the two ends of the same physical link.

For InfiniBand / ONYX -- show interfaces ib status:

leaf-switch # show interfaces ib status

IB Interface  Admin  Oper     Width  Speed
IB1/1         Up     Active   4x     NDR     <- DGX node A, Rail 0
IB1/2         Up     Active   4x     NDR
IB1/3         Up     Active   4x     NDR
IB1/4         Up     Polling  --     --      <- something wrong on Rail 3
IB1/5         Up     Active   4x     NDR

Port IB1/4 shows Oper: Polling. The DGX end showed State: Active for mlx5_3. The DGX thinks the link is fine. The switch disagrees. This is the two-end asymmetry in action.

The asymmetry: when the two ends disagree

DGX end (ibstat):              State: Active      <- NIC says link is up
Switch end (show interfaces):  Oper: Polling      <- switch says link is not ready

Or in the Lab 0 fault scenario:

DGX end (rdma link show):     state ACTIVE        <- NIC says fine
Switch end (show topology):   ERROR-DISABLED      <- switch disabled the port

The NIC has no knowledge that the switch disabled its port. Signals are still flowing on the cable -- the NIC sees them and reports Active. Only by checking show topology (which queries the switch side) do you discover the switch is error-disabled on Rail 3. This is precisely why the two-end check is mandatory. The DGX-only view is incomplete.

Illustration showing the same link appearing healthy from the DGX NIC side while the switch port is error-disabled.

Figure: A single cable can produce two valid but different stories. The DGX NIC may still report an active local link while the switch has already disabled its port due to flaps or policy.