问题描述

在IBM LSF集群中新增或修改队列后,打开Virtuoso ADE(Analog Design Environment)的 Job Policy Setup 表单,发现队列下拉列表中没有出现新队列。


根本原因:两层”缓存”

Virtuoso ADE的仿真表单队列列表由两个层面共同控制,任何一层未更新都会导致新队列不显示。

第一层:cdsfrb_lsf 进程(LBS Broker)

cdsfrb_lsf 是Cadence Load Balancing Software(LBS)的中间件进程,每个用户在提交主机上运行一个。它负责与IBM LSF通信,并缓存集群信息(包括队列名称)。

关键行为(来源:Cadence ASK):

  • 不会自动更新:修改LSF队列后,该进程持有的缓存不会自动刷新。
  • 自动退出条件:最后一个客户端断开连接 任务表为空后,30分钟自动退出。
  • 自动重启:Virtuoso下次需要提交任务时,会自动启动新的 cdsfrb_lsf,此时获取最新的队列信息。

Cadence 原文:“If you have done an update in the LSF queue, you should restart this process. Or wait till it gets killed automatically.”

解决方法:在没有运行中任务时,手动结束该进程:

1
2
3
pkill cdsfrb_lsf
# 或者指定当前用户
kill $(pgrep -u $USER cdsfrb_lsf)

⚠️ 注意:如果有任务正在运行,不要杀掉此进程,否则会影响任务监控。应等任务完成后再操作,或等30分钟自动超时。

第二层:queueNameInclusionList 变量(硬编码列表)

部分站点在 .cdsinit 中通过以下变量限制了可见队列范围:

envSetVal("asimenv.distributed" "queueNameInclusionList" 'string "sim_short sim_long")

如果设置了此变量,新队列即使在LSF中存在,也不会出现在下拉列表中。

⚠️ 队列名必须用空格分隔,不能用逗号——用逗号会导致下拉列表完全不显示。


排查与解决步骤

第一步:检查是否设置了 queueNameInclusionList

在Virtuoso的 CIW(Command Interpreter Window) 中执行:

envGetVal("asimenv.distributed" "queueNameInclusionList")
  • 如果返回空字符串,说明未设置此变量,跳到第二步。
  • 如果返回非空字符串,说明队列列表被限制,继续第一步处理。

处理 queueNameInclusionList(如已设置)

方法A:在CIW中立即更新(无需重启Virtuoso)

envSetVal("asimenv.distributed" "queueNameInclusionList" 'string "sim_short sim_long new_queue")

执行后重新打开 Job Policy Setup 表单即可看到新队列。

方法B:修改 .cdsinit 并重启Virtuoso(持久生效)

编辑 ~/.cdsinit 或站点级 cdsinit,将新队列加入列表,然后重启Virtuoso。

第二步:重启 cdsfrb_lsf 进程

1
pkill cdsfrb_lsf

第三步:在Virtuoso中刷新

关闭并重新打开 Job Policy Setup 表单,Virtuoso会自动启动新的 cdsfrb_lsf 并获取最新队列列表。


补充:如何确认 Queue 下拉列表可见

在 Job Policy Setup 表单中,Queue 复选框必须勾选,才会显示队列下拉列表。未勾选时,Virtuoso使用LSF默认队列,不显示选择框。


总结

层次 原因 解决方法
cdsfrb_lsf 进程缓存 进程启动后缓存集群队列信息,不自动刷新 pkill cdsfrb_lsf,或等30分钟自动退出
queueNameInclusionList 硬编码 .cdsinit 中限定了可见队列列表 在CIW执行 envSetVal 更新列表,或修改 .cdsinit 后重启

参考资料