本文介绍IBM Spectrum LSF在Microsoft Windows平台上的特性、配置和最佳实践,以及在混合UNIX/Linux/Windows集群中的部署策略。

Windows平台支持概述

LSF原生支持Windows操作系统,可以:

  • 在纯Windows集群中运行
  • 与UNIX/Linux节点混合部署
  • Windows节点可作为Master或Execution Host
  • 支持Windows特有的功能和服务

支持的Windows版本

LSF 10.1.0支持:

  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows 10/11(客户端节点)

Windows LSF架构

服务组件

LSF在Windows上以系统服务运行:

服务名称 对应守护进程 用途
LSF Master Service mbatchd/mbschd 批处理调度(仅Master)
LSF LIM Service lim 负载信息管理
LSF Server BatchD Service sbatchd 作业执行(Execution Host)

服务管理

使用Windows服务管理器

1
2
3
4
5
6
7
8
9
10
11
12
13
# 启动服务
Start-Service "LSF LIM Service"
Start-Service "LSF Server BatchD Service"

# 停止服务
Stop-Service "LSF LIM Service"
Stop-Service "LSF Server BatchD Service"

# 查看服务状态
Get-Service "LSF*"

# 重启服务
Restart-Service "LSF LIM Service"

使用LSF命令

REM 启动LSF
lsadmin limstartup
badmin hstartup

REM 停止LSF
badmin hshutdown
lsadmin limshutdown

Windows安装特点

安装目录结构

默认安装路径:C:\IBM\LSF

1
2
3
4
5
6
7
8
9
10
11
12
C:\IBM\LSF\
├── 10.1\                      # 版本目录
│   └── windows-x64\           # 平台目录
│       ├── bin\               # LSF命令
│       ├── etc\               # 守护进程和工具
│       └── lib\               # 库文件
├── conf\                      # 配置文件
│   ├── lsf.conf
│   ├── lsb.params
│   └── ...
├── log\                       # 日志文件
└── work\                      # 作业工作目录

用户权限要求

安装权限

  • 需要本地管理员权限安装LSF
  • 服务账户需要”Log on as a service”权限

