luoshuiqingfeng的个人空间 https://blog.eetop.cn/640161 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

【OPEN IC】之lsfMonitor:openlava/LSF一站式信息解决方案

已有 879 次阅读| 2023-2-24 15:11 |个人分类:开源工具|系统分类:芯片设计| 开源, LSF, openlava, license

前言:

lsfMonitor是一款发布于2017年的开源工具,因为最近咨询用法和使用问题的比较多,所以在安装包中增补了用户文档docs/lsfMonitor_user_manual.pdf,用于帮助用户更快上手,主要内容如下。


一、简介

lsfMonitor主要用于LSF/openlava数据收集、分析、检索的开源工具,亦可用于EDA license实时信息检索,可以满足集成电路设计用户对于集群/license的绝大部分信息检索和常规问题解决需求。
在集成电路设计Linux环境中,关于集群管理系统和EDA license使用状况,用户常常会面临如下需求:
1.png

lsfMonitor就是为如上需求提供一站式解决方案。


二、环境依赖

2.1 操作系统依赖

lsfMonitor的开发和测试操作系统为CentOS Linux release 7.9.2009 (Core),这也是IC设计常用的操作系统版本之一。
centos6/centos7/centos8,及对应的redhat版本应该都可以运行,主要的潜在风险在于系统库版本差异可能会影响部分组件的运行。

建议在centos7.9操作系统下使用。


2.2 python版本依赖

lsfMonitor基于python开发,其开发和测试的python版本为python3.8.8,推荐使用Anaconda3-2021.05以解决库依赖问题。

不同版本的python可能会有python库版本问题,按照系统要求安装对应版本的python库即可解决。


2.3 集群管理工具

lsfMonitor依赖LSF/Oenlava集群管理系统,暂不支持其它集群管理系统。

LSF 9.*/10.*的版本支持较好,Openlava几个版本间output message有一定差异,并不是所有版本都能够很好支持。


三、工具安装及配置

3.1 工具下载

lsfMonitor的github路径位于 https://github.com/liyanqing1987/lsfMonitor。
1677226123392433.png


可以采用“git clone https://github.com/liyanqing1987/lsfMonitor.git”的方式拉取源代码。

[liyanqing@cmp1 test]$ git clone https://github.com/liyanqing1987/lsfMonitor.git 
Cloning into 'lsfMonitor'...
remote: Enumerating objects: 709, done.
remote: Counting objects: 100% (281/281), done.
remote: Compressing objects: 100% (171/171), done.
remote: Total 709 (delta 177), reused 208 (delta 109), pack-reused 428
Receiving objects: 100% (709/709), 908.67 KiB | 594.00 KiB/s, done.
Resolving deltas: 100% (442/442), done.


也可以在lsfMonitor的github页面上,Code -> Download ZIP的方式拉取代码包。

1677226635684170.png


如果国内的用户不方便访问github,也可以通过如下gitee https://gitee.com/liyanqing1987/ic_flow_platform获取lsfMonitor的源代码。


3.2 工具安装

工具安装之前,首先参照第二章“环境依赖”满足lsfMonitor的环境依赖关系。
安装包下的文件和目录如下。
[liyanqing.1987@n212-206-207 tools]$ cd lsfMonitor/ 
[liyanqing.1987@n212-206-194 lsfMonitor]$ ls
db docs install.py lib LICENSE monitor README requirements.txt


确认python版本正确,并基于安装包中的requirements.txt安装python依赖库。

[root@ic-admin1 licenseMonitor]# pip3 install -r requirements.txt 
Looking in indexes: https://bytedpypi.byted.org/simple/
Requirement already satisfied: pexpect==4.8.0 in /ic/software/tools/python3/3.8.8/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (4.8.0)
Requirement already satisfied: ptyprocess>=0.5 in /ic/software/tools/python3/3.8.8/lib/python3.8/site-packages (from pexpect==4.8.0->-r requirements.txt (line 1)) (0.7.0)


在安装目录下,使用命令“python3 install.py”安装lsfMonitor。

[root@ic-admin1 lsfMonitor]# python3 install.py 
>>> Check python version.
    Required python version : (3, 5)
    Current python version : (3, 8)

>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/bin/bmonitor".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/bin/bsample".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/check_issue_reason".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/seedb".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/process_tracer".
>>> Generate script "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/tools/show_license_feature_usage".
>>> Generate config file "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/monitor/conf/config.py".

Done, Please enjoy it.


3.3 工具配置

安装目录下主要的配置文件为monitor/conf/config.py,用于配置工具的一些基本设置和验证规则。
安装后默认配置如下,大多数都需要重新配置。
# Specify the database directory. 
db_path = "/ic/data/usr/liyanqing.1987/tools/lsfMonitor/db"

