Network programming 如何在linux HPC群集上发现高性能网络接口?

Network programming 如何在linux HPC群集上发现高性能网络接口?,network-programming,mpi,zeromq,hpc,Network Programming,Mpi,Zeromq,Hpc,我有一个分布式程序,它与运行在HPC集群上的ZeroMQ通信 ZeroMQ使用TCP套接字,因此默认情况下,HPC集群上的通信将使用管理网络,因此我引入了一个由代码读取的环境变量,以强制在特定的网络接口上进行通信。 对于Infiniband(IB),通常是ib0。但在某些情况下,并行文件系统使用另一个IB接口,或者在Cray系统上,接口是IPOGF,在某些非HPC系统上,它可以是eth1、eno1、p4p2、em2、enp96s0f0或其他任何类型 问题是我需要向集群管理员询问要使用的网络接口的

我有一个分布式程序,它与运行在HPC集群上的ZeroMQ通信

ZeroMQ使用TCP套接字,因此默认情况下,HPC集群上的通信将使用管理网络,因此我引入了一个由代码读取的环境变量,以强制在特定的网络接口上进行通信。 对于Infiniband(IB),通常是ib0。但在某些情况下,并行文件系统使用另一个IB接口,或者在Cray系统上,接口是IPOGF,在某些非HPC系统上,它可以是eth1、eno1、p4p2、em2、enp96s0f0或其他任何类型

问题是我需要向集群管理员询问要使用的网络接口的名称,而使用MPI的代码不需要这样做,因为MPI“知道”要使用哪个网络

在linux HPC集群上查找高性能网络接口名称的最方便的方法是什么?(如果没有简单的方法,我不介意为此编写一个小型MPI程序)

Q:在linux HPC群集上查找高性能网络接口名称的最方便的方法是什么

这似乎是一个灰色地带——试图解决站点特定硬件(技术)接口命名和它们的技术性、管理性维护较弱、首选使用方式之间的多方面问题


按现状: ZeroMQ可以(根据RFC 37/ZMTP v3.0+)指定
:/
详细信息:

zmq\u绑定(服务器\u套接字,”tcp://eth0:6000/system/name-服务/测试)

以及:

zmq\u connect(客户端\u套接字,”tcp://192.168.55.212:6000/system/name-服务/测试)

然而,据我所知,在HPC站点及其硬件配置的整体环境中,没有办法对此类接口的主要用途进行反向工程


在我看来,您的想法是首先通过MPI工具预先测试管理映射,并让ZeroMQ部署使用这些外部检测到的(如果确实是自动检测到的,正如您上面所假设的)配置详细信息,以便正确(首选)使用接口

安全之路: 询问HPC基础设施支持团队(负责了解上述所有内容并接受培训以帮助科学团队以最高效的方式使用HPC)是我的首选方式


免责声明: 抱歉,如果这没有帮助您阅读和自动检测所有需要的配置细节(我想,通用的BlackBox HPC生态系统检测和自动配置策略很难是一个简单的一行,不是吗?)

Q:在linux HPC群集上查找高性能网络接口名称的最方便的方法是什么

这似乎是一个灰色地带——试图解决站点特定硬件(技术)接口命名和它们的技术性、管理性维护较弱、首选使用方式之间的多方面问题


按现状: ZeroMQ可以(根据RFC 37/ZMTP v3.0+)指定
:/
详细信息:

zmq\u绑定(服务器\u套接字,”tcp://eth0:6000/system/name-服务/测试)

以及:

zmq\u connect(客户端\u套接字,”tcp://192.168.55.212:6000/system/name-服务/测试)

然而,据我所知,在HPC站点及其硬件配置的整体环境中,没有办法对此类接口的主要用途进行反向工程


在我看来,您的想法是首先通过MPI工具预先测试管理映射,并让ZeroMQ部署使用这些外部检测到的(如果确实是自动检测到的,正如您上面所假设的)配置详细信息,以便正确(首选)使用接口

安全之路: 询问HPC基础设施支持团队(负责了解上述所有内容并接受培训以帮助科学团队以最高效的方式使用HPC)是我的首选方式


免责声明:
抱歉,如果这没有帮助您阅读和自动检测所有需要的配置详细信息(我想,一个通用的BlackBox HPC生态系统检测和自动配置策略很难是一个简单的一行,不是吗?

没有简单的方法,我怀疑是否存在一个完整的解决方案。例如,OpenMPI附带了一组广泛的排名网络通信模块,并尝试实例化所有模块,最后选择排名最高的模块。其思想是,等级某种程度上反映了底层网络的速度,如果给定的网络类型不存在,则其模块将无法实例化,因此,面对同时具有以太网和InfiniBand的系统,它将选择InfiniBand,因为其模块具有更高的优先级。这就是为什么大型开放式MPI作业启动相对较慢,而且肯定不是傻瓜式的——在某些情况下,必须进行干预并手动选择正确的模块,特别是当节点具有多个InfiniBand HCA网络接口,并且并非所有这些接口都提供节点到节点的连接时。这通常是由系统管理员或供应商在系统范围内配置的,这也是MPI“正常工作”的原因(专业提示:在不太少的情况下,它实际上不工作)

您可以复制OpenMPI采用的方法,并为您的程序开发一组检测模块。对于TCP,在不同节点上生成两个或多个副本,列出它们的活动网络接口和相应的IP地址,匹配网络地址并绑定一个节点上的所有接口,然后尝试从其他节点连接到它。成功连接后,运行类似TCP版本的来测量网络速度和延迟,并选择最快的网络。一旦您从最初的一小部分节点获得了这些信息,就很可能使用了相同的接口