LSF服务账户

  • 建议创建专用服务账户(如lsfadmin
  • 需要对LSF目录有读写权限
  • 需要对作业工作目录有权限

配置服务账户

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 创建LSF服务账户
New-LocalUser -Name "lsfadmin" -Password (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force)

# 2. 授予"Log on as a service"权限
# 通过本地安全策略:
# secpol.msc -> Local Policies -> User Rights Assignment -> Log on as a service

# 3. 授予LSF目录权限
icacls "C:\IBM\LSF" /grant "lsfadmin:(OI)(CI)F" /T

# 4. 配置服务使用该账户
sc.exe config "LSF LIM Service" obj= ".\lsfadmin" password= "P@ssw0rd"

混合集群配置

主控节点选择

推荐配置

  • Primary Master:Linux/UNIX(稳定性和性能)
  • Execution Hosts:混合Windows和Linux节点

Windows作为Master

  • 支持但不推荐用于大规模集群
  • 适用于小型或全Windows环境

平台类型定义

lsf.shared中定义Windows平台:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Begin Resource
RESOURCENAME  TYPE    INTERVAL INCREASING  DESCRIPTION
windows       Boolean ()       ()          Windows hosts
linux         Boolean ()       ()          Linux hosts
End Resource

Begin HostType
TYPENAME                  # 定义主机类型
X86_64                    # Intel/AMD 64位
End HostType

Begin HostModel
MODELNAME  CPUFACTOR  ARCHITECTURE
IntelI5    100        (X86_64)
End HostModel

lsf.cluster配置示例

1
2
3
4
5
6
7
8
9
10
ClusterName MyCluster
Servers      master01                # Linux Master
Clients      (compute-win[01-10])    # Windows节点

Begin Host
HOSTNAME       model   type  server  RESOURCES
master01       !       !     1       (linux)
compute-win01  IntelI5 !     1       (windows mem)
compute-win02  IntelI5 !     1       (windows mem)
End Host

跨平台作业提交

1
2
3
4
5
6
7
8
# 从Linux提交到Windows节点
bsub -m "compute-win01" -R "select[windows]" job.bat

# 从Windows提交到Linux节点
bsub -m "linux_host" -R "select[linux]" job.sh

# 自动选择Windows主机
bsub -R "select[windows && mem>8000]" job.bat

Windows特有功能

批处理文件支持

LSF自动识别.bat.cmd文件:

REM job.bat
@echo off
echo Running on %COMPUTERNAME%
echo Job ID: %LSB_JOBID%
my_windows_app.exe input.dat

提交:

bsub < job.bat

PowerShell脚本支持

1
2
3
4
# job.ps1
Write-Host "LSF Job on Windows"
Write-Host "Job ID: $env:LSB_JOBID"
Get-Process | Out-File processes.txt

提交:

bsub powershell.exe -File job.ps1

Windows路径处理

LSF在Windows上支持两种路径格式:

REM Windows路径
bsub -o "C:\Users\john\output.txt" job.bat

REM UNIX风格路径(推荐用于跨平台脚本)
bsub -o "/cygdrive/c/Users/john/output.txt" job.bat

共享文件系统

SMB/CIFS共享

Windows节点通常使用SMB访问共享存储:

REM 映射网络驱动器
net use Z: \\fileserver\lsf_share

REM 在作业中使用
bsub -cwd "Z:\projects\sim1" job.bat

权限考虑

  • 确保LSF服务账户有SMB共享的访问权限
  • 使用域账户可简化跨节点权限管理
  • 避免使用本地账户(权限不跨节点)

Active Directory集成

域用户认证

1
2
3
# lsf.conf
LSF_AUTH=user_ad
LSB_AUTH_DAEMONS=user_ad

用户组映射

1
2
3
4
5
6
# lsb.users
Begin UserGroup
GROUP_NAME       USERS
domain_admins    (DOMAIN\admin1 DOMAIN\admin2)
domain_users     (DOMAIN\user1 DOMAIN\user2)
End UserGroup

Windows作业脚本最佳实践

环境变量设置

@echo off
REM 设置LSF环境
call "C:\IBM\LSF\conf\lsf.bat"

REM 设置应用环境
set PATH=C:\MyApp\bin;%PATH%
set MY_LICENSE_FILE=@license_server

REM 运行应用
myapp.exe input.dat > output.log 2>&1

错误处理

@echo off
setlocal enabledelayedexpansion

REM 运行应用并检查返回码
myapp.exe input.dat
if %ERRORLEVEL% NEQ 0 (
    echo Application failed with error code %ERRORLEVEL%
    exit /b %ERRORLEVEL%
)

echo Job completed successfully
exit /b 0

资源清理

@echo off

REM 设置trap清理临时文件
REM Windows没有trap,使用错误处理
set TEMP_DIR=%TEMP%\lsf_job_%LSB_JOBID%
mkdir %TEMP_DIR%

REM 主程序
call main_task.bat
set EXIT_CODE=%ERRORLEVEL%

REM 清理
rmdir /s /q %TEMP_DIR%

exit /b %EXIT_CODE%

Windows性能优化

禁用不必要的服务

在专用计算节点上禁用:

  • Windows Search
  • Windows Update(配置手动更新)
  • Windows Defender(如有企业防病毒)
  • 不必要的后台应用

内存管理

1
2
# lsb.params
WIN_MEMORY_ADJUSTMENT=0.9  # Windows预留10%内存给OS

CPU调度优先级

Windows上的LSF作业默认以”Below Normal”优先级运行,避免影响系统响应。

监控和日志

Windows事件日志

LSF会记录关键事件到Windows事件日志:

1
2
# 查看LSF事件
Get-EventLog -LogName Application -Source "LSF*" -Newest 50

性能计数器

监控LSF服务性能:

1
2
3
4
5
6
# 查看LSF进程CPU使用
Get-Counter "\Process(lim)\% Processor Time"
Get-Counter "\Process(sbatchd)\% Processor Time"

# 内存使用
Get-Counter "\Process(lim)\Working Set"

故障排查

常见问题

1. 服务无法启动

检查

1
2
3
4
5
# 查看服务状态和错误
Get-Service "LSF LIM Service" | Select-Object *

# 查看事件日志
Get-EventLog -LogName Application -Source "LSF LIM Service" -Newest 10

解决

  • 验证服务账户权限
  • 检查防火墙规则
  • 查看lim.log日志文件

2. 作业不调度到Windows节点

检查

bhosts                     REM 主机状态
lsload compute-win01       REM 负载信息
bjobs -p <job_id>          REM 挂起原因

常见原因

  • 资源选择字符串未包含windows
  • 主机状态为closed或unavail
  • 网络通信问题

3. 路径问题

症状:找不到文件或命令

解决

  • 使用绝对路径
  • 检查路径分隔符(\ vs /
  • 验证文件共享挂载

调试工具

REM 启用调试日志
set LSF_LOG_MASK=LOG_DEBUG
lsadmin reconfig

REM 测试网络连接
badmin showstatus          REM Master连接
lsadmin limstatus          REM LIM连接性

REM 手动运行命令测试
lsrun -m compute-win01 cmd /c hostname

许可证管理

Windows应用通常使用FLEXlm或其他许可证服务器:

REM 配置许可证资源
REM lsf.shared
Begin Resource
RESOURCENAME  TYPE     INTERVAL
ansys_lic     Numeric  ()
End Resource

REM 提交作业
bsub -R "rusage[ansys_lic=1]" ansys_batch.bat

混合集群最佳实践

1. 明确平台职责

  • Linux Master:集群管理和调度
  • Linux Execution:计算密集型任务
  • Windows Execution:Windows专有应用

2. 统一环境管理

  • 使用域账户统一认证
  • 共享存储使用SMB+NFS混合访问
  • 标准化作业提交脚本

3. 资源隔离

1
2
3
4
5
6
7
8
9
10
11
12
# 为Windows和Linux创建单独队列
Begin Queue
QUEUE_NAME = win_queue
HOSTS = (compute-win[01-10])
RES_REQ = select[windows]
End Queue

Begin Queue
QUEUE_NAME = linux_queue
HOSTS = (compute-linux[01-20])
RES_REQ = select[linux]
End Queue

4. 监控策略

  • Windows节点:使用SCOM或类似工具
  • Linux节点:使用Nagios/Prometheus
  • LSF层:使用LSF RTM统一监控

安全注意事项

防火墙配置

1
2
3
4
# 允许LSF端口
New-NetFirewallRule -DisplayName "LSF LIM" -Direction Inbound -Protocol TCP -LocalPort 7869 -Action Allow
New-NetFirewallRule -DisplayName "LSF MBD" -Direction Inbound -Protocol TCP -LocalPort 6878 -Action Allow
New-NetFirewallRule -DisplayName "LSF SBD" -Direction Inbound -Protocol TCP -LocalPort 6879 -Action Allow

服务账户安全

  • 使用强密码策略
  • 定期轮换密码
  • 最小权限原则
  • 审计服务账户操作

总结

LSF在Windows平台上提供了与UNIX/Linux相当的功能,支持构建纯Windows或混合集群。通过合理配置和遵循最佳实践,可以充分利用Windows节点的计算能力,同时保持与Linux节点的无缝集成。

对于企业环境,混合集群通常是最佳选择:Linux作为稳定的管理平面,Windows节点运行特定应用,共同组成高效的HPC环境。


参考资源