多类别安全 (MCS) 指南
概述
MCS 插件旨在扩展当前 Slurm 相关的作业节点 独占性 和作业/节点信息显示 隐私 功能。
Slurm 的 OverSubscribe 选项控制一个分区在每个资源上执行多个作业的能力,无论“什么类型”的作业。Slurm 作业提交客户端还可以使用 --exclusive 和 --oversubscribe 参数请求作业如何被共享。ExclusiveUser slurm.conf 参数和 --exclusive=user 客户端参数值修改了独占性功能。启用此参数后,“作业类型”在考虑独占性时变得重要,因此作业可以根据作业用户 共享 资源,这意味着只有用户相同的作业才能共享资源。这确实为 Slurm 管理独占性增加了一个新维度。随着 MCS 插件的引入,Slurm 现在可以配置为将 MCS_label 关联到作业,并可选择确保节点只能在具有相同标签的作业之间共享。这为 Slurm 管理独占性提供了更多的自由度,为最终用户在这一领域提供了更大的灵活性。
Slurm 还有 PrivateData slurm.conf 参数,用于控制普通用户隐藏的信息类型。与独占性属性类似,MCS 插件还通过根据用户对其 MCS_label 的访问过滤作业和/或节点信息来扩展 隐私。这意味着隐私现在不再那么严格,信息不仅仅是对普通用户隐藏,而是根据这些可配置/请求的标签进行过滤,配合 PrivateData 选项。
限制
使用 MCS 限制了 抢占 的操作。具体来说,任何具有 MCS 标签并根据该标签请求节点独占性的作业将被禁止抢占或被任何不匹配该标签的作业抢占。如果 MCSParameters=enforced,select
被设置,这些限制将适用于所有作业。
配置
目前有两个参数可用于配置 MCS:MCSPlugin 和 MCSParameters。
- MCSPlugin 指定应使用哪个插件。插件是互斥的,关联的标签类型取决于加载的插件。
- mcs/none 是默认值,禁用 MCS 标签和功能。
- mcs/account MCS 标签只能取值为作业的 --account。注意:此选项需要启用会计。
- mcs/group MCS 标签只能取值为作业的用户组。
- mcs/user MCS 标签只能取值为作业的 --uid 的用户名。
- mcs/label MCS 标签是任意字符串。建议使用 job_submit 插件来管理对这些标签的作业提交,因为否则不提供强制执行。
作业上的 MCS_labels 可以通过 'squeue' 的格式选项 mcslabel 或通过 'scontrol show job' 显示。节点也会获得 MCS_label,该标签从分配的作业的 MCS_label 继承。节点的标签可以通过 'scontrol show nodes' 显示。'sview' 命令也可以用来查看这些 MCS_labels。
作业上的 MCS_labels 可以通过 'scontrol update job' 使用字段选项 MCSLabel 更新。只有 PENDING 状态的作业可以被修改。
用户可以请求特定类别标签用于作业(通过 --mcs-label 选项),或使用特定 MCS 插件实现生成的默认值。因此,可以配置标签以强制执行或按需设置,特定的 MCS 插件负责检查这些标签的有效性。当强制执行时,MCS 插件实现将始终将 MCS 标签与提交的作业关联,无论是默认值还是用户请求的值(如果被认为是正确的)。
节点的选择(独占性)可以根据 MCS 标签进行过滤,可以按需(ondemand)或始终(select)或从不(noselect)。用户可以通过 --exclusive=mcs 选项强制过滤(除非启用了 noselect 模式)。
标签强制、节点选择过滤策略、基于标签的私有数据以及允许映射到 MCS 标签的用户组列表可以通过 MCSParameters 选项进行配置。
- MCSParameters 指定传递给特定 MCS 插件实现的选项。选项应满足以下表达式:
"[ondemand|enforced][,noselect|select|ondemandselect][,privatedata]:[mcs_plugin_parameters]"。默认值为 "ondemand,ondemandselect" 和无 privatedata。 - ondemand|enforced 在作业上按需(使用 --mcs-label 选项)或始终设置 MCS 标签
- noselect|select|ondemandselect 选择带有 MCS 标签过滤的节点:从不、始终或按需(使用 --exclusive=mcs 选项)
- privatedata 根据 PrivateData 特定选项:
-
如果配置为 privatedata 和 PrivateData=jobs,作业信息将根据其 MCS 标签进行过滤。
-
如果配置为 privatedata 和 PrivateData=nodes,节点信息将根据其 MCS 标签进行过滤。
-
警告:使用 privatedata 配置 mcs/label 将禁用 PrivateData=[jobs|nodes] 提供的大部分过滤,因为假定所有用户都可以访问所有标签。
-
如果配置为 privatedata 和 PrivateData=jobs,作业信息将根据其 MCS 标签进行过滤。
- mcs_plugin_parameters 目前仅支持 mcs/group 选项。可以用来指定允许映射到 MCS 标签的用户组列表(用 '|' 字符分隔)。
当使用 mcs/account 强制执行私有数据时,用户需要与相关账户关联才能查看该账户中的其他作业。如果分区包含在关联中,它将被过度约束,并不允许他们查看该账户中的其他作业。
不同的请求和配置导致不同的用例组合。以下表格旨在帮助最终用户理解这些用例子集的预期行为(与独占性相关):节点过滤: |
标签强制:按需 (仅在请求时设置 MCS_label。) |
标签强制:强制 (MCS_label 是强制的。) |
不选择 | 即使请求了 --exclusive=mcs,也不对节点进行过滤。 | 即使请求了 --exclusive=mcs,也不对节点进行过滤。 |
选择 | 仅在设置作业 MCS_label 时对节点进行过滤。 | 始终对节点进行过滤。 |
按需选择 | 仅在 --exclusive=mcs 时对节点进行过滤。 | 仅在 --exclusive=mcs 时对节点进行过滤。 |
一些示例
slurm.conf:
MCSPlugin=mcs/account MCSParameters=enforced,select,privatedata或
MCSPlugin=mcs/group MCSParameters=ondemand,noselect:groupA|groupB|groupC或
MCSPlugin=mcs/user MCSParameters=enforced,select,privatedata或
MCSPlugin=mcs/label MCSParameters=ondemand,select
查看 MCS 参数
配置的 MCS 参数可以使用 scontrol 命令查看。
scontrol show config |grep MCS MCSPlugin = mcs/group MCSParameters = ondemand,noselect:groupA|groupB|groupC
使用 salloc、sbatch 或 srun 在作业上放置 mcs_label
srun -n10 -t 1000 --mcs-label=groupB ./job &
在具有独占性的作业上放置 mcs_label
srun -n10 -t 1000 --mcs-label=groupB --exclusive=mcs ./job &
使用 mcs/account 插件在作业上放置不同的 mcs_label
srun -n10 -t 1000 -A another_account_than_default ./job &
在使用中查看 MCS 参数
squeue 命令也可以显示 MCS,使用 mcslabel 格式选项
squeue -O jobid,username,mcslabel JOBID USER MCSLABEL 2 foo groupA 3 bar groupB
scontrol 命令现在将显示 MCS_label
scontrol show nodes NodeName=node0001 Arch=x86_64 CoresPerSocket=4 CPUAlloc=0 CPUTot=8 CPULoad=0.01 Features=(null) Gres=(null) NodeAddr=noder0001 NodeHostName=node0001 Version=15.08 OS=Linux RealMemory=23780 AllocMem=0 Sockets=2 Boards=1 State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=40 Owner=N/A MCS_label=groupA BootTime=2015-08-05T10:14:41 SlurmdStartTime=2015-09-07T13:42:28 CurrentWatts=0 AveWatts=0
最后修改于 2025 年 1 月 20 日