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 状态,请应用以下解决方法
重启 openibd
systemctl restart openibd
如果需要,重新创建 SR-IOV 接口。
重放接口配置。例如
如果使用 ifupdown2
ifreload -a
如果使用 Netplan
netplan apply
BGP 会话无法建立的主要原因之一是 MTU 配置不匹配。确保所有接口上的 MTU 相同。例如,如果 BGP 在 p0 上失败,请检查并验证 p0、p0_if_r、p0_if 和 p0 的远程对端是否具有匹配的 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 守护程序已启动并正在运行
确保
/var/log/hbn/nl2docad.log中的 nl2doca 日志文件中没有错误。要检查 supervisor 下的 nl2doca 守护程序的状态,请运行
supervisorctl status nl2doca
使用
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
core 文件应位于
/var/support/core/中。检查
/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_if 或 p1_if 之一,基于 ECMP 哈希)。
逐步过程
导航到接口文件
/cumulus/nl2docad/run/software-tables/20。检查 RxPort (
pf0vf0_if)Interface: pf0vf0_if PD PORT: 6 HW PORT: 16 NETDEV PORT: 11 Bridge-id: 61 Untagged FID: 112
FID 112 被赋予接收端口。
检查网桥表文件
/cumulus/nl2docad/run/software-tables/17,目标 MAC 为8a:88:d0:b1:92:b1,FID 为 112flow-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
检查路由器表文件
/cumulus/nl2docad/run/software-tables/18,目标 IP 为6.0.0.26,VRF 为 0flow-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
检查 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' }
ECMP 哈希计算选择这些路径之一进行下一跳重写。检查它们的网桥表文件 (
fid=4100, dst mac: 00:02:00:00:00:2f或fid=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