# Specify lmstat path, example "/*/*/bin".
lmstat_path = ""

# Specify lmstat bsub command, example "bsub -q normal -Is".
lmstat_bsub_command = ""
db_path:lsfMonitor需要保存部分LSF数据,保存为sqlite类型的文本数据库,db_path用于指定数据库的顶层路径。
lmstat_path:lsfMonitor通过工具lmstat获取EDA license信息,此处用于配置lmstat工具的路径。
lmstat_bsub_command:lsfMonitor一般在Linux环境的login server上运行,而login server一般会通过iptables设置禁止lmstat等EDA相关的工具运行,所以执行lmstat的时候需要bsub出去,此处用于指定执行lmstat时候的bsub命令。


一个使用的demo配置如下。

# Specify the database directory. 
db_path = "/ic/software/cad_data/it/lsfMonitor/db"

# Specify lmstat path.
lmstat_path = "/ic/software/synopsys/scl/2021.03/linux64/bin"

# Specify lmstat bsub command.
lmstat_bsub_command = "bsub -q normal -Is"


四、工具使用

lsfMonitor工具包括“数据采集”和“数据展示”两大部分,对应的执行脚本分别为bsample和bmonitor,均位于lsfMonitor安装路径下的monitor/bin子目录中。

4.1 数据采集 bsample

bsample用于采集LSF/openlava的job/queue/host/load/user信息。
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/bin/bsample -h 
usage: bsample.py [-h] [-j] [-q] [-H] [-l] [-u] [-i INTERVAL]

optional arguments:
  -h, --help show this help message and exit
  -j, --job Sample running job info with command "bjobs -u all -r -UF".
  -q, --queue Sample queue info with command "bqueues".
  -H, --host Sample host info with command "bhosts".
  -l, --load Sample host load info with command "lsload".
  -u, --user Sample user info with command "busers".
  -i INTERVAL, --interval INTERVAL
        Specify the sampling interval, unit is second. Sampling only once by default".
--help: 打印帮助信息。
--job: 采集job信息并存储。
--queue: 采集queue信息并存储。
--host: 采集host信息并存储。
--load: 采集host load信息并存储。
--user: 采集user信息并存储。
--interval: 指定持续采样模式下的采样间隔。


我们推荐用crontab来定时采样(Jenkins类似),采样时间为5分钟,只采集job/queue/load信息,下面是一个示例。

# For lsfMonitor 
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -j
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -q
*/5 * * * * /ic/software/cad_tools/it/lsfMonitor/monitor/bin/bsample -l


4.2 数据展示 bmonitor

4.2.1 工具载入

lsfMonitor的核心工具叫做bmonitor,是一个图形界面工具,其载入方式有多种。
  • 直接引用bmonitor绝对路径。

  • 采用modules管理和加载环境,引用bmonitor脚本名即可。

  • 将bmonitor连接到LSF的bsub脚本路径中,引用bmonitor脚本名即可。


推荐第三种方式,下面是具体效果。

[liyanqing.1987@n212-206-207 ~]$ which bmonitor 
/ic/software/tools/lsf/10.1/linux2.6-glibc2.3-x86_64/bin/bmonitor


4.2.2 帮助信息

直接执行bmonitor会启动图形界面。
执行“bmonitor -h”则可以查看bmonitor的帮助信息。
bmonitor的参数主要用于初始化部分信息,不过这些参数都可以在bmonitor启动后设置。
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/bin/monitor -h 
usage: bmonitor.py [-h] [-j JOBID] [-u USER] [-f FEATURE] [-t {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}] [-dl]

optional arguments:
  -h, --help show this help message and exit
  -j JOBID, --jobid JOBID
        Specify the jobid which show it's information on "JOB" tab.
  -u USER, --user USER
       Specify the user show how's job information on "JOBS" tab.
  -f FEATURE, --feature FEATURE
        Specify license feature which you want to see on "LICENSE" tab.
  -t {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}, --tab {JOB,JOBS,HOSTS,QUEUES,LOAD,LICENSE}
       Specify current tab, default is "JOB" tab.
  -dl, --disable_license
        Disable license check function.
--help: 打印帮助信息。
--jobid: 指定jobid,用于切换到JOB页并直接显示指定jobid的信息。
--user: 指定user,用于切换到JOBS页并显示指定用户的所有job信息。
--feature: 指定license feature,用于切换到LICENSE页并显示指定license feature的信息。
--tab {JOB, JOBS, HOSTS, QUEUES, LOAD, LICENSE}: 指定页面,会将bmonitor打开到指定GUI页面。
--disable_license: 启动的时候不执行license信息获取步骤,以加快GUI打开速度。


4.2.3 JOB页

