投稿指南
一、本刊要求作者有严谨的学风和朴实的文风,提倡互相尊重和自由讨论。凡采用他人学说,必须加注说明。 二、不要超过10000字为宜,精粹的短篇,尤为欢迎。 三、请作者将稿件(用WORD格式)发送到下面给出的征文信箱中。 四、凡来稿请作者自留底稿,恕不退稿。 五、为规范排版,请作者在上传修改稿时严格按以下要求: 1.论文要求有题名、摘要、关键词、作者姓名、作者工作单位(名称,省市邮编)等内容一份。 2.基金项目和作者简介按下列格式: 基金项目:项目名称(编号) 作者简介:姓名(出生年-),性别,民族(汉族可省略),籍贯,职称,学位,研究方向。 3.文章一般有引言部分和正文部分,正文部分用阿拉伯数字分级编号法,一般用两级。插图下方应注明图序和图名。表格应采用三线表,表格上方应注明表序和表名。 4.参考文献列出的一般应限于作者直接阅读过的、最主要的、发表在正式出版物上的文献。其他相关注释可用脚注在当页标注。参考文献的著录应执行国家标准GB7714-87的规定,采用顺序编码制。

利用LSF API实现高性能计算机集群的机时统计(3)

来源:计算机时代 【在线投稿】 栏目:期刊导读 时间:2020-08-03
作者:网站采编
关键词:
摘要:量也是有限的。因此,与根据用户程序对CPU的使用效率计费相比,根据用户对计算资源的实际占用时间来计费要显得更加客观和公平。另外,由于作业调度
量也是有限的。因此,与根据用户程序对CPU的使用效率计费相比,根据用户对计算资源的实际占用时间来计费要显得更加客观和公平。另外,由于作业调度软件自身的局限性,它们对程序CPU time的搜集并不一定准确。比如:对一些嵌套程序就无法统计到CPU time。综上所述,对于一个并行作业,用作业所用的wall time乘以用户占用的计算资源数(通常是CPU数)来计时计费是一种较优的策略。2 软件设计由于Platform LSF 7.5的计算机时统计程序bacct本身并不包含对作业wall time的统计,因此,我们必须通过编程手段来实现对用户作业wall time的统计。幸运的是,Platform LSF提供了应用程序接口API,方便我们编程。本文介绍的软件主要由一个C语言程序和一个Shell脚本程序构成。C语言程序负责利用LSF API库函数进行作业wall time和cpu time的统计,是整个软件的核心部分;脚本程序则在调用C语言程序的基础上分析出各个用户在不同时间段所总共占用计算资源的wall time。该软件的框架图见图1。图1 机时统计软件系统框架图2.1 LSF APIPlatform LSF API包含两种类型的库:一是LSLIB,LSF的基础库,为外部应用使用LSF的基础服务提供支持;另一种是LSBLIB,LSF的批处理库,为外部应用提供作业提交、控制、操作等批量处理的服务接口。由于我们的目的是获取作业运行的wall time,无需LSF基础服务的支持,因此只需用到LSBLIB库。本文介绍的程序主要涉及LSBLIB库中的两个数据结构eventRec、jobFinishLog和一个函数lsb_geteventrec(),另有其他三个数据结构jobNewLog、jobStartLog和jobStatusLog可用作对作业其他信息进行统计的参考。函数lsb_geteventrec()需要读取LSF的lsb.events文件,该文件记录了与用户作业有关的关键信息。在使用LSF API的LSBLIB库函数前,必须进行LSBLIB的初始化。初始化可以通过调用lsb_init()函数来实现,如果调用成功,返回0;否则,返回-1。一般我们会结合lsb_perror()函数将调用不成功的出错信息显示到标准错误终端。整个初始化的过程如下:2.2 C语言编程此部分主要是利用lsb_geteventrec()函数来实现对作业从开始到结束的所用时间进行统计,程序设计时涉及多个 C语言头文件,包括:stdio.h、stdlib.h、string.h、time.h,另外还包括两个 LSF软件所提供的头文件:lsf.h和lsbatch.h。2.2.1 时间格式转换由于该程序操作的主要对象就是时间,然而LSF的bacct程序对时间有一定的格式要求,为了程序设计的统一,我们将此C程序所需读入的时间参数格式确定为“年/月/日/小时:分钟”,如“2013/3/15/0:0”。另外,由于历史原因,计算机的计时系统存在一个千年问题,因此也需要在时间格式转换时加以考虑,下面列出了时间格式转换的主要代码。2.2.2 获取作业wall time此部分需要实现对某个用户在一段时间内累计使用的wall time和CPU time的统计。这里需要提到的是,有些多线程程序在运行时会占用多个CPU资源,这时可能出现CPU time比wall time还高的情况。在这种情况下,我们取两者中较高的值加入到累计机时中。程序的关键部分如下(省去了参数检查、lsb.events检查等部分):2.3 编译、调用及后期处理上述的C语言程序编写好后,需要使用如下命令编译成二进制可执行代码:gcc getwalltime.c-I/lsf-path/include LSF_LIBDIR/libbat.a LSF_LIBDIR/liblsf.a-lm-lnsl-ldl,编译后生成的可执行程序为getwalltime。此程序在运行时需提供三个参数,分别是:开始时间、结束时间和用户名,具体的形式是“getwalltime startTime endTime username”,比如“getwalltime 2013/1/1/0:0 2013/3/15/0:0 user”。外部程序若要调用该程序,方法类似。基于getwalltime程序,我们可以灵活地使用Shell脚本来对各个用户在特定的时间段里的计算机时进行统计,甚至生成具有一定格式的年度、月份统计报表。由于getwalltime除了可以获得作业的wall time之外,也可以获得CPU time,因此,我们可以通过计算CPU time与wall time的比值得到作业的CPU使用效率,一定程度上可以帮助我们了解作业的并行度是否合适,对于提高集群的

文章来源:《计算机时代》 网址: http://www.jsjsdzzs.cn/qikandaodu/2020/0803/328.html



上一篇:没有了
下一篇:基于单片机晶振的守时研究

计算机时代投稿 | 计算机时代编辑部| 计算机时代版面费 | 计算机时代论文发表 | 计算机时代最新目录
Copyright © 2021 《计算机时代》杂志社 版权所有
投稿电话: 投稿邮箱: