据我了解,Infiniband 网络的子网管理器会计算网络上每对节点之间的最佳路由,并在节点需要通信时向它们提供这些路由。有没有办法让子网管理器(尤其是 OpenSM)以人性化的方式打印出这些路由表?
目前这纯粹是出于我自己的好奇心,但我可以想象这对于调试很有用的情况。
答案1
在 OpenFabrics 中,infiniband-diags 软件包附带一个名为“ibroute”的工具,它应该能够完全满足您的要求。infiniband-diags 中有一个名为“dump_lfts.sh”的脚本,它环绕 ibroute 并输出您的结构中所有交换机的路由表。
还有其他脚本可以围绕这些进行进一步的调试/路由分析,但我将其留给另一个答案。
更新:
一位同事提醒我,OpenSM 中也有一个机制可以做到这一点。我个人没有使用过它,但为了完整起见,以下是 OpenSM 手册页中的相关部分:
还支持将开关盖矩阵(又名最小跳跃表)转储到文件并在稍后加载这些矩阵的功能。
用法类似于从 lfts 文件加载单播转发表(由“文件”路由引擎引入),但新的 lid 矩阵文件名应由 -M 或 --lid_matrix_file 选项指定。例如:
opensm -R file -M ./opensm-lid-matrix.dump
转储文件名为 opensm-lid-matrix.dump,当设置 OSM_LOG_ROUTING 日志标志时,将在标准 opensm 转储目录(默认为 /var/log)中生成。
当路由引擎“文件”被激活,但未指定 lfts 文件或无法打开时,将使用默认的 lid 矩阵算法。
还有一个交换机转发表转储程序,它生成与 dump_lfts.sh 输出兼容的文件。此文件可用作“文件”路由引擎加载转发表的输入。可以同时指定 -U 和 -M 选项或其中一个选项以及 -R 文件。
答案2
命令
ibdiagnet --routing
将创建文件/var/tmp/ibdiagnet2/ibdiagnet2.fdbs
,其中包含所有交换机的单播路由表和文件/var/tmp/ibdiagnet2/ibdiagnet2.mcfdbs
,其中包含所有交换机的多播路由表。为了便于解释,应删除所有以 UNREACHABLE 结尾的行。