sdiag

节:Slurm 命令 (1)
更新:Slurm 命令
索引

 

名称

sdiag - Slurm 的调度诊断工具

 

概要

sdiag

 

描述

sdiag 显示与 slurmctld 执行相关的信息:线程、代理、作业和调度算法。其目的是获取 slurmctld 行为的数据,以帮助调整配置参数或队列策略。其主要原因是了解 Slurm 在高吞吐量系统下的行为。

它有两种执行模式。默认模式 --all 显示几个计数器和后面解释的统计信息,还有另一个执行选项 --reset 用于重置这些值。

默认情况下,值在 UTC 时间的午夜时重置。

第一块信息与全局 slurmctld 执行相关:

服务器线程数
当前活动的 slurmctld 线程数。高数量意味着处理作业提交、作业调度、作业完成等事件的高负载。如果这个值经常接近 MAX_SERVER_THREADS,则可能指向潜在的瓶颈。

代理队列大小
Slurm 设计时考虑了可扩展性,向数千个节点发送消息并不是一项简单的任务。代理机制有助于控制 slurmctld 和 slurmd 守护进程之间的通信,以尽力而为。此值表示内部重试列表中排队的外发 RPC 请求的数量。

代理数量
代理线程的数量。每个代理线程可以同时创建最多 2 + AGENT_THREAD_COUNT 个活动线程。

代理线程数
所有代理线程创建的活动线程的总数。

DBD 代理队列大小
Slurm 将发送给 SlurmDBD 的消息排队,并在单独的线程中处理它们。如果 SlurmDBD 或数据库出现故障,则此数字将增加。

最大队列大小在 slurm.conf 中通过 MaxDBDMsgs 配置。如果这个数字开始增长超过最大队列大小的一半,则应立即调查 slurmdbd 和数据库。

提交的作业
自上次重置以来提交的作业数量

已启动的作业
自上次重置以来已启动的作业数量。这包括回填作业。

已完成的作业
自上次重置以来已完成的作业数量。

已取消的作业
自上次重置以来已取消的作业数量。

失败的作业
由于 slurmd 或其他内部问题,自上次重置以来失败的作业数量。

作业状态时间戳:
列出收集以下作业状态计数的时间戳。

待处理作业:
在上述时间戳给定时间的待处理作业数量。

正在运行的作业:
在上述时间戳给定时间正在运行的作业数量。

下一块信息与基于作业优先级的主要调度算法相关。调度周期意味着获取 job_write_lock 锁,然后尝试为待处理作业获取资源,从优先级最高的作业开始,按降序进行。一旦某个作业无法获取资源,循环将继续,但仅针对请求其他分区的作业。具有依赖关系或受到账户限制的作业不会被处理。

上一个周期
上一个调度周期的时间(微秒)。

最大周期
自上次重置以来任何调度周期的最大时间(微秒)。

总周期
自上次重置以来所有调度周期的总运行时间(微秒)。调度是定期执行的,并且(根据配置)在提交作业或完成作业时执行。

平均周期
自上次重置以来所有调度周期的平均时间(微秒)。

平均深度周期
周期深度的平均值。深度指的是在一个调度周期内处理的作业数量。

每分钟周期
每分钟的调度执行计数。

上一个队列长度
待处理作业队列的长度。

下一块信息与回填调度算法相关。回填调度周期意味着获取作业、节点和分区对象的锁,然后尝试为待处理作业获取资源。作业根据优先级处理。如果某个作业无法获取资源,算法会计算它何时能够获取资源,从而为作业获取未来的开始时间。然后处理下一个作业,算法尝试为该作业获取资源,但避免影响之前的作业,如果当前没有可用资源,则再次计算未来的开始时间。回填算法在处理每个新作业时需要更多时间,因为优先级更高的作业不能受到影响。算法本身采取措施以避免长时间的执行周期,并防止锁定时间过长。

自上次 Slurm 启动以来的总回填作业数
自上次 Slurm 启动以来由于回填而启动的作业数量。

自上次统计周期开始以来的总回填作业数
自上次重置统计以来由于回填而启动的作业数量。默认情况下,这些值在 UTC 时间的午夜时重置。

总回填异构作业组件
自上次 Slurm 启动以来由于回填而启动的异构作业组件数量。

总周期
自上次重置以来的回填调度周期数量

上一个周期时间
上一个回填调度周期发生的时间,格式为 "星期 月 月日 小时:分钟.秒 年"

上一个周期
上一个回填调度周期的时间(微秒)。 它仅计算执行时间,去除在调度周期内执行的延迟时间。 请注意,在延迟时间内释放锁,以便其他工作可以继续进行。

最大周期
自上次重置以来最大回填调度周期执行时间(微秒)。 它仅计算执行时间,去除在调度周期内执行的延迟时间。 请注意,在延迟时间内释放锁,以便其他工作可以继续进行。

平均周期
自上次重置以来回填调度周期的平均时间(微秒)。

上一个深度周期
在上一个回填调度周期中处理的作业数量。它计算每个作业,即使该作业由于依赖关系或限制而无法启动。

上一个深度周期(尝试调度)
在上一个回填调度周期中处理的作业数量。它仅计算有机会使用可用资源启动的作业。这些作业消耗的调度时间比由于依赖关系或限制而无法启动的作业更多。

深度平均
自上次重置以来在所有回填调度周期中处理的作业的平均数量。 在回填调度程序检查时被发现不符合运行条件的作业不计入(例如,提交到多个分区并已启动的作业,达到 QOS 或账户限制的作业,如账户最大运行作业数等)。

