Skip to content

PCIe Hotplug Unbinding on NPU Ports

Important

Apply this only to RHCOS nodes based on RHEL 10.2. RHCOS nodes based on RHEL 9.x do not need it.

Important

ATOM™ nodes do not need the configuration on this page.

When several NPUs behind the same PCIe switch are reset at once, the link can stay down long enough for the hotplug driver pciehp to remove the card from the kernel while it is in use. Unbinding pciehp from the downstream ports that host NPUs prevents this.

Deploy the pciehp-unbinding hook to RHCOS nodes with a MachineConfig.

Prerequisites

  • OpenShift Container Platform 4.x cluster (validated on 4.21 and 4.22)
  • cluster-admin privileges
  • OpenShift CLI (oc) installed and logged in

Confirm the Ignition spec version the cluster runs. OCP 4.21 and 4.22 use 3.5.0, which is what the manifest below declares:

oc get mc 00-worker -o jsonpath='{.spec.config.ignition.version}'

Which Pool to Apply It To

A MachineConfig applies to a MachineConfigPool, not to a single node. Apply it to the pool that holds the Rebel100™ nodes running RHCOS based on RHEL 10.2. Create Custom MachineConfigPool covers how a custom pool is built.

  • First check which RHEL release the node's RHCOS is based on. If VERSION_ID is not 10.2, this page does not apply.
oc debug node/<NODE_NAME> -- chroot /host grep VERSION_ID /etc/os-release
  • Apply it to the whole pool. On a node that does not have it, the card can disappear while it is in use.
  • A pool whose nodes are all VM guests can skip it. The command below prints nothing on a guest:
oc debug node/<NODE_NAME> -- chroot /host ls /sys/bus/pci_express/drivers/pciehp/
  • A Rebel100™ pool mixing bare metal and VM nodes still gets it pool-wide. On VM nodes, the hook exits without making changes.

The manifest and the commands below use __MCP_NAME__ for the pool. Replace it with the pool that holds the Rebel100™ nodes: worker when every worker in the cluster is a Rebel100™ node, otherwise the custom pool. Use the same name in every command on this page. Only a three-node compact cluster, where the masters also carry NPUs, uses master; in that case the control plane reboots one node at a time, so watch API availability as well.

Manifest

The manifest deploys the following files to each node in the pool:

Item Path Purpose
Hook script /usr/local/sbin/rbln-pciehp-hook.sh Unbinds pciehp from the downstream ports that host NPUs
udev rule /etc/udev/rules.d/99-rbln-pciehp.rules Starts the systemd service for the port when an RBLN device is added
systemd unit rbln-pciehp-unbind@.service Runs the hook for one port

The hook script and the udev rule are embedded gzip-compressed. Apply them as they are; do not edit the contents.source values. Replace only __MCP_NAME__.

99-rbln-pciehp.yaml
# Generated by Butane; do not edit
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: __MCP_NAME__
  name: 99-rbln-pciehp
