SLURM (Simple Linux Utility for Resource Management)是一个可用于大型计算节点集群的高度可伸缩的集群管理器和作业调度系统。由60万行C代码组成。
SLURM 提供三种关键功能:
https://www.schedmd.com
https://github.com/SchedMD/slurm
HPC系统逻辑架构图:
Slurm架构图:
(1)控制进程 slurmctld 是资源管理系统的中枢服务,负责资源状态维护、资源分配、作业调度、作业管理控制等。
(2)节点监控进程 slurmd 运行在每个计算节点上,负责收集节点上的资源状态并向控制进程报告。slurmd 接收来自控制进程与用户命令的请求,进行作业步任务加载、作业取消等操作。
(3)作业管理进程 slurmstepd 由 slurmd 在加载作业步任务或批处理作业时派生。 slurmstepd 进程管理本节点上一个作业步的所有任务,负责计算任务启动、标准 I/O 转发、信号传递、记账信息收集以及并行环境初始化等功能。
(4)记账存储进程 slurmdbd 是命令工具与控制进程访问记账数据库的中间层。它提供访问记账数据与关联信息的统一接口,并起到用户认证与安全隔离的作用。
autoconf 和make命令用于以自动方式构建和安装Slurm。
顶级目录:
auxdir - 用于构建Slurm。
contribs - 各种贡献工具。
doc - 包含man手册和html网页等文档。
etc - 示例配置文件。
slurm - 用于API的头文件。单独放置方便移植。
src - 包含不在上述“slurm”子目录中的所有源代码和头文件。
testsuite - 用于测试的文件。
src源码目录:
api - 应用程序接口到Slurm代码。用于从中央管理器发送和获取Slurm信息。这些是用户应用程序可能使用的功能。
common - 在Slurm中广泛使用的通用功能。
database - 支持记帐存储插件的各种数据库文件。
plugins - 用于各种基础结构或可选行为的插件函数。
sacct - 用于查看有关作业的记帐信息的用户命令。
sacctmgr - 用于管理记账的用户和管理员工具。
salloc - 用于为作业分配资源的用户命令。
sattach - 用于将标准输入,输出和错误文件附加到正在运行的作业或作业步骤的用户命令。
sbatch - 用于提交批处理作业的用户命令(用于以后执行的脚本)。
srun - 用于提交作业,获取分配和/或启动并行作业步骤的用户命令。
sbcast - 用于将文件广播到与现有Slurm作业关联的所有节点的用户命令。
scancel - 用于取消(或发出信号)作业或作业步骤的用户命令。
scontrol - 管理Slurm的管理员工具。
sinfo - 用于获取有关Slurm节点和分区的信息的用户命令。
slurmctld - Slurm中央管理器守护程序代码。
slurmd - 用于管理计算服务节点的Slurm守护程序代码。
slurmdbd - Slurm数据库守护程序,用于管理对记帐存储数据库的访问。
sprio - 用于在安装Multifactor Job Priority插件时查看作业优先级计算细分的用户命令。
squeue - 用于获取有关Slurm作业和作业步骤的信息的用户命令。
sreport - 用户命令,用于查看有关整个企业过去使用情况的各种报告。
sshare - 用于在安装Multifactor Job Priority插件时查看共享和使用情况的命令。
sstat - 用于在安装Job Accounting Gather插件时查看有关正在运行的作业的详细统计信息的用户命令。
strigger - 管理事件触发器的用户和管理员工具。
sview - 用于查看和更新节点,分区和作业状态信息的用户命令。
slurmctld初始化:
slurmctld主干流程:
_slurmctld_rpc_mgr线程:
_slurmctld_signal_hand线程:
slurmctld_state_save线程:
start_power_mgr函数:
sbatch主干流程:
slurmd主干流程:
slurmdbd主干流程:
rpc_mgr线程:
sacctmgr主干流程: