芯片设计的各类 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 .nctmpdir in /tmp for decompressed files (SDF, source files). Use setenv TMPDIR <some_path>/mytmpdir to 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.argsxmsim.envxrun.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_TMPDIRTMPDIR 所指向的目录(若可访问),无需手动预先 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>/tmp

Link 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

十、注意事项

  1. 本地磁盘空间规划:数字工具(尤其是 Innovus、Cerebrus 管理的流程)临时文件可达数十 GB,提前确认执行机本地磁盘(/local/ssd)容量充足。

  2. Job 隔离:多 job 共用同一执行机时,务必用 $LSB_JOBID(LSF)或 $SLURM_JOB_ID(Slurm)等唯一标识符隔离 scratch 目录,避免不同 job 间文件冲突。

  3. Job 清理:job 异常退出时本地 scratch 可能不会自动清理,建议通过调度器的 post_exec / epilog 脚本强制清理,防止本地磁盘堆积。

  4. Xcelium xcelium.d-simtmp 仅控制 subscratch 目录;xcelium.d/(编译产物)本身仍写 NFS,这是期望行为(产物需跨节点可见)。

  5. Innovus 25.1 以前版本FE_TMPDIR 指定的目录需提前手动 mkdir -p,否则工具会 fallback 到 innovus_tmpdir


参考资料