DOCA 文档 v2.10.0

HBN 服务故障排除

HBN 容器启动时为 init-sfs 状态,并在 2 分钟内转换为 doca-hbn 状态,可以使用 crictl ps 查看。但有时它可能仍然保持 init-sfs 状态。

如果接口 p0_if 丢失,则可能发生这种情况。在 BlueField 和容器内运行命令 ip -br link show dev p0_if 以检查 p0_if 是否存在。如果丢失,请确保固件已升级到最新版本。执行 BlueField 系统级重置 以使新固件生效。

通常,主机可以使用任何接口管理器来管理属于 BlueField 的主机接口。当主机使用 Netplan 或 NetworkManager 以外的接口管理器时,BlueField 重启后某些端口可能仍然处于 down 状态。

如果接口保持 down 状态,请应用以下解决方法

  1. 重启 openibd

    复制
    已复制!
                

    systemctl restart openibd

  2. 如果需要,重新创建 SR-IOV 接口。

  3. 重放接口配置。例如

    • 如果使用 ifupdown2

      复制
      已复制!
                  

      ifreload -a 

    • 如果使用 Netplan

      复制
      已复制!
                  

      netplan apply

BGP 会话无法建立的主要原因之一是 MTU 配置不匹配。确保所有接口上的 MTU 相同。例如,如果 BGP 在 p0 上失败,请检查并验证 p0p0_if_rp0_ifp0 的远程对端是否具有匹配的 MTU 值。

可以使用容器内的 hbn-support 命令从 /etc/image-version 收集 HBN 容器镜像

复制
已复制!
            

root@bf2:/tmp# hbn-support Please send /var/support/hbn_support_doca-hbn-service-bf2-s15-1-ipmi_20240820_211214.txz to Cumulus support.

生成的转储文件将在 HBN 容器的 /var/support 下可用,并且应包含任何进程核心转储和日志文件。生成的 core 文件可以在 /var/support/core 下找到,并由 hbn-support 收集。/var/support 目录也挂载在 BlueField Arm 端的 /var/lib/hbn/var/support

对于 BlueField,BFB 版本可以从 /etc/mlnx-release 中检查。

固件版本可以从 mlxfwmanager 收集。

可以使用 sos 命令收集 BlueField 支持转储

复制
已复制!
            

root@bf2:/tmp/#sos report -a --all-logs --batch

示例输出

复制
已复制!
            

sos report (version 4.8.0)   This command will collect system configuration and diagnostic information from this Ubuntu system. ... ... Finished running plugins   Creating compressed archive...   Your sos report has been generated and saved in: /tmp/sosreport-bf2-s15-1-ipmi-2024-08-20-cpdvegw.tar.xz   Size 19.37MiB Owner root sha256 0890a855623a1a2dd5089c9cd6d57d81e71f3805ac06c2d9fc0dab556ccd5ffc   Please send this file to your support representative.

要排除通过 SFC 接口的流量问题,第一步是在 HBN 容器中禁用 nl2doca 服务

复制
已复制!
            

root@bf2:/tmp# supervisorctl stop nl2doca nl2doca: stopped

停止 nl2doca 有效地停止了硬件卸载并切换到软件转发。所有数据包都将出现在 BlueField 接口上的 tcpdump 捕获中。

可以在 SF 接口以及 VLAN、VXLAN 和上行链路上执行 tcpdump,以确定数据包在哪里被丢弃或数据包正在采用哪个流。

可以使用以下步骤来确保 nl2doca 守护程序已启动并正在运行

  1. 确保 /var/log/hbn/nl2docad.log 中的 nl2doca 日志文件中没有错误。

  2. 要检查 supervisor 下的 nl2doca 守护程序的状态,请运行

    复制
    已复制!
                

    supervisorctl status nl2doca

  3. 使用 ps 检查实际的 nl2doca 进程是否正在运行

    复制
    已复制!
                

    ps -eaf | grep nl2doca root 18 1 0 06:31 ? 00:00:00 /bin/bash /usr/bin/nl2doca-docker-start root 1437 18 0 06:31 ? 00:05:49 /usr/sbin/nl2docad

  4. core 文件应位于 /var/support/core/ 中。

  5. 检查 /cumulus/nl2docad/run/stats/punt​ 是否可访问。否则,nl2doca 可能卡住了,应该重启

    复制
    已复制!
                

    supervisorctl restart nl2doca

如果某个流量未按预期工作,请禁用 nl2doca(即,禁用硬件卸载)

复制
已复制!
            

supervisorctl stop nl2doca​

​禁用硬件卸载后,如果流量开始工作,则可以确认是卸载问题。如果不是卸载问题,请在各种接口上使用 tcpdump 查看数据包在哪里被丢弃。

