OpenLava EDA 实战(一):EDA 计算集群搭建与工具接入
OpenLava EDA 实战(一):EDA 计算集群搭建与工具接入
摘要:芯片设计公司的 EDA 工具(VCS、Verdi、Design Compiler 等)对计算资源和 License 有强依赖。本文讲解如何在 OpenLava 集群上搭建 EDA 计算环境,包括:EDA 工具统一安装管理、FlexLM License 服务器配置、用户环境模块(Module)、文件系统规划、以及第一个 VCS 作业的提交。适合刚接触 EDA 集群管理的工程师参考。
适用场景:数字 IC 设计 / 验证团队,需要把 EDA 工具接入 OpenLava 调度系统。
零、读前必看
0.1 适合谁
- ✅ 负责 EDA 计算集群管理的 IT / CAD 工程师
- ✅ 想把 EDA 工具从手动跑改成调度系统管理
- ✅ 有 OpenLava 基础,想知道 EDA 场景怎么用
0.2 你需要准备什么
| 项目 | 要求 |
|---|---|
| OpenLava 集群 | 已搭好,至少 3 个计算节点 |
| 共享存储 | NFS / NAS / GPFS,存 EDA 工具和设计数据 |
| License 服务器 | FlexLM 服务器(或已有的 License Server) |
| EDA 工具 | Synopsys VCS / Verdi、Cadence 等(商业授权) |
| 设计数据 | 至少一个可跑的测试用例用来验证 |
一、EDA 集群架构总览
1.1 典型架构
┌──────────────────────┐
│ License Server │
│ (FlexLM, 27000) │
└──────────┬───────────┘
│ License 查询/占用
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Master │ │ compute01 │ │ compute02 │
│ OpenLava │ │ EDA工具 │ │ EDA工具 │
│ (调度) │ │ (共享挂载)│ │ (共享挂载)│
└──────┬─────┘ └──────┬─────┘ └──────┬─────┘
│ │ │
└────────────────┼────────────────┘
│ NFS / NAS 共享存储
▼
┌──────────────────────┐
│ 共享存储 /data/eda │
│ - tools/ (EDA工具) │
│ - projects/ (设计) │
│ - home/ (家目录) │
└──────────────────────┘
1.2 核心组件
| 组件 | 作用 | 关键要求 |
|---|---|---|
| OpenLava Master | 作业调度 | 高可用 |
| 计算节点 | 跑 EDA 工具 | CPU/内存充足,工具路径一致 |
| License Server | EDA License 管理 | 稳定、网络可达 |
| 共享存储 | 工具 + 数据 | 高吞吐、低延迟 |
| Module 环境 | 工具版本切换 | 所有节点一致 |
1.3 EDA 集群的特殊挑战
| 挑战 | 说明 |
|---|---|
| License 是稀缺资源 | 工具按 License 收费,数量有限,需要合理调度 |
| 内存占用大 | VCS 仿真、DC 综合动不动几十上百 G 内存 |
| IO 密集 | 仿真波形文件很大,存储性能很重要 |
| 工具版本多 | 不同项目用不同版本 VCS,需要环境隔离 |
| 长作业多 | 全芯片回归跑几天几夜很正常 |
二、文件系统规划
2.1 目录结构建议
/data/
├── eda/
│ ├── tools/ # EDA 工具安装
│ │ ├── synopsys/
│ │ │ ├── vcs/
│ │ │ │ ├── O-2018.09-SP2/
│ │ │ │ ├── P-2019.06/
│ │ │ │ └── current -> P-2019.06
│ │ │ └── verdi/
│ │ │ └── 2018.09-SP2/
│ │ ├── cadence/
│ │ └── mentor/
│ ├── license/ # License 文件 + 启动脚本
│ └── modulefiles/ # Module 模块文件
├── projects/ # 设计项目数据
│ ├── chipA/
│ └── chipB/
└── home/ # 用户家目录(NFS 共享)
├── user1/
└── user2/
2.2 存储性能建议
| 用途 | 建议存储类型 | IOPS / 带宽 |
|---|---|---|
| EDA 工具 | NFS / NAS | 中(只读为主) |
| 设计源码 | NFS / NAS | 中 |
| 仿真波形(fsdb/vpd) | 高速存储(GPFS / Lustre / 本地 SSD) | 高(写密集) |
| 家目录 | NFS | 低 - 中 |
| 临时文件(/tmp) | 本地 SSD | 高 |
**经验**:仿真阶段的 IO 压力最大。如果波形直接写 NFS,多用户一起跑会把 NFS 打爆。**建议写到本地 SSD,仿真完再归档到共享存储。**
2.3 挂载所有节点
# /etc/fstab 示例
nas01:/data/eda_tools /data/eda/tools nfs ro,vers=3,hard,intr,rsize=32768,wsize=32768 0 0
nas01:/data/eda_license /data/eda/license nfs ro,vers=3,hard,intr 0 0
nas01:/data/projects /data/projects nfs rw,vers=3,hard,intr,rsize=65536,wsize=65536 0 0
nas01:/data/home /home nfs rw,vers=3,hard,intr 0 0
所有计算节点统一挂载,保证路径一致。
三、FlexLM License 服务器配置
3.1 License 文件结构
Synopsys 的 License 文件(synopsys.dat)大致长这样:
SERVER lic_server01 001122334455 27000
VENDOR snpslmd /data/eda/tools/synopsys/scl/2019.06/linux64/bin/snpslmd
USE_SERVER
INCREMENT VCS_MX snpslmd 2018.09 31-dec-2025 5 ...
INCREMENT Verdi3 snpslmd 2018.09 31-dec-2025 5 ...
INCREMENT Design-Compiler snpslmd 2018.09 31-dec-2025 3 ...
| 行 | 含义 |
|---|---|
SERVER |
License 服务器主机名 + MAC + 端口 |
VENDOR |
厂商 daemon 路径 |
INCREMENT |
具体 License 功能 + 版本 + 过期 + 数量 |
3.2 启动 License 服务
# 1. 安装 FlexLM / SCL
# Synopsys 用 SCL(Synopsys Common Licensing)
cd /data/eda/tools/synopsys/scl/2019.06/linux64/bin
# 2. 启动
./lmgrd -c /data/eda/license/synopsys.dat -l /data/eda/license/logs/synopsys.log
# 3. 查看状态
./lmstat -c 27000@lic_server01
./lmstat -a -c 27000@lic_server01 | head -50
3.3 设置开机自启
# /etc/systemd/system/flexlm-synopsys.service
[Unit]
Description=FlexLM Synopsys License Server
After=network.target
[Service]
Type=forking
User=eda
ExecStart=/data/eda/tools/synopsys/scl/2019.06/linux64/bin/lmgrd \
-c /data/eda/license/synopsys.dat \
-l /data/eda/license/logs/synopsys.log
ExecStop=/data/eda/tools/synopsys/scl/2019.06/linux64/bin/lmdown \
-c /data/eda/license/synopsys.dat -q
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable flexlm-synopsys
systemctl start flexlm-synopsys
3.4 客户端环境变量
所有计算节点设置 License 服务器地址:
# /etc/profile.d/eda_license.sh
export SNPSLMD_LICENSE_FILE=27000@lic_server01
export LM_LICENSE_FILE=27000@lic_server01:5280@lic_server01 # 多个厂商用冒号分隔
**注意**:不同厂商 License 用不同的端口。把所有 License 服务器地址都加到 `LM_LICENSE_FILE` 环境变量里。
3.5 验证 License 可用
# 在任意计算节点执行
lmstat -a -c 27000@lic_server01 | grep -E "^Users of|Total"
# Users of VCS_MX: (Total of 5 licenses issued; Total of 2 licenses in use)
# Users of Verdi3: (Total of 5 licenses issued; Total of 1 license in use)
四、Module 环境管理
EDA 工具版本多,用 Environment Modules(也叫 module)统一管理版本切换。
4.1 安装 Module
# CentOS
yum install -y environment-modules
# Ubuntu
# apt install -y environment-modules
4.2 Module 文件示例
# /data/eda/modulefiles/synopsys/vcs/O-2018.09-SP2
#%Module1.0
proc ModulesHelp { } {
puts stderr "Synopsys VCS O-2018.09-SP2"
}
module-whatis "Synopsys VCS O-2018.09-SP2"
# 前置依赖(需要先加载 SCL)
prereq synopsys/scl/2019.06
# 设置环境变量
setenv VCS_HOME /data/eda/tools/synopsys/vcs/O-2018.09-SP2
setenv VERDI_HOME /data/eda/tools/synopsys/verdi/Verdi_O-2018.09-SP2
# PATH
prepend-path PATH /data/eda/tools/synopsys/vcs/O-2018.09-SP2/bin
prepend-path PATH /data/eda/tools/synopsys/verdi/Verdi_O-2018.09-SP2/bin
# License(可选,也可以在全局设)
setenv SNPSLMD_LICENSE_FILE 27000@lic_server01
# /data/eda/modulefiles/synopsys/scl/2019.06
#%Module1.0
setenv SCL_HOME /data/eda/tools/synopsys/scl/2019.06
prepend-path PATH /data/eda/tools/synopsys/scl/2019.06/linux64/bin
4.3 配置 MODULEPATH
# /etc/profile.d/modulepath.sh
export MODULEPATH=/data/eda/modulefiles/synopsys:/data/eda/modulefiles/cadence:$MODULEPATH
4.4 使用 Module
# 查看可用模块
module avail
# 加载模块
module load synopsys/scl/2019.06
module load synopsys/vcs/O-2018.09-SP2
# 查看已加载
module list
# 卸载
module unload synopsys/vcs/O-2018.09-SP2
# 切换版本
module swap synopsys/vcs/O-2018.09-SP2 synopsys/vcs/P-2019.06
**关键**:用户提交作业时在脚本里 `module load` 对应版本,确保作业跑在正确的工具版本上。
五、EDA 工具接入 OpenLava
5.1 第一个 VCS 作业
#!/bin/bash
#BSUB -J vcs_compile
#BSUB -q normal
#BSUB -n 4
#BSUB -R "rusage[mem=8192] span[hosts=1]"
#BSUB -o vcs_compile.log
#BSUB -e vcs_compile.err
#BSUB -W 2:00
# 加载环境
source /etc/profile.d/modules.sh
module load synopsys/scl/2019.06
module load synopsys/vcs/O-2018.09-SP2
# 切换到工作目录
cd /data/projects/chipA/verif/top
echo "=== 开始 VCS 编译 ==="
echo "Job ID: $LSB_JOBID"
echo "Host: $(hostname)"
echo "VCS version: $(vcs -v 2>&1 | head -1)"
# 编译
vcs -full64 -f filelist.f -top tb_top \
-debug_access+all \
-o simv \
-j4 2>&1
exit_code=$?
echo "=== VCS 编译结束,退出码: $exit_code ==="
exit $exit_code
提交:
bsub < vcs_compile.sh
5.2 跑仿真
#!/bin/bash
#BSUB -J vcs_sim
#BSUB -q normal
#BSUB -n 2
#BSUB -R "rusage[mem=16384] span[hosts=1]"
#BSUB -o sim.log
#BSUB -e sim.err
#BSUB -W 8:00
source /etc/profile.d/modules.sh
module load synopsys/scl/2019.06
module load synopsys/vcs/O-2018.09-SP2
cd /data/projects/chipA/verif/top
echo "=== 开始仿真 ==="
echo "TestCase: $TESTCASE"
echo "Start time: $(date)"
# 跑仿真
./simv +TESTNAME=$TESTCASE +UVM_VERBOSITY=LOW \
-fsdb -fgp -ntb_opts uvm 2>&1
exit_code=$?
echo "End time: $(date)"
echo "Exit code: $exit_code"
exit $exit_code
提交:
bsub -env "TESTCASE=test_smoke" < vcs_sim.sh
5.3 查看作业运行情况
# 看实时输出
bpeek -f <jobid>
# 看 License 占用
lmstat -a | grep -A5 "Users of VCS_MX"
六、用户使用规范建议
6.1 提交脚本模板
给团队一个标准模板,统一规范:
#!/bin/bash
# ======================================
# EDA Job Template v1.0
# ======================================
#BSUB -J <job_name>
#BSUB -q <queue>
#BSUB -n <num_slots>
#BSUB -R "rusage[mem=<mem_mb>] span[hosts=1]"
#BSUB -W <wall_time>
#BSUB -o %J.out
#BSUB -e %J.err
#BSUB -u <your_email>
# === 环境加载 ===
source /etc/profile.d/modules.sh
module load synopsys/scl/2019.06
module load synopsys/vcs/O-2018.09-SP2
# === 工作目录 ===
cd $LS_SUBCWD || cd /data/projects/...
# === 运行 ===
echo "Start: $(date)"
echo "Host: $(hostname)"
echo "JobID: $LSB_JOBID"
# 你的命令
<your_command_here>
echo "End: $(date)"
6.2 常见错误行为
| ❌ 不推荐 | ✅ 推荐 | 原因 |
|---|---|---|
| 直接在登录节点跑仿真 | 用 bsub 提交到计算节点 | 登录节点扛不住 |
-n 16 -R "mem=4096" 实际只用 2 核 |
按需申请资源 | 浪费槽位,挤占他人 |
| 波形写 NFS 共享目录 | 写本地 /tmp,跑完归档 |
NFS 性能瓶颈 |
| 不设运行上限 | -W 设置合理时限 |
挂起的作业占资源 |
| 不写输出文件 | -o -e 记录日志 |
出问题没法查 |
七、计算节点环境检查清单
新节点上线前,逐项验证:
- [ ] NFS 挂载正确(工具/项目/家目录)
- [ ] Module 命令可用
- [ ]
module load各工具版本正常 - [ ]
which vcs/which verdi路径正确 - [ ]
lmstat -a能查到 License - [ ]
vcs -v能输出版本信息 - [ ] 标准测试用例能跑通
- [ ]
bhosts里节点状态是 ok - [ ] 提交一个测试作业能正常 RUN 并 DONE
- [ ] 本地
/tmp空间足够(建议 ≥ 100G)
八、写在最后
EDA 集群搭建的核心是"一致性":
- 所有计算节点的工具路径一致
- 所有节点的环境变量一致
- 所有节点能访问 License 服务器
- 所有节点能访问共享存储
做到这几点,EDA 工具接入 OpenLava 就水到渠成了。
下一篇我们深入讲 License 调度管理:怎么把 FlexLM 的 License 数量作为 OpenLava 的可消耗资源,让调度器根据 License 余量自动调度,避免出现"License 不够导致作业启动失败"的尴尬。
你的 EDA 集群用哪些工具?最头疼的问题是什么? 评论区聊聊。
OpenLava #EDA #VCS #FlexLM #License #芯片设计 #运维 #Module
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







