官方文档地址:
https://wiki.mpich.org/mpich/index.php/Hydra_Process_Management_Framework
1. 概述
Hydra frameworkd由如下几个基本部分组成:php
- User Interface,用户接口UI,如mpiexec
- Resource Managerment Kernel,资源管理核心RMK
- Process manager,进程管理PM
- Bootstrap server,启动服务,如ssh,fork,pbs,slurm,sge
- Process Binding,进程监听,如plpa
- Commnication Subsystem,例如IB,MX
- Process Managerment proxy,进程管理代理
- I/O demux engine ,IO复用引擎
结构图下以下:
缓存
- User interface
此层的主要职责是从用户那里收集有关应用程序的信息: 在何处启动进程;将进程映射到内核,;读取 标准输入(stdin) 并将其转发到适当的进程 (es); 从不一样的程序中读取标准输出/标准错误;合适的时候指挥。
- Resource Mangerment Kernel
RMK 提供了可与资源管理器进行交互的插件功能,好比Torque,Moab或者Cobalt。例如, 若是应用程序在启动做业以前须要在系统上分配节点, RMK 将完成这部分。一样, RMK 还能够容许在单个系统预留用于多个做业的状况下解耦做业启动。在当前的实现中, RMK 很是简单, 不提供任何这些功能。
- Process manager
进程管理器提供了必要的环境设置以及主要的进程管理功能,例如进程管理器pmiserv进程管理器提供了MPICH PMI(PMI)功能。但目前仅支持PMI1。其余进程管理器也能够经过其余接口支持。
- Process Managerment Proxy
进程管理代理基本上是一个帮助器代理, 它是在系统的每一个节点上生成的, 以帮助进程管理器进行进程生成、进程清理、信号转发、I/O转发以及任何进程管理器特定的功能。
它基本上能够执行进程管理器能够作的任何任务, 所以, 甚至能够建立进程管理代理的层次结构, 其中每一个代理都充当其子树的进程管理器。
- Bootstrap Server
引导服务器主要充当预配置的守护进程系统, 容许上一层服务在整个系统中启动进程。
例如, ssh 引导服务器fork进程, 每个都经过执行一个 ssh 到另一台机器,启动一个进程。
- Processing Binding
进程监听组件主要处理提取系统体系结构信息 (例如, 处理器的数量、可用的内核和 SMT 线程、它们的拓扑、共享缓存等), 以及将进程绑定到可移植的不一样内核中用一种简便的方式。PLPA 是一个这样的体系结构, 已经在Hydra中使用, 但它只提供有限的信息。
- Communication Subsystem
通讯子系统是不一样代理之间以可伸缩方式进行通讯的一种方式。这仅与下面描述的预启动和预链接代理有关。
此组件提供可伸缩的通讯机制, 无论系统规模 (例如, 基于IB或MX)。
- I/O Demux Engine
这是一个方便的基础组件,不一样的组件可以注册他们的文件描述符,demux engine可以等待这些描述符的事件。
这个方式给出了一个集中式的事件管理集制,由于咱们不须要不一样的线程阻塞不一样的事件。
I/ODemux Engine使用了同步回调机制。也就是,对于每一个文件描述符,进程调用提供了一个函数指针,指向在描述符发生事件时的必须调用的函数。
Demux Engins引发会在其全部已经注册的文件描述符上阻塞事件,并在发生事件时,调用适当的回调函数。
此组件在实现中很是有用,但在体系结构自己中没有发挥关键做用。
2. 执行过程和控制流
有三大类基本的可执行类在当前的模式中:UI,PMP,process
架构图以下:
服务器
- UI process UI process,如mpiexec,获取用户参数,环境变量,节点信息和其余细节信息,而后传递它们给RMK。