RAS
可靠性、可用性和可服务性(RAS)子系统可以用来查询 MCCL 作业在执行期间的健康状况。 这有助于诊断和调试崩溃和挂起的问题。RAS 是一个低开销的基础设施,MCCL 用户和开发者可以在应用程序运行时使用。 它提供了运行中应用程序状态的全局视图,并可以帮助检测异常情况,如无响应的进程。 有了这些信息,用户随后可以通过其他技术,如交互式调试、系统日志分析等,缩小怀疑的根本原因。
工作原理
RAS 内置于 MCCL 中,并在 MCCL 初始化时启动。 它由一组线程组成(每个进程一个),这些线程相互建立连接,形成一个网络,RAS 线程随后使用这个网络交换信息并监控彼此的健康状况。 在典型配置中,RAS 网络流量(在初始化期间使用的引导/带外网络接口上使用普通的 TCP/IP 套接字)不应与主要的 MCCL 流量(使用 RDMA 网络)竞争。 RAS 是轻量级的,不应干扰主要的 MCCL 作业;因此,它默认是启用的(但请参见 MCCL_RAS_ENABLE)。
RAS 线程相互通信,告知作业配置的任何变化;它们还交换定期的保 持活动消息。 如果 MCCL 进程崩溃或挂起,其他 MCCL 进程上运行的 RAS 线程会通过 RAS 网络连接到该进程被关闭或变得无响应来了解情况。
RAS 查询
RAS 线程还在 localhost 上监听客户端连接,端口为 28028(这些默认值可以使用 MCCL_RAS_ADDR 进行更改)。
可以使用 mcclras 二进制客户端连接到该套接字,并查询 RAS 子系统以获取当前作业状态,然后将其打印到标准输出。
客户端接受 -h 和 -p 参数来指定主机名和端口,-v 以在遇到问题时产生更详细的输出,以及 -t 来指定不同的超时时间(默认为 5 秒;0 禁用超时)。
由于客户端通信协议完全是基于文本的,可以使用 telnet 或 netcat 等标准网络工具代替 mcclras 二进制文件。
相关命令包括 STATUS、VERBOSE STATUS(等同于 mcclras 客户端的 -v 参数)和 TIMEOUT <seconds>(等同于 -t);例如,echo verbose status | nc localhost 28028。
无论查询是如何提交的,接收到的 RAS 线程都会返回作业摘要信息以及所有 MCCL 通信器的摘要信息; 后者是从作业的所有进程中收集的,因此,对于遇到问题或特别大的作业,响应可能需要几秒钟才能生成。 如果遇到任何问题,还会提供额外的信息。