LS-DYNA的许可跟Creo、ANSYS Mechanical那套完全不是一个逻辑。你拿管并发数的思路去管它,从一开始就管错了。
Creo的浮动许可,一个用户check out一个seat,用完释放,简单粗暴。LS-DYNA不是。它的许可基于FlexNet框架,但LSTC在上面做了一层很要命的定制:按核数授权。你买的不是一个“能打开LS-DYNA”的席位,买的是一个“同时占用多少个计算核心”的额度。许可证文件里写着32核MPP,你提交ncores=64的计算,直接报错,特征不足,任务起不来。这个“核”对应的是你通过参数指定的并行规模,不是节点数,也不是你机器上物理有多少核。
根源就在这里。工程师和IT之间对“一个许可”的理解是错位的。 工程师觉得“我有许可”,IT觉得“池子里还有空闲”,但真正被消耗的是核数额度。一个跑三天的大任务占着64核不放,另一个工程师提交16核的小任务就排不上,不是因为“没许可”,是因为核数被吃干了。闲置率数据很难看:企业软件许可的平均闲置率25%到40%,LS-DYNA这种按核授权的场景只会更糟,因为“占用核数”和“实际算没算”之间的距离比席位制远得多。
坑一:把核数当并发数管。
看后台“在线用户数”只有三个人,觉得池子很空。但那三个人每人挂着64核在跑,池子早穿了。你监控的维度和许可真正消耗的维度对不上。 后果是增购申请批不下来,因为“报表显示够用”,但工程师那边的排队从来没停过。
坑二:MPP和SMP的许可混着算。
LS-DYNA的license文件里MPPDYNA和LS-DYNA是两个feature。有人装了SMP版本,用MPP的license去跑,报Error License Keys,然后怀疑是服务器坏了。不是坏了,是你在用A的票坐B的车。 MPP多节点并行还要额外看HPC许可,每多一个processor就要多一个HPC授权。这些边界不在一个文件里写清楚,排查起来就是纯浪费时间。
坑三:版本锁定的暗坑,升级了软件没升级许可。
license文件里的VERSION字段写死了这个许可能支持到哪个版本。你把求解器从R9升到R11,单机SMP可能还能凑合跑,但MPP多节点一提交就报“许可证不支持当前版本”。这种坑最阴,因为它不在你常规的“够不够用”的检查范围里,它是“能不能用”的问题,但报错信息往往把人往核数不够的方向带。
坑四:只监控,不回收。
lstc_qrun能看到谁在占着核,但看到了不等于收得回来。一个工程师提交任务后下班,任务跑完了但会话挂着,核数额度不释放,第二天早上的高峰直接少一块可用池子。很多团队做到“能看见”就停了,但看见不产生任何成本节约,回收才产生。 回收的难点不在技术,在“你敢不敢动别人的会话”,以及动了之后怎么跟人解释。

lstc_qrun是LSTC自带的查询命令,lstc_qrun -L LS-DYNA查SMP,-L MPPDYNA查MPP,-info能拿到更细的分配信息。写个脚本每五分钟跑一次,落库。跑两周,你拿到的是每个任务占了多少核、占了多久、谁提交的,而不是一个糊在一起的总数。核心指标换成“有效核时” :总占用的核数乘以时长,扣掉那些明显空转的尾巴。这个数跟你的许可额度对,才知道缺口到底在高峰并发还是在长尾闲置。
如果你们用Slurm或者LSF提交LS-DYNA任务,在调度器层面给每个用户或项目组设核数上限,比在许可服务器上事后回收要温和得多,也早得多。一个人单次提交不允许超过池子的40%,大任务拆批次或者放到夜间队列。同时把lstc_qrun的输出接到监控告警上,某个用户连续持有超过设定阈值就发通知,不是直接杀,先让人知道“你的核数在空转”。这一层不花钱,但能挡住最粗暴的那种“一个人占着池子其他人干等”的局面。
LS-DYNA的续费清单拉出来,MPPDYNA的核数额度和LS-DYNA的SMP额度要分开看消耗。如果SMP的核时消耗集中在前后处理和中小模型调试上,而MPP的峰值集中在项目节点,那增购的优先级完全不同。有一种情况很常见:你买了大量MPP核数,但实际有效核时里SMP占了大头,因为很多人拿MPP许可去跑根本不需要多节点的任务。 采购谈判的时候拿核时数据说话,比说“大家反映不够用”有力得多。
OpenLM、Open iT这些工具能轮询LSTC license server拿使用数据,Vantage那类能专门看SMP/MPP的parallel token分配。但选工具的时候只问一个问题:它能不能在检测到核数空转的时候执行回收,还是只是再给你一张更好看的报表。 如果一个工具只能可视化lstc_qrun已经能给你的东西,它解决不了你第二层没解决的那个“看见了但收不回来”的问题。回收动作的风险在于误杀正在收敛的显式分析,所以工具必须支持白名单和延迟执行,不能上来就kill。
某做碰撞仿真的团队,MPP许可的核数额度按文件看是128核,但项目组持续抱怨“排不上”。IT拉了两周lstc_qrun的采样,发现两件事。第一,真正同时被占用的核数峰值很少超过70,但“持有超过12小时且CPU利用率低于10%”的会话占了总核时的将近四成。 第二,有几个长期任务提交的时候ncores设的是64,但模型规模按Ansys自己的效率指引看,每个processor至少要摊到一万到两万个单元才能跑出像样的并行效率,那些任务的网格量根本喂不饱64核,多出来的核就是白挂着。
做法很土。调度器上加了一条规则,提交ncores超过32的任务必须附上网格规模说明,否则队列拒绝。同时把lstc_qrun的阈值告警接上,持有超过8小时且利用率低的会话自动发邮件给提交人,抄送组长。三个月后再看,128核额度下的有效核时占比从不到五成拉到七成以上,排队拒绝次数降了一半多。第二年续费的时候没有增购核数,只是把SMP和MPP的续费比例按实际消耗重新切了一下。 负责人后来说,最大的变化不是许可变多了,是终于知道“那些核到底被谁拿去干了什么”。