You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量Sun Grid Engine中整批作业的完成耗时?

用qacct计算SGE整批作业的总Wall Time

当然可以用qacct来搞定这个需求——它本身没有直接输出整批作业的总耗时,但我们可以换个思路,提取每个作业的关键时间点,自己计算出你要的两种时间范围:从最早提交到最后完成,或者从第一个作业启动到最后一个完成。

核心思路

qacct会输出每个作业的三个关键时间戳(均为Unix秒数格式):

  • qsub_time:作业提交到队列的时间
  • start_time:作业实际开始运行的时间
  • end_time:作业完成的时间

我们只需要找到整批作业中的这几个极值:

  1. 最小的qsub_time(最早提交的作业)和最大的end_time(最晚完成的作业),两者差值就是「从提交到队列清空」的总耗时
  2. 最小的start_time(第一个启动的作业)和最大的end_time,差值就是「从第一个启动到最后完成」的总耗时

具体命令示例

假设你的整批作业有统一的命名前缀(比如my_batch_job_),可以用下面的awk脚本一次性计算两种时间:

qacct -j '*my_batch_job*' | awk '
/^qsub_time/ {
    qsub = $NF
    if (min_qsub == "" || qsub < min_qsub) min_qsub = qsub
}
/^start_time/ {
    start = $NF
    if (min_start == "" || start < min_start) min_start = start
}
/^end_time/ {
    end = $NF
    if (max_end == "" || end > max_end) max_end = end
}
END {
    # 计算秒数并转成时分秒格式
    total_submit = max_end - min_qsub
    total_start = max_end - min_start
    
    printf "从最早提交到最后完成的总耗时: %dh%dm%ds\n", 
           total_submit/3600, (total_submit%3600)/60, total_submit%60
    printf "从第一个启动到最后完成的总耗时: %dh%dm%ds\n", 
           total_start/3600, (total_start%3600)/60, total_start%60
}'

如果你的作业是用任务数组提交的(比如qsub -t 1-50 my_script.sh),直接用数组的主作业ID代替前缀即可:

qacct -j <你的数组作业ID> | awk '...' # 后面的awk脚本和上面一致

注意事项

  1. 权限问题:普通用户只能用qacct查询自己提交的作业,若需要查看其他用户的作业,得用管理员权限执行
  2. 时间戳格式:qacct输出的时间戳是Unix时间(从1970年开始的秒数),直接相减就能得到秒数,脚本里已经帮你转成了更直观的时分秒格式
  3. 过滤作业:如果你的作业没有统一前缀或数组ID,也可以先导出所有作业的时间信息,再手动筛选目标批次:
    qacct -f <你的队列名> | grep -E '(jobname|qsub_time|start_time|end_time)' > job_times.txt
    
    然后从job_times.txt里挑出你需要的作业,再用类似的awk逻辑计算。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:06