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