跳转至

SOP — Virtuoso 仿真数据落层(应用侧落层段)

  • 主题目录:sim_layering_20261012/
  • 执行日期:2026-10-12
  • 类型:C 类变更(改项目 .cdsinit)
  • 关联:docs/BASELINE.md §7.11(机制);lustre_ins/remove_local_mirror_20261012/SOP.md(前置阻塞解除)

1. 背景

Virtuoso ADE-XL 的仿真数据(netlist、PSF 波形)默认落 ~/cadence/simulation(由 NCSU CDK cdssetup/cdsenv:31 设定,/pdk 只读不可改)。 本次按 EDA 存储分层把它们分别落到 Tier1 与 Tier0:工程与网表落项目区(NFS 持久),大波形落 Lustre 共享临时层。 机制层面可行路径为 R2:在项目 .cdsinit 末尾追加 envSetVal,因在 NCSU 加载之后执行,能覆盖其默认值(见 docs/BASELINE.md §7.11)。

触发条件:前置阻塞(普通用户写 Lustre 被拒)已于 2026-10-06 修复、2026-10-12 服务端身份源去双轨,落层段具备实施条件。

2. 目标

项 可验证状态
验收 .28:/projects/design/rain01/proj1/cdssetup/.cdsinit 末尾含落层段;无头加载后 projectDir 与 saveResDir 返回分层目标
分层 projectDir -> /projects/design/rain01/proj1/simulation(Tier1 持久);saveResDir -> /mnt/lustre/scratch/users/rain01/adexl(Tier0 共享临时)
回归 无头加载退出码 0,无 *Error*

3. 前置条件

条件 检查方法 本次实测
.28 root 免密可达 remote_exec.py --hosts 192.168.31.28 ✅
/projects(NFS)、/mnt/lustre(Lustre)已挂载 findmnt -M ✅
目标目录可写 项目区属 rain01:design 2775;Lustre 用户目录属 rain01 ✅
Lustre 的 scratch/users(755 root)下需 root 建用户目录 ls -ld /mnt/lustre/scratch/users ✅ 见步骤 1

4. 影响范围

项 内容
主机 192.168.31.28(hpc-submit)
文件 /projects/design/rain01/proj1/cdssetup/.cdsinit(追加落层段);新建两个目标目录
停服 否。不改 Slurm 配置、不重启服务
在跑业务 变更时有一个长期运行的 Virtuoso GUI 会话(锁 ~/CDS.log),未受影响;无头验证用独立 -log 避免争锁
生效方式 新开会话生效;GUI 已开需重启 Virtuoso(.cdsinit 启动时加载)

5. 分步操作

实现体:无(一次性手工变更,单机)。

步骤 1:建目标目录

坑:/mnt/lustre/scratch/users 是 755 root:root,普通用户不能在其下建目录(POSIX 语义,非缺陷),须由 root 建用户目录并授权。

# Tier1 项目区子目录(客户端视角可写)
mkdir -p /projects/design/rain01/proj1/simulation
chown rain01:design /projects/design/rain01/proj1/simulation
chmod 2775 /projects/design/rain01/proj1/simulation

# Tier0 Lustre 用户目录(root 建,授给用户)
mkdir -p /mnt/lustre/scratch/users/rain01/adexl
chown -R rain01:design /mnt/lustre/scratch/users/rain01

步骤 2:备份并追加落层段

坑:envSetVal 段必须落在 NCSU 加载之后(即文件末尾),否则会被 NCSU 默认值覆盖;注释用英文(Cadence 以非 UTF-8 解析 .cdsinit,中文注释会逐行报 "Skipping")。

用 root 以追加方式写入(>> 不改属主,文件保持 rain01): 先行备份,再追加;追加前用 grep 判重保证幂等。

F=/projects/design/rain01/proj1/cdssetup/.cdsinit
cp -p "$F" "$F.bak.$(date +%Y%m%d-%H%M%S)"           # 备份(本次 .bak.20261012-011523,1641 B)
grep -q SIM-DATA-LAYERING "$F" || cat >> "$F" <<'SKILL'

