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

前言:

lsfMonitor是一款發佈於2017年的開源工具,因爲最近諮詢用法和使用問題的比較多,所以在安裝包中增補了用戶文檔docs/lsfMonitor_user_manual.pdf,用於幫助用戶更快上手,主要內容如下。

 

一、簡介

lsfMonitor主要用於LSF/openlava數據收集、分析、檢索的開源工具,亦可用於EDA license實時信息檢索,可以滿足集成電路設計用戶對於集羣/license的絕大部分信息檢索和常規問題解決需求。
在集成電路設計Linux環境中,關於集羣管理系統和EDA license使用狀況,用戶常常會面臨如下需求:

 

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。

 

可以採用“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的方式拉取代碼包。

 

如果國內的用戶不方便訪問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的內存用量曲線。

 

通過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的進程狀態。

 

此時是以進程樹的方式展現job相關的所有進程,其中核心進程是下面EDA工具的進程。

如果核心進程是R(run)的狀態,那麼狀態時正常的。
如果所有進程都是S(sleep)的狀態,那麼任務可能遇到異常,可以點擊process_tracer工具的PID列對應的pid查看相應進程的工作狀態。比如此時點擊“PID”列的最後一項136015,可以看到這個Novas進程的系統交互細節。

 

進程的系統交互情況可以幫助用戶判斷job運行緩慢的原因,絕大多數情況下,EDA工具運行極端緩慢都是由於工具本身問題導致的。

 

4.2.4 JOBS頁

lsfMonitor的JOBS頁,主要用於批量查看jobs的信息。

 

  • jobs基本信息

可以按照Status / Queue / Host / User來過濾和篩選jobs。
默認jobs的信息來源於命令bjobs -UF -r -u all,部分展示參數意義如下:

 

Host Started Processer Slot Rusage Mem
job執行的機器 job開始RUN的時間 job申請的cpu核數 job申請的slots job申請的memory job實際使用的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的信息。

 

  • hosts基本信息

可以按照Queue來篩選hosts。
默認hosts的信息來源於命令bhosts(host的job信息)、lshosts(host的靜態資源信息)和lsload(host的動態資源信息),部分展示參數意義如下:

 

Queue Ncpus MAX Njobs Ut Maxmem Mem Tmp
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的信息。

 

如果queue中PEND的job數目不爲0,數字會被紅標。

點擊QUEUE列的隊列名,可以展示queue的詳細信息和queue中PEND/JOB數據的歷史變化曲線。

其中queue的PEND/RUN的歷史數據默認展示15天,每天的值都是一個統計均值。

 

4.2.7 LOAD頁

lsfMonitor的LOAD頁,主要用於查看host的負載信息。

 

可以通過“Host”下拉菜單選擇機器,可以通過“Date”下拉菜單選擇時間段(默認是一天)。

其中ut和mem的曲線均可以通過放大鏡按鈕放大指定部位,也可以通過HOME按鈕恢復原狀。

 

4.2.8 LICENSE頁

lsfMonitor的LICENSE頁,主要用於查看EDA license的使用情況。
啓動lsfMonitor前,需要保證當前terminal已經配置LM_LICENSE_FILE等license相關的環境變量。

 

  • license過濾

默認顯示所有license的信息,但是也可以按照“Show”,“Server”,“Vendor”,和“Feature”來過濾License信息。
一般來說,最常用的方法是直接檢索希望查看的license feature名字。(支持模糊檢索)
比如搜索一下verdi相關的license feature使用信息,已知其核心feature名爲“Verdi”,在Feature框輸入,點擊“Filter”按鈕過濾。

 

點擊“In_use”列的數字(如果數字非零),可以查看具體誰使用了這些license。

 

如果某個license feature的START_TIME早於3天前,會標紅。

 

  • license信息

LICENSE頁會展示“Feature Information”和“Expires Information”兩類信息。
其中“Feature Information”指license的使用信息,包括如下內容:

 

Server Vendor Feature Issued In_use
license server名 Vendor daemon名 license feature名 一般認爲是license file中license的總數,包括過期的部分。
在使用的liense feature數目。

 

 

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

 

License Server Feature Num Expires
license server名
license feature名。
因爲license file可以追加內容,所以同一feature可能在同一license server中出現多次。
License feature數目
過期日期
過期會標灰
兩週內過期會標紅

 

 

4.2.9 其它功能

  • 信息刷新功能

lsfMonitor默認展示靜態信息,也就是說,在GUI界面啓動時會抓取瞬時的LSF/Openlava/License信息,後續如果用戶沒有特殊操作,相關信息不會更新。
如果用戶希望一次性或者規律性更新GUI界面上的信息,可以通過菜單欄Setup的Fresh或者Periodic Fresh功能來刷新界面信息。

 

  • 異常job問題檢查

菜單欄Function中包含job pend/slow/fail原因查詢功能。

 

在彈出的Check Issue Reason工具中,輸入jobid,點擊“Check”按鈕,如果顯示相關問題的檢測結果。

 

五、輔助工具

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. 變更歷史

日期 版本 變更描述 源代碼變更
2017 1.0 發佈第一個版本openlavaMonitor,僅支持openlava。  
2020 1.1 更名lsfMonitor,增加對LSF的支持。  
2022 1.2 增加對LICENSE信息獲取的支持。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章