lsfMonitor的JOB页,主要用于查看指定job的详细信息,以及job内存用量的历史曲线。


  • 获取job详细信息和内存用量曲线

在Job框输入jobid,点击Check按钮,可以查看指定job的详细信息(来源于bjob -UF <JOBID>)和job的内存用量曲线。
1677226697232125.png


通过job的详细信息,可以帮助用户debug如下常见问题。

job PEND原因 :如果job是PEND状态,可以从详细信息中的"PENDING REASONS:"看到job PEND的原因。
job FAIL原因 :如果job是EXIT状态,可以从退出码判断job异常退出是系统原因还是工具原因(退出码小于128为工具原因,大于128为系统原因)。

内存超量问题 :如果job是EXIT状态,且Mem值大于Rusage值,说明有潜在可能是因为内存(不足)问题导致了job被kill。


  • 追踪job进程(trace job slow issue)

如果感觉job运行过于缓慢,可以点击JOB页的“Process Tracer”按钮追踪job的进程状态。
1677226718770501.png


此时是以进程树的方式展现job相关的所有进程,其中核心进程是下面EDA工具的进程。

如果核心进程是R(run)的状态,那么状态时正常的。
如果所有进程都是S(sleep)的状态,那么任务可能遇到异常,可以点击process_tracer工具的PID列对应的pid查看相应进程的工作状态。比如此时点击“PID”列的最后一项136015,可以看到这个Novas进程的系统交互细节。
1677226744991967.png


进程的系统交互情况可以帮助用户判断job运行缓慢的原因,绝大多数情况下,EDA工具运行极端缓慢都是由于工具本身问题导致的。


4.2.4 JOBS页

lsfMonitor的JOBS页,主要用于批量查看jobs的信息。

1677226804354296.png


  • jobs基本信息

可以按照Status / Queue / Host / User来过滤和筛选jobs。
默认jobs的信息来源于命令bjobs -UF -r -u all,部分展示参数意义如下:


HostStartedProcesserSlotRusageMem
job执行的机器job开始RUN的时间job申请的cpu核数job申请的slotsjob申请的memoryjob实际使用的memory



  • jobs特殊操作/显示

点击Job列的jobid,可以直接跳转到JOB页,并展示选中job的信息。
Mem列,点击标题,可以让job按照memory用量排序。
如果Rusage(job的内存申请量)没有设,或者Rusage小于Mem(job的实际内存用量)的值,Mem值会显示红色,对应的job设置都是不规范的,需要修正。

如果Status列为PEND,点击PEND,可以通过工具“check_issue_reason”来查看job PEND的原因。


4.2.5 HOSTS页

lsfMonitor的JOBS页,主要用于查看所有hosts的信息。

1677226827786674.png


  • hosts基本信息

可以按照Queue来筛选hosts。
默认hosts的信息来源于命令bhosts(host的job信息)、lshosts(host的静态资源信息)和lsload(host的动态资源信息),部分展示参数意义如下:


QueueNcpusMAXNjobsUtMaxmemMemTmp
host所属的队列host的cpu物理核数host接收job的最大数目host上job的数目host的cpu使用率host的内存大小host的内存可用量host的/tmp空间可用量



  • hosts特殊操作/显示

点击Host列的服务器名,可以跳转到LOAD页,展示指定host的cpu和memory历史用量曲线。
点击Njobs列的数字,可以跳转到JOBS也,展示指定host上所有的RUN/PEND jobs。
数字内容的列,都可以通过点击列标题进行排序。
如果host的状态异常(unavail/unreach/closed_LIM),Status状态会显示为红色。
如果host的Ut使用率超过90%,Ut值会显示为红色,表示cpu过载。
如果host的memory用量超过90%,Mem值会显示为红色,标识memory过载。

如果host的tmp可用量变为0,Tmp值会显示为红色,标识/tmp过载。


4.2.6 QUEUES页

lsfMonitor的QUEUES页,主要用于查看所有queue的信息。
1677226869888950.png


如果queue中PEND的job数目不为0,数字会被红标。

点击QUEUE列的队列名,可以展示queue的详细信息和queue中PEND/JOB数据的历史变化曲线。

其中queue的PEND/RUN的历史数据默认展示15天,每天的值都是一个统计均值。


4.2.7 LOAD页

lsfMonitor的LOAD页,主要用于查看host的负载信息。
1677227010949651.png


可以通过“Host”下拉菜单选择机器,可以通过“Date”下拉菜单选择时间段(默认是一天)。

其中ut和mem的曲线均可以通过放大镜按钮放大指定部位,也可以通过HOME按钮恢复原状。


4.2.8 LICENSE页

