生信log

生信log37|如何在HPC计算节点上获取进程资源消耗的信息及合

2023-06-20  本文已影响0人  小周的万用胶囊

有使用超算或者服务器的同学应该会接触过超算投递系统,在提交生信任务时,我们需要设置好资源,比如说cpu用多少,内存给多少。学生时代的我是有多大内存提供就设多大内存,有多少CPU数提供就设多少CPU,经过一段时间使用超算的体验发现,资源还是要合理分配才能达到最大的效率,也避免任务因为申请超额的资源而被管理员kill掉或者出现节点宕机的情况(最重要,省钱!)。

0、前言

为什么要这么做?

思路

1、Nextflow资源监控模式

nextflow run <pipeline name> -with-trace

2、结果解读及脚本计算公式

%cpu:进程占用 CPU 百分比

计算公式:

CPU(\%) = \frac{进程等待时间*100}{总CPU时间}=\frac{ 100 * (after \_proc\_cpu\_total – prev\_proc\_cpu\_total) }{after\_cpu\_total – prev\_cpu\_total}

prev_proc_cpu_total = utime + stime + cutime + cstime
after_proc_cpu_total = utime + stime + cutime + cstime
下面的脚本中,如果是多核心系统还需要乘以cpu核心数

process_total_time=$(2> /dev/null < /proc/$pid/stat awk '{printf "%.0f", ($14+$15+$16+$17)*10 * cpu_num }' || echo -n 'X')
cpu_total=$(grep '^cpu ' /proc/stat |awk '{sum=$2+$3+$4+$5+$6+$7+$8+$9+$10; print sum}')

vmem:进程使用的虚拟内存大小,这个值可以直接获取,只需进行字节的转化
vf(virtual\_free)= \frac{vmem}{1024 * 1024}

3、验证方法及SGE查看计算节点资源消耗的方法

ssh -t remotehost top -u userid #即用户名
获取计算节点上的进程信息 image.png
# 列出全部的job
qacct -o user -d 1 -j
# 指定job
qacct -o user -d 1 -j job_id
利用qacct查看job的使用的虚拟内存

4、结果解析及资源分配确定

最后回答开头的问题即“到底要给一个脚本任务分配多少资源”

在qsub系统中如何设置vf(virtual_free)大小,还有smp的数量

smp数量设置

smp\_num = \frac{\%CPU}{100} (个)

vf虚拟内存大小设置
vf(virtual\_free)= \frac{vmem}{1024 * 1024} (GB)


参考
SGE virtual free设置教程
top
cpu-usage-calculation
中文版解说
参考3
stackoverflow cpu%解释

推荐阅读
生信Log32|NEXTFLOW资源统计bash脚本知识统计一览

上一篇 下一篇

猜你喜欢

热点阅读