;; --- SIM-DATA-LAYERING ----------------------------------------------------
;; Route ADE-XL simulation data onto the cluster storage tiers.
;;   projectDir -> Tier1 NFS /projects   (persistent: project, netlist, source)
;;   saveResDir -> Tier0 Lustre scratch  (shared transient: PSF waveform, large)
;; Placed AFTER the NCSU load so these envSetVal calls override cdsenv defaults.
;; NOTE: Lustre scratch is aged out (30 days); stage out final results to /projects.
envSetVal("asimenv.startup" "projectDir" 'string "/projects/design/rain01/proj1/simulation")
envSetVal("adexl.results" "saveResDir" 'string "/mnt/lustre/scratch/users/rain01/adexl")
;; --- end SIM-DATA-LAYERING ------------------------------------------------
SKILL

6. 验证

# ① 落层段存在、属主不变
grep -n SIM-DATA-LAYERING /projects/design/rain01/proj1/cdssetup/.cdsinit
ls -l /projects/design/rain01/proj1/cdssetup/.cdsinit     # 期望属主 rain01:design

# ② 无头加载(独立 log,避免与在跑 GUI 争 CDS.log 锁)
printf 'printf("PROJDIR=%%s\\n" envGetVal("asimenv.startup" "projectDir"))\nprintf("SAVEDIR=%%s\\n" envGetVal("adexl.results" "saveResDir"))\nexit()\n' > /tmp/chk_simlayering.il
su -s /bin/bash rain01 -c 'cd /projects/design/rain01/proj1/cdssetup && source /etc/profile.d/zzz_site_lmod.sh && module load cadence && module load virtuoso/IC06.17.700 && virtuoso -nograph -log /tmp/chk_simlayering.log -replay /tmp/chk_simlayering.il'
grep -aE 'PROJDIR|SAVEDIR' /tmp/chk_simlayering.log
验证项 结果(2026-10-12)
落层段写入 .cdsinit 1641 B -> 2371 B,属主 rain01:design
PROJDIR /projects/design/rain01/proj1/simulation
SAVEDIR /mnt/lustre/scratch/users/rain01/adexl
无头退出码 0(仅有红字警告,无 *Error*)

7. 回滚

备份位置:192.168.31.28:/projects/design/rain01/proj1/cdssetup/.cdsinit.bak.20261012-011523(1641 B)。 台账见本目录 backup/README.md。

F=/projects/design/rain01/proj1/cdssetup/.cdsinit
cp -p "$F.bak.20261012-011523" "$F"
grep -c SIM-DATA-LAYERING "$F"     # 期望 0

回滚后 Virtuoso 恢复落 ~/cadence/simulation(NCSU 默认)。新建的两个目标目录可保留(数据无损坏),如需清理由用户确认后删。

8. 风险说明

风险 等级 缓解
落层段未被加载(位置错误或 CDS_LOAD_ENV 非 CWD) 中 段落在末尾、NCSU 之后;无头验证确认生效
Lustre 层 30 天老化清掉波形 中 需长期保留的结果须 stage-out 回 /projects;SOP 与注释均已写明
GUI 已开会话不生效 低 属预期,重启 Virtuoso 即生效
站点模板/生成器未含该段 低 见「未做项」,仅项目副本已落;通用化待定

已同步到生成器与站点模板(口径:甲,通用参数化):落层段已写入生成器 pdk_integration_20260927/deployer.py::_render_templates() 与站点模板 /pdk/templates/.cdsinit,用通用写法(不硬编码用户):

envSetVal("asimenv.startup" "projectDir" 'string strcat(getWorkingDir() "/simulation"))
envSetVal("adexl.results" "saveResDir" 'string strcat("/mnt/lustre/scratch/users/" getShellEnvVar("USER") "/adexl"))

站点模板经 .venv/bin/python main.py apply 由 1641 B 更新为 2459 B(dry-run 仅 template:.cdsinit 一项待变更,其余全跳过;6 台客户端可见)。 临时设计目录无头验证:PROJDIR=<cwd>/simulation、SAVEDIR=/mnt/lustre/scratch/users/rain01/adexl。

依赖已处理(口径甲1,2026-10-12):/mnt/lustre/scratch/users 原为 755 root:root,普通用户不能自建 <user> 目录。现已参数化为 1777(sticky)并由 slurm_ins 的 storage_layout 幂等维护(tier0.users_dir_mode),用户可自助建自己的目录;非 rain01 用户(cy01 实测)已可自助建目录。见 slurm_ins/scratch_users_20261012/SOP.md。

附录:交付物与证据

  • 本目录:SOP.md、backup/README.md
  • 机制与已证伪路径:docs/BASELINE.md §7.11
  • 无头验证输出:.28:/tmp/chk_simlayering.log(含 PROJDIR/SAVEDIR 两行)

来源:/home/rain/Documents/eda_tools_ins/design/sim_layering_20261012/SOP.md | 最后更新:2026-10-12 01:27(由 build/sync.py 同步,请勿在站点侧修改)