深度平均(尝试调度)
回填调度程序尝试调度的深度平均子集。

上一个队列长度
待回填算法处理的作业数量。 一个作业在每个请求的分区中计算一次。 待处理的作业数组通常计为一个作业(已启动/重新排队或单独修改的作业数组任务将已经有单独的作业记录,并且每个都计为一个单独的作业)。

队列长度平均
待回填算法处理的作业的平均数量。 一个作业在每个请求的分区中计算一次。 待处理的作业数组通常计为一个作业(已启动/重新排队或单独修改的作业数组任务将已经有单独的作业记录,并且每个都计为一个单独的作业)。

上一个表大小
回填调度程序在其最后一次迭代中测试的不同时间段的数量。

平均表大小
回填调度程序测试的不同时间段的平均数量。 较大的计数会增加回填操作所需的时间。 表的大小受许多调度参数的影响,包括:bf_min_age_reserve、bf_min_prio_reserve、bf_resolution 和 bf_window。

对 gettimeofday() 的 1000 次调用的延迟
在控制器启动时测量的对 gettimeofday() 系统调用的 1000 次调用的延迟(微秒)。

下一块信息报告最常发出的远程过程调用(RPC),即为 Slurmctld 守护进程执行某些操作而发出的调用。 第四块报告按消息类型发出的 RPC。 您需要通过查看 src/common/slurm_protocol_defs.h 文件中的 RPC 代码来查找这些 RPC 代码。 报告包括每个 RPC 被调用的次数、所有这些 RPC 消耗的总时间以及每个 RPC 消耗的平均时间(微秒)。 第五块报告按用户 ID 发出的 RPC,包括他们发出的 RPC 总数、所有这些 RPC 消耗的总时间以及每个 RPC 消耗的平均时间(微秒)。 RPC 统计信息在 slurmctld 进程的生命周期内收集,除非明确 --reset

第六块信息,标记为待处理 RPC 统计信息,显示有关 slurmctld 代理队列中待处理外发 RPC 的信息。 此块的第一部分显示队列中的 RPC 类型及其计数。第二部分显示代理队列中最多 25 个单独的待处理 RPC,包括类型和目标主机列表。 此信息是缓存的,仅在 30 秒间隔内刷新。

 

选项

-a, --all
获取并报告信息。这是默认的操作模式。

-M, --cluster=<字符串>
要发出命令的集群。只能指定一个集群名称。 请注意,slurmdbd 必须处于运行状态,以使此选项正常工作,除非在配置了 FederationParameters=fed_display 的联合环境中运行。

-h, --help
打印选项描述并退出。

--json, --json=列表, --json=<数据解析器>
使用默认数据解析器插件或显式数据解析器及参数以 JSON 格式转储信息。排序和格式化参数将被忽略。

-r, --reset
将调度程序和 RPC 计数器重置为 0。仅支持 Slurm 操作员和管理员。

-i, --sort-by-id
按消息类型 ID 和用户 ID 对远程过程调用(RPC)数据进行排序。

-t, --sort-by-time
按总运行时间对远程过程调用(RPC)数据进行排序。

-T, --sort-by-time2
按平均运行时间对远程过程调用(RPC)数据进行排序。

--usage
打印选项列表并退出。

-V, --version
打印当前版本号并退出。

--yaml, --yaml=列表, --yaml=<数据解析器>
使用默认数据解析器插件或显式数据解析器及参数以 YAML 格式转储信息。排序和格式化参数将被忽略。

 

性能

执行 sdiag 会向 slurmctld 发送远程过程调用。如果来自 sdiag 或其他向 slurmctld 守护进程发送远程过程调用的 Slurm 客户端命令的调用过于频繁,可能会导致 slurmctld 守护进程的性能下降,甚至可能导致服务拒绝。

请勿在 shell 脚本或其他程序的循环中运行 sdiag 或其他向 slurmctld 发送远程过程调用的 Slurm 客户端命令。确保程序将对 sdiag 的调用限制在收集所需信息的最低限度。

 

环境变量

某些 sdiag 选项可以通过环境变量设置。这些环境变量及其对应的选项如下所示。 (注意:命令行选项将始终覆盖这些设置。)

SLURM_CLUSTERS
--cluster 相同

SLURM_CONF
Slurm 配置文件的位置。

SLURM_JSON
控制 JSON 序列化:
compact
尽可能紧凑地输出 JSON。

pretty
以美观的格式输出 JSON,以便于阅读。

SLURM_YAML
控制 YAML 序列化:
compact 尽可能紧凑地输出 YAML。

pretty 以美观的格式输出 YAML,以便于阅读。

 

版权

版权所有 (C) 2010-2011 巴塞罗那超级计算中心。
版权所有 (C) 2010-2022 SchedMD LLC。

Slurm 是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;无论是许可证的第 2 版,还是(根据您的选择)任何更高版本。

Slurm 的分发是希望它会有用,但不提供任何担保;甚至没有对适销性或特定用途的适用性的隐含担保。有关更多详细信息,请参见 GNU 通用公共许可证。

 

另见

sinfo(1), squeue(1), scontrol(1), slurm.conf(5),


 

索引

名称
概要
描述
选项
性能
环境变量
版权
另见

此文档由 man2html 使用手册页创建。
时间:2025年7月2日 13:21:55 GMT