芯片设计的各类 EDA 仿真、综合、布局布线工具在运行过程中会产生大量临时文件——仿真波形缓存、SDF 解压文件、内部数据库等——默认情况下这些文件会写入 NFS 共享存储,给昂贵的 NFS 资源带来巨大 I/O 压力。
本文汇总了 Cadence 官方文档和 Cadence ASK 知识库中给出的方法,指导模拟 CAD/数字 CAD 工程师和模拟/数字前后端工程师将临时 I/O 重定向到执行机(Compute Node)的本地磁盘(Local Disk / Local SSD),从而:
- 降低 NFS 存储的 I/O 负载与带宽占用
- 提升工具运行速度(本地 SSD » NFS)
- 减少 NFS 客户端的连接数与元数据请求
一、通用机制:TMPDIR 环境变量
适用工具:Xcelium、Genus、Innovus、Tempus、Pegasus 等所有 Cadence EDA 工具
所有 Cadence 工具都遵守标准的 TMPDIR 环境变量。设置该变量后,工具会在指定路径下创建自己的临时子目录,而不是使用 /tmp(通常挂载于本机)或 NFS 上的默认路径。
# csh / tcsh
setenv TMPDIR /path/to/local/scratch
# bash / sh
export TMPDIR=/path/to/local/scratch
来源:Cadence ASK《How to direct the simulation toolset to use a particular disk area for temporary files》(Article ID: a1O0V000006AjQuUAK)
原文摘要:
“All Cadence tools use TMPDIR environment variable for temporary files. Tools create
.nctmpdirin /tmp for decompressed files (SDF, source files). Usesetenv TMPDIR <some_path>/mytmpdirto redirect.”
这是最基础、影响范围最广的设置,建议在作业调度器的 Job Wrapper 脚本中统一设置,确保每个 Job 启动时自动指向本地磁盘。
二、模拟仿真:Virtuoso ADE + Spectre
适用工程师:模拟工程师、模拟 CAD 工程师
2.1 RDB(Results Database)本地写入:RDBCreatePolicy
ADE(Analog Design Environment)的仿真结果数据库(RDB)存储策略由环境变量 maestro.results RDBCreatePolicy 控制。
| 取值 | 行为 |
|---|---|
TmpDir(默认值) |
仿真过程中 RDB 写入执行机 /tmp;每约 50 秒将小块数据同步到 NFS;仿真结束后完整复制到 NFS,并删除 /tmp 中的副本 |
NFSDisk |
直接写入 NFS 磁盘(I/O 全走 NFS) |
结论:TmpDir 是默认行为,无需额外配置即已在使用本地磁盘。 若发现结果直接写到 NFS,需确认未被覆盖。
修改临时目录(将 /tmp 换成更大的本地 SSD 路径):
# 在 .cshrc / 作业脚本中设置
setenv TMPDIR /local/ssd/$LSB_JOBID
# 或在 .cdsinit 中设置
setShellEnvVar("TMPDIR=/local/ssd/myscratch")
用 SKILL 查询或修改当前设置:
1
2
3
4
5
; 查询当前策略
envGetVal("maestro.results" "RDBCreatePolicy")
; 强制设为 TmpDir
envSetVal("maestro.results" "RDBCreatePolicy" 'cyclic "TmpDir")
来源:Cadence ASK《ADE Environment Variables Reference IC25.1 —
RDBCreatePolicy》
2.2 保留本地 RDB 副本以加速重评估:keepTmpRdbForReevaluation
1
2
; 仿真结束后保留 /tmp 中的 RDB(t = 保留,nil = 立即删除,默认 nil)
envSetVal("maestro.results" "keepTmpRdbForReevaluation" 'boolean t)
| 取值 | 行为 |
|---|---|
nil(默认) |
RDB 复制到 NFS 后立即删除 /tmp 副本,释放空间 |
t |
RDB 复制到 NFS 后保留 /tmp 副本,再次评估(Re-evaluate)时直接读本地,速度更快 |
仅当 RDBCreatePolicy = "TmpDir" 时此变量生效。
来源:Cadence ASK《ADE Environment Variables Reference IC25.1 —
keepTmpRdbForReevaluation》
三、数字仿真:Xcelium
适用工程师:数字工程师(前端)、数字 CAD 工程师、验证工程师
Xcelium 有两类临时目录,需分别配置。
3.1 通用临时文件(TMPDIR)
工具在 TMPDIR 下创建 .nctmpdir,存放运行时解压的 SDF、源文件等:
setenv TMPDIR /local/ssd/$LSB_JOBID
3.2 Subscratch 目录(-simtmp,Xcelium 19.03+)
仿真的运行时数据(xmsim.args、xmsim.env、xrun.args)默认存于 xcelium.d/run.d/<hostid>_<pid>/(NFS 上)。使用 -simtmp 可将其重定向到本地磁盘:
1
2
3
4
5
6
7
8
# 第一步:elaborate(生成编译产物,仍在 xcelium.d)
xrun -elaborate test.sv
# 第二步:在本地磁盘创建 scratch 目录
mkdir -p /local/ssd/$LSB_JOBID/xcscratch
# 第三步:仿真时指定 subscratch 路径
xrun -R -simtmp /local/ssd/$LSB_JOBID/xcscratch
实际写入路径为:/local/ssd/$LSB_JOBID/xcscratch/<hostid>_<pid>[.<n>]/
仿真结束后该目录自动删除(调试时可加 -noremovescratch 保留)。
效果:多个仿真 job 并行时,subscratch 全部打到本地 SSD,NFS 流量大幅下降。
来源:
- Cadence Xcelium Simulator User Guide《Changing the Storage Location of Scratch Area Files》(Xcelium AGILE Techpub)
- Cadence ASK《How to create a subscratch simulation directory under a user-specified path》(Article ID: a1O0V000009MpqvUAC)
原文摘要:
”
-simtmp <dir>— Specify custom location for subscratch directory. Does NOT depend on xcelium.d write permissions. Reduces NFS traffic when parallel simulations run. Available Xcelium 19.03+.”
四、逻辑综合:Genus
适用工程师:数字工程师(综合)、数字 CAD 工程师
4.1 设置方法
# Shell 层面(在启动 genus 前设置,推荐)
setenv TMPDIR /local/ssd/$LSB_JOBID # csh
export TMPDIR=/local/ssd/$LSB_JOBID # bash
也可以在 Genus Shell 内部动态修改(不重启工具生效):
1
legacy_genus:/> set env(TMPDIR) /local/ssd/myscratch
Genus 退出时会自动清理 TMPDIR 内的临时文件。Genus 内部调用 Innovus(如 Digital Implementation 流程)时,该设置同样传递生效。
来源:Cadence ASK《How can I control the temporary directory used by Genus?》(Article ID: a1O0V000006AkiaUAC)
原文摘要:
“Genus uses TMPDIR for temporary files (e.g., when calling Innovus internally). Default: TMPDIR → /tmp. Files written to TMPDIR cleaned up by Genus on exit.”
五、布局布线:Innovus
适用工程师:数字工程师(后端)、数字 CAD 工程师
Innovus 有一个专属的环境变量 FE_TMPDIR,优先级高于通用的 TMPDIR。
5.1 优先级顺序(Innovus 25.1)
1
env(FE_TMPDIR) → env(TMPDIR) → .(当前目录) → /tmp
5.2 设置方法
# 推荐:使用 Innovus 专属变量,指向本地 SSD
setenv FE_TMPDIR /local/ssd/$LSB_JOBID/innovus
# 备选:通用变量
setenv TMPDIR /local/ssd/$LSB_JOBID
5.3 Innovus 25.1 新特性
Innovus 25.1 之前,若 FE_TMPDIR 指定的目录不存在,工具会自动创建名为 innovus_tmpdir 的目录(而非用户指定的路径),行为令人困惑。
Innovus 25.1 起,工具会自动创建 FE_TMPDIR 或 TMPDIR 所指向的目录(若可访问),无需手动预先 mkdir。
来源:Cadence Innovus What’s New 25.1《Innovus Display and Tools — Temporary Directory Configuration Enhanced》(Techpub, innovuswn.xml, 25.12)
原文摘要:
“In this release enhancement has been done to create the directory specified in FE_TMPDIR or TMPDIR, if accessible. The current TMPDIR setting order is
env(FE_TMPDIR) → env(TMPDIR) → . → /tmp. If it does not exist, the tool will create the directory according to the env variable (if set). Earlier, it did not perform the create directory step.”
六、ML 驱动流程:Cadence Cerebrus
适用工程师:数字 CAD 工程师、Flow 工程师
Cerebrus 在运行过程中会调度大量 Innovus、Genus 实例,每个 scenario 运行时工具需要数十 GB 的临时磁盘空间。
来源:Cadence Cerebrus User Guide《Cerebrus Directory Structure — TMP Directory》(Techpub, cerebrusUG 22.1x)
原文全文:
“The tools (Innovus, Genus etc.) run by your flow usually require a large (10’s of GBs) tmp disk space. In some compute farms, the /tmp disk space is insufficient than the requirement. In such cases, you need to set the temp dir to a path in the run area itself.
Run the following code to set the tmp directory to the current directory:
mkdir <Cerebrus run area>/tmp
setenv TMPDIR <Cerebrus run area>/tmpLink the tmp directory to a higher-level directory to avoid the NFS issues, which may occur when the tmp directory is within each scenario’s current directory.”
官方文档给出的方案是:当执行机 /tmp 空间不足时,在 run area 内(通常仍是 NFS 路径)创建一个统一的 tmp 子目录并设为 TMPDIR,然后将其 symlink 到上层目录。这样做的目的是避免每个 scenario 在自己的工作目录下各自创建 tmp 引发的 NFS 元数据竞争。
官方文档未明确要求将 Cerebrus 的 TMPDIR 指向执行机本地磁盘。若需进一步卸载 NFS I/O,可结合第一节的通用 TMPDIR 方法自行评估。
七、物理验证:Pegasus
适用工程师:版图工程师、数字 CAD 工程师(后端物理验证)
Pegasus 同样遵从 TMPDIR 环境变量控制临时文件位置:
setenv TMPDIR /local/ssd/$LSB_JOBID/pegasus_tmp
来源:Cadence ASK《Setting up Pegasus for Better Performance》(Article ID: a1O3w000009y0qeEAA,PDF 格式文档)
八、综合配置:作业调度器集成
在 LSF / SGE / Slurm 等作业调度环境中,推荐在 Job Wrapper 脚本中统一处理,自动为每个 job 分配独立的本地 scratch 空间,job 结束后自动清理。
8.1 LSF 示例(csh)
#!/bin/csh
# 使用 Job ID 创建隔离的本地 scratch 目录
set LOCAL_SCRATCH = /local/ssd/${LSB_JOBID}
mkdir -p ${LOCAL_SCRATCH}
# 通用设置(所有 Cadence 工具)
setenv TMPDIR ${LOCAL_SCRATCH}
# Innovus 专属(覆盖通用设置,优先级更高)
setenv FE_TMPDIR ${LOCAL_SCRATCH}/innovus
mkdir -p ${FE_TMPDIR}
# 执行实际的 EDA 工具命令
$*
# Job 结束后清理本地 scratch(可选,避免磁盘堆积)
rm -rf ${LOCAL_SCRATCH}
8.2 LSF + Xcelium 示例(含 -simtmp)
#!/bin/csh
set LOCAL_SCRATCH = /local/ssd/${LSB_JOBID}
mkdir -p ${LOCAL_SCRATCH}/xc_scratch
setenv TMPDIR ${LOCAL_SCRATCH}
# elaborate 阶段(产物写到 NFS 上的 xcelium.d,正常)
xrun -elaborate -f filelist.f
# 仿真阶段:subscratch 指向本地 SSD
xrun -R -simtmp ${LOCAL_SCRATCH}/xc_scratch
rm -rf ${LOCAL_SCRATCH}
九、快速参考表
| 工具 | 关键变量/选项 | 说明 | 来源 |
|---|---|---|---|
| 全部 Cadence 工具 | TMPDIR |
通用临时目录,所有工具均遵守 | ASK a1O0V000006AjQuUAK |
| Virtuoso ADE / Spectre | RDBCreatePolicy=TmpDir(默认) |
仿真 RDB 写本地 /tmp,每 50s 同步 NFS |
Cadence ASK, IC25.1 ADE Env Vars |
| Virtuoso ADE / Spectre | keepTmpRdbForReevaluation=t |
保留本地 RDB 副本,加速重评估 | Cadence ASK, IC25.1 ADE Env Vars |
| Xcelium | TMPDIR |
通用临时文件(SDF 解压等) | ASK a1O0V000006AjQuUAK |
| Xcelium 19.03+ | xrun -simtmp <dir> |
Subscratch 目录,独立控制,减少并行仿真 NFS 流量 | ASK a1O0V000009MpqvUAC + Xcelium UG |
| Genus | TMPDIR |
Shell 设置或 set env(TMPDIR) 在工具内设置 |
ASK a1O0V000006AkiaUAC |
| Innovus | FE_TMPDIR(首选)/ TMPDIR |
优先级:FE_TMPDIR > TMPDIR > . > /tmp | Innovus WN 25.1 Techpub |
| Cerebrus | TMPDIR |
需数十 GB 临时空间,如果本地/tmp目录空间不足时,建议设置TMPDIR指向有充足空间的 NFS目录。言外之意:如果本地/tmp目录足够,就可以充分利用本地的性能与空间了。 | Cerebrus UG 22.1x |
| Pegasus | TMPDIR |
DRC/LVS 物理验证工具,遵从通用机制 | ASK a1O3w000009y0qeEAA |
十、注意事项
-
本地磁盘空间规划:数字工具(尤其是 Innovus、Cerebrus 管理的流程)临时文件可达数十 GB,提前确认执行机本地磁盘(
/local/ssd)容量充足。 -
Job 隔离:多 job 共用同一执行机时,务必用
$LSB_JOBID(LSF)或$SLURM_JOB_ID(Slurm)等唯一标识符隔离 scratch 目录,避免不同 job 间文件冲突。 -
Job 清理:job 异常退出时本地 scratch 可能不会自动清理,建议通过调度器的
post_exec/epilog脚本强制清理,防止本地磁盘堆积。 -
Xcelium
xcelium.d:-simtmp仅控制 subscratch 目录;xcelium.d/(编译产物)本身仍写 NFS,这是期望行为(产物需跨节点可见)。 -
Innovus 25.1 以前版本:
FE_TMPDIR指定的目录需提前手动mkdir -p,否则工具会 fallback 到innovus_tmpdir。
参考资料
-
Cadence ASK《How to direct the simulation toolset to use a particular disk area for temporary files》
Article ID: a1O0V000006AjQuUAK
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000006AjQuUAK&pageName=ArticleContent -
Cadence ASK《ADE Environment Variables Reference IC25.1 — maestro.results RDBCreatePolicy》
(需登录 support.cadence.com,搜索 “RDBCreatePolicy”) -
Cadence ASK《ADE Environment Variables Reference IC25.1 — maestro.results keepTmpRdbForReevaluation》
(需登录 support.cadence.com,搜索 “keepTmpRdbForReevaluation”) -
Cadence Techpub《Xcelium Simulator User Guide — Changing the Storage Location of Scratch Area Files》
(需登录 support.cadence.com,产品:Xcelium AGILE) -
Cadence ASK《How to create a subscratch simulation directory under a user-specified path》
Article ID: a1O0V000009MpqvUAC
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000009MpqvUAC&pageName=ArticleContent -
Cadence ASK《How can I control the temporary directory used by Genus?》
Article ID: a1O0V000006AkiaUAC
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000006AkiaUAC&pageName=ArticleContent -
Cadence Techpub《What’s New in Innovus 25.1 — Innovus Display and Tools: Temporary Directory Configuration Enhanced》
innovuswn.xml, Product Version 25.12, November 2025
https://support.cadence.com/apex/techpubDocViewerPage?xmlName=innovuswn.xml&c_version=25.12&path=innovusWN/innovusWN25.12/Innovus_Display_and_Tools.html -
Cadence Techpub《Cerebrus User Guide — Cerebrus Directory Structure: TMP Directory》
cerebrusUG 22.1x
https://support.cadence.com/apex/techpubDocViewerPage?xmlName=cerebrusug.xml&c_version=22.1x&path=cerebrusUG/cerebrusUG22.1x/Cerebrus_Directory_Structure.html -
Cadence ASK《Setting up Pegasus for Better Performance》
Article ID: a1O3w000009y0qeEAA
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O3w000009y0qeEAA&pageName=ArticleContent