概述

频繁的 LSF 查询活动可能给管理主机带来沉重负载,导致 CPU、内存和网络带宽的竞争。LSF 提供了性能监控和诊断工具来帮助识别和解决查询性能问题。

性能监控工具

工具 说明
badmin perfmon 采样三种主要查询操作(bjobs、bhosts、bqueues)
badmin diagnose -c query 跟踪查询来源进行故障排除

步骤一:检查查询负载

启用性能监控

1
badmin perfmon start

查看性能数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% badmin perfmon view
Performance monitor start time: Thu Sep  26 07:00:08
End time of last sample period: Thu Sep  26 12:56:48
Sample period:                  60 Second(s)

------------------------------------------------------------------------------
Metrics                                Last     Max     Min     Avg     Total
------------------------------------------------------------------------------
Processed requests: mbatchd           13568   20085    8627   14244   5080543
Job information queries                2311    4969    1938    2989   1066407
Host information queries                  6      73       1      12      4611
Queue information queries                 9      42       4      10      3885
Job submission requests                1703    2518     554    1525    544160
...

默认启用性能监控

lsb.params 中配置:

1
2
SCHED_METRIC_ENABLE=Y
SCHED_METRIC_SAMPLE_PERIOD=60

步骤二:启用查询诊断

如果当前查询负载高于历史平均值,启用查询诊断获取详细查询记录。

方法一:动态查询诊断

1
2
% badmin diagnose -c query -f /tmp/queryload -d 60
Dynamic query diagnosis started and will last 60 minutes.

方法二:默认启用查询诊断

lsb.params 中配置:

1
2
ENABLE_DIAGNOSE=query
DIAGNOSE_LOGDIR=/tmp

关闭查询诊断

1
badmin diagnose -c query -o

步骤三:分析查询数据

查询日志格式

LSF 为每个查询请求记录以下字段:

字段 说明
Time stamp LSF 处理请求的时间
Command LSF 命令(API 映射到命令)
User 发起请求的用户
Host 发起请求的主机
Data Size 返回给客户端的数据字节数
Command options 查询命令选项

查询日志示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% bjobs 2 > /dev/null
% bjobs -uall -l |wc
% bhosts |wc
% bhosts -l |wc
% bqueues |wc
% bqueues -lr |wc
% cat /tmp/queryload.querylog.hostA
Sep 26 17:33:37 2022 bjobs,lsfadmin,hostA,124,0x1A
Sep 26 17:34:37 2022 bjobs,lsfadmin,hostA,755635420,0xC00010
Sep 26 17:34:52 2022 bhosts,lsfadmin,hostA,2975544,-
Sep 26 17:34:58 2022 bhosts,lsfadmin,hostA,2975524,-
Sep 26 17:34:58 2022 bhosts,lsfadmin,hostA,6482088,0x0
Sep 26 17:35:13 2022 bqueues,lsfadmin,hostA,29040,0x401
Sep 26 17:35:23 2022 bqueues,lsfadmin,hostA,32598264,0x1

解读:第二条记录显示 bjobs -uall -l 发送了 720MB 作业数据(集群中超过50万个作业)

分析技巧

  1. 按主机排序:识别执行频繁查询的客户端脚本
  2. 按用户排序:检查谁产生了最多查询
  3. 按数据大小排序:大数据传输会占用管理主机的网络带宽

优化措施

1. 启用多线程查询

对于大型集群(千台主机以上)和大作业量(数十万作业),建议启用多线程 mbatchd 查询:

1
2
3
# lsf.conf
LSB_QUERY_PORT=<free_port_number>
LSB_QUERY_ENH=y

2. 设置最大并发查询阈值

限制 mbatchd 可以处理的作业查询数量:

1
2
# lsb.params
MAX_CONCURRENT_QUERY=50

3. 避免使用重量级查询

使用 bjobs -o 替代 bjobs -l

1
2
3
4
5
6
7
# 推荐:仅获取需要的字段
% bjobs -o "jobid stat queue job_group delimiter='|'" 3
JOBID|STAT|QUEUE|JOB_GROUP
3|RUN|low_normal|/myproj/user1

# 避免:获取所有作业信息
% bjobs -l

使用 badmin showstatus 获取集群状态

1
2
3
4
5
6
7
# 推荐:使用单个命令获取摘要
% badmin showstatus
LSF runtime mbatchd information
...

# 避免:运行多个命令获取相同数据
% bjobs -u all && bqueues && bhosts

使用 bjobs -sum 获取作业摘要

1
2
3
% bjobs -u user1 -q regression -sum
RUN        SSUSP      USUSP      UNKNOWN    PEND       FWD_PEND
0          0          0          0          640369     0

配置参数汇总

参数 配置文件 说明
SCHED_METRIC_ENABLE lsb.params 启用性能指标收集
SCHED_METRIC_SAMPLE_PERIOD lsb.params 采样周期(秒)
ENABLE_DIAGNOSE lsb.params 启用诊断功能
DIAGNOSE_LOGDIR lsb.params 诊断日志目录
LSB_QUERY_PORT lsf.conf 多线程查询端口
LSB_QUERY_ENH lsf.conf 启用增强查询
MAX_CONCURRENT_QUERY lsb.params 最大并发查询数

参考资料

  1. IBM Documentation - Maintaining cluster performance under high query load
  2. IBM Documentation - Best practices and tips for LSF