spec:
  config:
    ignition:
      version: 3.5.0
    storage:
      files:
        - contents:
            compression: gzip
            source: data:;base64,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
          mode: 493
          overwrite: true
          path: /usr/local/sbin/rbln-pciehp-hook.sh
        - contents:
            compression: gzip
            source: data:;base64,H4sIAAAAAAAC/1SSwWrbTBSF93qKg/zDv4hs2m2KoG5i2i6cQKy2dJWMZ449Q6Q76sxIjgl59zKSKWQ76J77ffdoga0SdaSBilDYKm2d8MbLwR3hBQ/fbu53nxBJPGzWt9vNqjNwgmRdhHGBOvlwXhWLIiclbWnyWLIExfTeSaogPuVHlyKMP0lMgapD70O6xmA4QivJ3yTGBFUsYDg6zf8jtHWtCZQKSsyUmqfgIihDx6ASDfY8+MB3O6HkfFIXrsYSJx+e85hVYmiQPBTiOSZ2BoO4hKCSZUCyShAGgWXg9ZQ5yN6JATuXYrFAr90jX/rAGBHY+ZEYOFJSnCHzhtbJEcn6SByC7+AkOkOo2TazMEyayrReP0eoo3IS0+yQw/Bn4MAVsPu9azbb28df67tmlw2GyKmBvlWa8IdigaeLyTIM8oTo/5nlY0+ZPhiGDLVc5jbUvj1P750fZN5q2fYTVOtGRnipcLJO2xnZ5+OcXCT2VCnm+01lDKLtqljfNN/v7+q6VMaUFXY/vszUdV322pUV1k3z8DpSjA9vdV1+ePnIw6Gs0Ky/XtXlhbassLn7+fpO+O2qLsO+lWWvHW2/nLv4/N8zg7BdRYb8o5TF3wAAAP//FQW6LMcCAAA=
          mode: 420
          overwrite: true
          path: /etc/udev/rules.d/99-rbln-pciehp.rules
    systemd:
      units:
        - contents: |
            # Managed as a MachineConfig on RHCOS; see README.md in this directory.
            #
            # RequiresMountsFor= is spelled out with the resolved directory because it does
            # not chase symlinks: on an ostree host /usr/local is a symlink to /var/usrlocal
            # and /var is a separate mount.  install resolves this at run time; a static
            # config has to state it.
            [Unit]
            Description=Unbind pciehp from the PCIe downstream port hosting %I
            DefaultDependencies=no
            After=systemd-udevd.service
            # udev coldplug for PCI runs before local-fs.target.  On an ostree host the
            # helper lives under /var, so without this the unit would fail to exec and the
            # boot-time unbind would silently never happen.
            RequiresMountsFor=/var/usrlocal/sbin
            Conflicts=shutdown.target
            Before=shutdown.target

            [Service]
            Type=oneshot
            ExecStart=/usr/local/sbin/rbln-pciehp-hook.sh unbind %I
          name: rbln-pciehp-unbind@.service

Applying

Warning

Applying this triggers a rolling reboot. For each node in the pool, MCO drains the node, writes the files, and reboots the node. A reboot is required for the udev rule to take effect.

1
2
3
4
oc apply -f 99-rbln-pciehp.yaml

# Wait until UPDATED=True, UPDATING=False, DEGRADED=False
oc get mcp __MCP_NAME__ -w

The rollout is complete when the pool reports UPDATED=True, UPDATING=False and DEGRADED=False.

Verify

# Every port hosting an NPU reported as unbound
oc debug node/<NODE_NAME> -- chroot /host /usr/local/sbin/rbln-pciehp-hook.sh status

# SELinux label on the helper
oc debug node/<NODE_NAME> -- chroot /host ls -Z /usr/local/sbin/rbln-pciehp-hook.sh

# The rule matches and pulls in the unit
oc debug node/<NODE_NAME> -- chroot /host udevadm test /sys/bus/pci/devices/<BDF>

# One unit run recorded per port
oc debug node/<NODE_NAME> -- chroot /host journalctl -u 'rbln-pciehp-unbind@*'

# No SELinux denials
oc debug node/<NODE_NAME> -- chroot /host ausearch -m AVC -ts recent

The hook script is expected to carry the bin_t SELinux type and ausearch is expected to report no denials.

On a VM guest status finds the ports and exits with rc=0, but no BOUND -> unbound transition is observed. That transition only appears on a bare metal node.

Rollback

Do not run rbln-pciehp-hook.sh uninstall on these nodes. MCO manages the deployed files. To roll back, delete the MachineConfig. This triggers a rolling reboot of the target pool.

1
2
3
4
oc delete -f 99-rbln-pciehp.yaml

# Wait until UPDATED=True, UPDATING=False, DEGRADED=False
oc get mcp __MCP_NAME__ -w

Notes

Warning

Declare the unit under systemd.units. A unit written as a file under /etc/systemd/system through storage.files is removed by MCO as an undeclared unit, and the node does not converge.

The unit spells out RequiresMountsFor=/var/usrlocal/sbin rather than /usr/local/sbin. RequiresMountsFor= does not resolve symbolic links, and on an ostree host /usr/local is a symlink to /var/usrlocal with /var on a separate mount. udev coldplug for PCI runs before local-fs.target, so without the resolved path the unit would not start and pciehp would not be unbound at boot. Confirm the symlink on a node with:

oc debug node/<NODE_NAME> -- chroot /host readlink -f /usr/local/sbin