可以在以下文件中检查卸载的条目,这些文件包含系统已知的每个 IP 前缀和 MAC 地址的编程状态。

  • 网桥条目在文件 /cumulus/nl2docad/run/software-tables/17 中可用。它包括系统中的所有 MAC 地址,包括本地和远程 MAC 地址。

    示例格式

    复制
    已复制!
                

    - flow-entry: 0xaaab0cef4190​ flow-pattern:​ fid: 112​ dst mac: 00:00:5e:00:01:01​ flow-actions:​ SET VRF: 2​         OUTPUT-PD-PORT: 20(TO_RTR_INTF)         STATS:​ pkts: 1719​ bytes: 191286​

  • 路由器条目在文件 /cumulus/nl2docad/run/software-tables/18 中可用。它包括系统已知的所有 IP 前缀。

    具有 ECMP 条目的示例格式

    复制
    已复制!
                

    Entry with ECMP: - flow-entry: 0xaaaada723700 flow-pattern: IPV6: LPM VRF: 0 destination-ip: ::/0 flow-actions : ECMP: 2 STATS: pkts: 0 bytes: 0​   Entry without ECMP: - flow-entry: 0xaaaada7e1400     flow-pattern:        IPV4: LPM        VRF: 0        destination-ip: 60.1.0.93/32     flow-actions :         SET FID: 200         SMAC: 00:04:4b:a7:88:00         DMAC: 00:03:00:08:00:12         OUTPUT-PD-PORT: 19(TO_BR_INTF)    STATS:        pkts: 0        bytes: 0

  • ECMP 条目在文件 /cumulus/nl2docad/run/software-tables/19 中可用。它包括系统中的所有下一跳。

    示例格式

    复制
    已复制!
                

    - ECMP: 2 ref-count: 2 num-next-hops: 2 entries: - { index: 0, fid: 4100, src mac: 'b8:ce:f6:99:49:6a', dst mac: '00:02:00:00:00:0a' } - { index: 1, fid: 4101, src mac: 'b8:ce:f6:99:49:6b', dst mac: '00:02:00:00:00:0e' }

要检查发送到内核的数据包的计数器,请运行

复制
已复制!
            

cat /cumulus/nl2docad/run/stats/punt ​PUNT miss pkts:3154 bytes:312326 PUNT miss drop pkts:0 bytes:0 PUNT control pkts:31493 bytes:2853186 PUNT control drop pkts:0 bytes:0 ACL PUNT pkts:68 bytes:7364 ACL drop pkts:0 bytes:0

对于特定类型的数据包流,可以在特定于块的文件中参考编程。典型的流程如下

例如,要检查端口 pf0vf0_if 上远程 MAC 8a:88:d0:b1:92:b1 的 L2 EVPN ENCAP 流,基本的卸载流应如下所示:RxPort (pf0vf0_if) -> BR (Overlay) -> RTR (Underlay) -> BR (Underlay) -> TxPort​ (上行链路 p0_ifp1_if 之一,基于 ECMP 哈希)。

逐步过程

  1. 导航到接口文件 /cumulus/nl2docad/run/software-tables/20

  2. 检查 RxPort (pf0vf0_if)

    复制
    已复制!
                

    Interface: pf0vf0_if​ PD PORT: 6​ HW PORT: 16 NETDEV PORT: 11 Bridge-id: 61​ Untagged FID: 112​

    FID 112 被赋予接收端口。

  3. 检查网桥表文件 /cumulus/nl2docad/run/software-tables/17,目标 MAC 为 8a:88:d0:b1:92:b1,FID 为 112

    复制
    已复制!
                

    flow-pattern:​ fid: 112​ dst mac: 8a:88:d0:b1:92:b1​ flow-actions:​ VXLAN ENCAP:​ ENCAP dst ip: 6.0.0.26​ ENCAP vni id: 1000112​ SET VRF: 0​ OUTPUT-PD-PORT: 20(TO_RTR_INTF)​ STATS:​ pkts: 100​ bytes: 10200​

  4. 检查路由器表文件 /cumulus/nl2docad/run/software-tables/18,目标 IP 为 6.0.0.26,VRF 为 0

    复制
    已复制!
                

    flow-pattern:​ IPV4: LPM​ VRF: 0​ ip dst: 6.0.0.26/32​ flow-actions :​ ECMP: 1​ OUTPUT PD PORT: 2(TO_BR_INTF)​ STATS:​ pkts: 300​ bytes: 44400​

  5. 检查 ECMP 表文件 /cumulus/nl2docad/run/software-tables/19,ECMP 为 1

    复制
    已复制!
                

    - ECMP: 1​ ref-count: 7​      num-next-hops: 2      entries:​ - { index: 0, fid: 4100, src mac: 'b8:ce:f6:99:49:6a', dst mac: '00:02:00:00:00:2f' }​ - { index: 1, fid: 4115, src mac: 'b8:ce:f6:99:49:6b', dst mac: '00:02:00:00:00:33' }​

  6. ECMP 哈希计算选择这些路径之一进行下一跳重写。检查它们的网桥表文件 (fid=4100, dst mac: 00:02:00:00:00:2ffid=4115, dst mac: 00:02:00:00:00:33)

    复制
    已复制!
                

    flow-pattern:​ fid: 4100​ dst mac: 00:02:00:00:00:2f​ flow-actions:​ OUTPUT-PD-PORT: 36(p0_if)​ STATS:​ pkts: 1099​ bytes: 162652​

    这将显示数据包在上行链路上发出。

要检查 NVUE 守护程序的状态,请运行

复制
已复制!
            

supervisorctl status nvued

要重启 NVUE 守护程序,请运行

复制
已复制!
            

supervisorctl restart nvued

© 版权所有 2025,NVIDIA。 上次更新于 2025 年 2 月 12 日。