cgroup.conf
节: Slurm 配置文件 (5)更新: Slurm 配置文件
索引
名称
cgroup.conf - Slurm 的 cgroup 支持配置文件描述
cgroup.conf 是一个 ASCII 文件,定义了 Slurm 的 Linux cgroup 相关插件使用的参数。 该文件将始终位于与 slurm.conf 相同的目录中。
参数名称不区分大小写。 配置文件中以 "#" 开头的任何文本都被视为注释,直到该行结束。 对配置文件的更改在 Slurm 守护进程重启、守护进程接收到 SIGHUP 信号或执行命令 "scontrol reconfigure" 时生效,除非另有说明。
有关一般 Slurm cgroup 信息,请参见 Cgroups 指南,地址为 <https://slurm.schedmd.com/cgroups.html>。
以下 cgroup.conf 参数用于控制 Slurm cgroup 插件的一般行为。
- CgroupMountpoint=路径
- 仅用于开发和测试。指定 cgroup 控制器应挂载的路径。默认路径为 /sys/fs/cgroup。
-
- CgroupPlugin=<cgroup/v1|cgroup/v2|autodetect|disabled>
- 指定在与 cgroup 子系统交互时使用的插件。
支持的值为 "disabled",完全禁用与 cgroup 的任何交互,"cgroup/v1" 支持 cgroup v1 的遗留接口,
"cgroup/v2" 用于统一的 cgroup2 架构,以及 "autodetect",尝试确定您的系统提供的 cgroup 版本。"autodetect" 在节点可以有不同 cgroup 版本的集群中非常有用,可以使用单一配置。默认值为 "autodetect"。
注意:cgroup/v1 插件已被弃用,不会再添加新功能。 建议您尽早切换到 cgroup/v2。
-
- SystemdTimeout=<数字>
- 在虚拟机等慢速系统或当 systemd 繁忙时,初始化和准备 slurmd 的作用域可能需要很长时间。 Slurm 将在此时间(以毫秒为单位)内等待作用域准备就绪,超过此时间将失败。仅适用于 cgroup/v2。 默认值为 1000 毫秒。
-
- IgnoreSystemd=<yes|no>
- 仅适用于 cgroup/v2 和开发测试。将避免对 dbus 的任何调用和与 systemd 的联系,而是手动准备所有 cgroup 层次结构。此选项在使用 systemd 的系统中是危险的,因为 cgroup 可能会被 systemd 修改,从而导致作业出现问题。
-
- IgnoreSystemdOnFailure=<yes|no>
- 仅适用于 cgroup/v2 和开发测试。其功能类似于 IgnoreSystemd,但仅在 dbus 调用未成功的情况下。
-
- EnableControllers=<yes|no>
- 仅适用于 cgroup/v2,通常用于开发、测试、在旧内核和/或旧版本 systemd(例如 RHEL8,systemd < 244)上运行,其中并非所有控制器在 cgroup 树中都已启用。通过此参数,slurmd 从 root 的 cgroup.controllers 文件中获取可用控制器 (CgroupMountPoint,默认值为 /sys/fs/cgroup/cgroup.controllers),并使其在 cgroup 树的所有级别中可用,直到达到 Slurm 的 cgroup 叶子。
-
- EnableExtraControllers=<all|controller1[,controller2,...]>
- 这将启用 Slurm 在作业 cgroup 子树中未原生使用的额外控制器。如果与 EnableControllers 结合使用,它将在操作系统根 cgroup 的所有级别中启用它们。可以启用的控制器有 io、pids、rdma、hugetlb 和 misc 或 all。如果它们在系统中不存在,将记录错误。仅适用于 cgroup/v2。
-
任务/cgroup 插件
以下 cgroup.conf 参数用于控制此特定插件的行为:
- AllowedRAMSpace=<数字>
- 将作业/步骤 cgroup 的 RAM 限制为分配内存的百分比。 提供的百分比可以表示为浮点数,例如 101.5。 将 cgroup 的软内存限制设置为分配内存大小,然后将作业/步骤的硬内存限制设置为 (AllowedRAMSpace/100) * 分配内存。如果作业/步骤超过硬限制,则可能会触发内存不足 (OOM) 事件(包括 oom-kill),这些事件将记录到内核日志环缓冲区(Linux 中的 dmesg)。将 AllowedRAMSpace 设置为超过 100 可能会导致系统内存不足 (OOM) 事件,因为它允许作业/步骤分配超过配置节点的内存。建议减少配置节点的可用内存以避免系统 OOM 事件。将 AllowedRAMSpace 设置为低于 100 将导致作业获得的内存少于分配的内存,软内存限制将设置为与硬限制相同的值。 另请参见 ConstrainRAMSpace。 默认值为 100。
-
- AllowedSwapSpace=<数字>
- 将作业 cgroup 的交换空间限制为分配内存的百分比。默认值为 0,这意味着 RAM+Swap 将限制为 AllowedRAMSpace。提供的百分比可以表示为浮点数,例如 50.5。如果超过限制,作业步骤将被终止,并且会将警告消息写入标准错误。 另请参见 ConstrainSwapSpace。 注意: 将 AllowedSwapSpace 设置为 0 不会限制 Linux 内核使用交换空间。要控制内核如何使用交换空间,请参见 MemorySwappiness。
-
- ConstrainCores=<yes|no>
- 如果配置为 "yes",则将允许的核心限制为分配资源的子集。此功能利用 cpuset 子系统。 由于在 HWLOC 的 1.11.5 版本中修复的一个错误,可能需要任务/亲和性插件与任务/cgroup 一起使用,以使其正常工作。 默认值为 "no"。
-
- ConstrainDevices=<yes|no>
- 如果配置为 "yes",则根据 GRES 分配的资源限制作业的允许设备。它使用设备子系统来实现。 默认值为 "no"。
-
- ConstrainRAMSpace=<yes|no>
- 如果配置为 "yes",则通过将内存软限制设置为分配内存,将作业的 RAM 使用限制为分配内存 * AllowedRAMSpace 的硬限制。默认值为 "no",在这种情况下,如果 ConstrainSwapSpace 设置为 "yes",则作业的 RAM 限制将设置为其交换空间限制。必须在 slurm.conf 中设置 CR_*_Memory,以使此参数生效。
另请参见 AllowedSwapSpace、AllowedRAMSpace 和 ConstrainSwapSpace。
注意: 当使用 ConstrainRAMSpace 时,如果步骤中所有进程使用的内存总和超过限制,则内核将触发 OOM 事件,终止步骤中的一个或多个进程。步骤状态将标记为 OOM,但步骤本身将继续运行,步骤中的其他进程也可能继续运行。 这与 OverMemoryKill 的行为不同,后者会终止/取消整个步骤。
注意: 启用时,ConstrainRAMSpace 可能导致每个节点作业吞吐量显著下降。具有高吞吐量要求的站点应仔细权衡每个节点的吞吐量与节点上不受限制的内存使用可能引发的问题之间的权衡。有关进一步讨论,请参见<https://slurm.schedmd.com/high_throughput.html>。
-
- ConstrainSwapSpace=<yes|no>
- 如果配置为 "yes",则限制作业的交换空间使用。 默认值为 "no"。请注意,当设置为 "yes" 且 ConstrainRAMSpace 设置为 "no" 时,AllowedRAMSpace 会自动设置为 100%,以限制 RAM+Swap 的总量为作业的需求加上允许的交换空间百分比。因此,该值同时设置为 RAM 和 RAM+Swap 限制。这意味着在这种情况下,ConstrainRAMSpace 会自动启用,并使用与限制交换空间相同的限制。必须在 slurm.conf 中设置 CR_*_Memory,以使此参数生效。 另请参见 AllowedSwapSpace。
-
- MaxRAMPercent=百分比
- 设置作业 RAM 限制的总 RAM(节点的配置 RealMemory)百分比的上限。这将是应用于未由 Slurm 明确分配内存的作业的内存限制(即,Slurm 的选择插件未配置为管理内存分配)。百分比可以是任意浮点数。默认值为 100。
-
- MaxSwapPercent=百分比
- 设置作业可使用的 RAM+Swap 的上限(以总 RAM 的百分比,配置的节点 RealMemory)。这将是应用于未明确分配内存的作业的交换限制。百分比可以是 0 到 100 之间的任意浮点数。默认值为 100。
-
- MemorySwappiness=<数字>
- 仅适用于 cgroup/v1。 配置内核在作业 cgroup 中交换匿名页面(例如程序数据)与文件缓存页面的优先级。有效值为 0 到 100 之间的整数,包括 0 和 100。值为 0 会阻止内核交换程序数据。值为 100 会对交换文件缓存或匿名页面给予相同的优先级。如果未设置,则将使用内核的默认交换值。ConstrainSwapSpace 必须设置为 yes,以便应用此参数。
-
- MinRAMSpace=<数字>
- 设置由 AllowedRAMSpace 和 AllowedSwapSpace 定义的内存限制的下限(以 MB 为单位)。这可以防止意外创建一个内存 cgroup,其限制过低,以至于 slurmstepd 由于缺乏 RAM 而立即被终止。如果发生这种情况,将不会执行清理,临时文件、套接字和目录可能会保留在节点中。 默认限制为 30M。
-
PROCTRACK/CGROUP 插件
以下 cgroup.conf 参数用于控制此特定插件的行为:
- SignalChildrenProcesses=<yes|no>
- 如果配置为 "yes",则向作业/步骤中的所有子进程发送信号(用于取消、暂停、恢复等)。否则,仅向作业/步骤的父进程发送信号。默认设置为 "no"。
-
特定于发行版的说明
Debian 及其衍生版(例如 Ubuntu)通常默认排除内存和 memsw(交换)cgroups。要包含它们,请将以下参数添加到内核命令行: cgroup_enable=memory swapaccount=1
这通常可以放在 /etc/default/grub 的 GRUB_CMDLINE_LINUX 变量中。更新文件后,必须运行 update-grub 命令。
示例
- /etc/slurm/cgroup.conf:
- 此示例 cgroup.conf 文件显示了启用更常用的 cgroup 强制机制的配置。
-
### # Slurm cgroup 支持配置文件。 ### ConstrainCores=yes ConstrainDevices=yes ConstrainRAMSpace=yes ConstrainSwapSpace=yes
- /etc/slurm/slurm.conf:
- 这些是激活 cgroup 强制机制所需的条目。确保您的 slurm.conf 中的节点定义与通过 "slurmd -C" 显示的配置密切匹配。 应设置 MemSpecLimit,或者 RealMemory 应定义为小于节点实际内存量,以确保所有系统/非作业进程始终有足够的内存。站点还应配置 pam_slurm_adopt 以确保用户无法通过 ssh 逃避 cgroups。
-
### # Slurm cgroup 的配置条目 ### ProctrackType=proctrack/cgroup TaskPlugin=task/cgroup,task/affinity JobAcctGatherType=jobacct_gather/cgroup #可选,用于收集指标 PrologFlags=Contain #也建议使用 X11 标志
版权
版权所有 (C) 2010-2012 劳伦斯利弗莫尔国家实验室。 在劳伦斯利弗莫尔国家实验室制作(参见免责声明)。版权所有 (C) 2010-2022 SchedMD LLC。
此文件是 Slurm 的一部分,资源管理程序。 有关详细信息,请参见 <https://slurm.schedmd.com/>。
Slurm 是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的第 2 版或(根据您的选择)任何更高版本。
Slurm 的分发希望对您有用,但不提供任何担保;甚至没有对适销性或特定用途的隐含担保。有关详细信息,请参见 GNU 通用公共许可证。
另见
slurm.conf(5)
索引
此文档由 man2html 使用手册页创建。
时间:2025 年 7 月 02 日 13:21:55 GMT