lsfMonitor的LICENSE页,主要用于查看EDA license的使用情况。
启动lsfMonitor前,需要保证当前terminal已经配置LM_LICENSE_FILE等license相关的环境变量。

1677227045442447.png


  • license过滤

默认显示所有license的信息,但是也可以按照“Show”,“Server”,“Vendor”,和“Feature”来过滤License信息。
一般来说,最常用的方法是直接检索希望查看的license feature名字。(支持模糊检索)
比如搜索一下verdi相关的license feature使用信息,已知其核心feature名为“Verdi”,在Feature框输入,点击“Filter”按钮过滤。
1677227085737876.png


点击“In_use”列的数字(如果数字非零),可以查看具体谁使用了这些license。

1677227105945347.png


如果某个license feature的START_TIME早于3天前,会标红。


  • license信息

LICENSE页会展示“Feature Information”和“Expires Information”两类信息。
其中“Feature Information”指license的使用信息,包括如下内容:


ServerVendorFeatureIssuedIn_use
license server名Vendor daemon名license feature名一般认为是license file中license的总数,包括过期的部分。
在使用的liense feature数目。



“Expires Information”值license的过期信息,包括如下内容:


License ServerFeatureNumExpires
license server名
license feature名。
因为license file可以追加内容,所以同一feature可能在同一license server中出现多次。
License feature数目
过期日期
过期会标灰
两周内过期会标红



4.2.9 其它功能

  • 信息刷新功能

lsfMonitor默认展示静态信息,也就是说,在GUI界面启动时会抓取瞬时的LSF/Openlava/License信息,后续如果用户没有特殊操作,相关信息不会更新。
如果用户希望一次性或者规律性更新GUI界面上的信息,可以通过菜单栏Setup的Fresh或者Periodic Fresh功能来刷新界面信息。

1677227122580119.png


  • 异常job问题检查

菜单栏Function中包含job pend/slow/fail原因查询功能。
1677227137521920.png


在弹出的Check Issue Reason工具中,输入jobid,点击“Check”按钮,如果显示相关问题的检测结果。

1677227155475063.png


五、辅助工具

lsfMonitor自带一些工具,大多数是其功能组件,也有部分是可以单独使用的工具。
[liyanqing.1987@n212-206-207 lsfMonitor]$ ls monitor/tools/ 
check_issue_reason check_issue_reason.py message.py process_tracer process_tracer.py seedb seedb.py show_license_feature_usage show_license_feature_usage.py
check_issue_reason: 组件,图形界面工具,查看指定job PEND/FAIL/SLOW的原因。
message.py: 组件,图形界面工具,显示指定信息。
process_tracer: 组件,图形界面工具,追踪指定process或jobid的进程树。
seedb: 独立工具,查看sqlite3数据库内容,lsfMonitor即使用sqlite3保存相关数据。

show_license_feature_usage: 组件,图形界面工具,查看license feature的使用情况。


5.1 seedb

seedb是查看sqlite3文本数据库内容的工具,其帮助信息如下:
[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/tools/seedb -h 
usage: seedb.py [-h] -d DATABASE [-t TABLES [TABLES ...]] [-k KEYS [KEYS ...]] [-n NUMBER]

optional arguments:
  -h, --help show this help message and exit
  -d DATABASE, --database DATABASE
        Required argument, specify the datebase file.
  -t TABLES [TABLES ...], --tables TABLES [TABLES ...]
        Specify the tables you want to review, make sure the tables exist.
  -k KEYS [KEYS ...], --keys KEYS [KEYS ...]
        Specify the table keys you want to review, make sure the table keys exist.
  -n NUMBER, --number NUMBER
        How many lines you want to see.
--database:指定sqlite3数据库文件。
--tables:指定想查看的数据库tables。
--keys:指定想查看的table关键词。
--number:指定查看的行数,如果内容很多,可以截取有限的内容查看。


下面是一个使用示例,查看load.db数据库中,查看load_n212-206-211表中mem列的前五行数据。

[liyanqing.1987@n212-206-207 lsfMonitor]$ monitor/tools/seedb -d /ic/software/cad_data/it/lsfMonitor/db/monitor/load.db -t load_n212-206-211 -k mem -n 5 
DB FILE : /ic/software/cad_data/it/lsfMonitor/db/monitor/load.db
TABLE : load_n212-206-211
========
mem
----
911.9G
910G
908.1G
906G
904.6G
========


附录

附1. 变更历史

日期版本变更描述源代码变更
20171.0发布第一个版本openlavaMonitor,仅支持openlava。
20201.1更名lsfMonitor,增加对LSF的支持。
20221.2增加对LICENSE信息获取的支持。



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 19

    粉丝
  • 12

    好友
  • 15

    获赞
  • 0

    评论
  • 542

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 10:29 , Processed in 0.015844 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部