官方文檔地址:
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。