当在使用 Cadence Virtuoso 进行模拟设计时,您可能会遇到以下两类性能问题:

  1. Maestro 视图打开缓慢 - ADE Assembler/Maestro 界面加载耗时过长
  2. Virtuoso 仿真时无响应 - 运行仿真时软件卡死或挂起

本文基于 Cadence 官方知识库文章 Article 20518370: “How to debug slowness or unresponsiveness while opening maestro view or running simulation from maestro”,提供系统化的调试步骤和解决方案。

适用版本

本文涵盖以下 Virtuoso 版本:

  • IC23.1 和 IC25.1: 支持 Health Monitor 图形化诊断工具
  • IC6.1.8 (ISR14+)ICADVM20.1.14+: 支持 Performance Diagnostics Tool
  • 所有版本: 基础诊断步骤和环境变量优化方法

常见性能问题场景

  • Layout 操作缓慢(Zoom、Pan、保存等)
  • Virtuoso 会话冻结或挂起
  • Schematic 的 Check and Save 操作耗时过长
  • 网表生成 (Netlisting) 时间过长或卡死
  • ADE 仿真提交后无响应

1. Maestro 视图打开缓慢的调试步骤

1.1 检查系统环境

验证操作系统支持

首先确认您的提交主机 (submission host) 和执行主机 (execution host) 使用的是受支持的操作系统版本。

运行系统配置检查工具

如果问题仅在特定机器或主机上出现,使用 checkSysConf 实用工具进行检查:

1
UNIX% <virtuoso_installation_path>/tools/bin/checkSysConf  IC23.1

该工具应成功通过检查,如果失败,需根据输出信息修复系统配置问题。

1.2 批处理模式启动测试

使用批处理模式 (batch mode) 启动 Virtuoso 以排除图形界面相关问题:

1
virtuoso -nograph

预期结果: 应成功启动且无错误或警告。

如果出现错误/警告: 可能是缺少字体、补丁、共享库等系统依赖,或 /etc/hosts 文件配置不正确。需要修复这些问题后再继续。

1.3 清理后台进程

停止可能干扰的后台 IPC 进程,然后重新启动 Virtuoso:

1
2
3
4
# 停止以下进程
pkill cdsServIpc
pkill cdsNameServer
pkill cdsMsgServer

注意:如在生产环境,请慎重操作。

1.4 检查特定 Maestro 会话问题

数据库加载问题

如果问题仅针对某个特定的 Maestro 会话:

  • 检查内存可用性: 大型数据库加载可能导致内存不足。查看系统日志中的内存警告。
  • 检查交换空间警告 (Swap Memory Warning): 交换空间不足会导致 Virtuoso 冻结和崩溃。请联系 CAD/IT 团队解决资源问题。

版本迁移问题

如果您是从旧版本/状态导入 Maestro 视图:

  • 创建该视图的副本并尝试打开副本,查看问题是否仍存在。

1.5 清理配置目录

尝试删除或重命名主目录或当前工作目录下的 .cadence 目录:

1
2
3
mv ~/.cadence ~/.cadence.bak
# 或
mv ./.cadence ./.cadence.bak

然后重新启动 Virtuoso 并测试。

1.6 检查预运行脚本 (Pre-run Script)

如果您的 Maestro 视图配置了预运行脚本:

  • 暂时移除该脚本,查看问题是否消失。
  • 如果问题消失,说明脚本存在性能问题,需要优化或重新编写。

1.7 禁用自动启动所有任务

如果 Maestro 视图打开耗时较长,检查 startMaxJobsImmediately 环境变量:

1
envGetVal("adexl.icrpStartup"  "startMaxJobsImmediately")

如果返回值为 t,在 .cdsinit 文件中将其设置为 nil:

1
envSetVal("adexl.icrpStartup"  "startMaxJobsImmediately" 'boolean nil)

然后启动新的 Virtuoso 会话并测试。

1.8 License Timeout 配置

如果您使用 111 License 的 LICENSE TIMEOUT 功能且希望自动回收空闲许可证:

什么是 LICENSE TIMEOUT 功能

LICENSE TIMEOUT 功能允许 Cadence 许可证服务器自动回收空闲应用程序占用的许可证。这确保许可证不会在用户离开办公桌或未主动使用工具时被不必要地占用。

配置步骤

A. 在许可证文件中引用 Options 文件

在许可证文件的 DAEMON 行中添加 options 文件路径:

1
2
3
4
### top of license file ###
SERVER Cadence cade7ce1 5280
DAEMON cdslmd /path/to/cdslmd  /path/to/options
...snippet omitted...

B. 在 Options 文件中定义 Timeout

Options 文件(通常位于 $CDSHOME/share/license/options)使用以下语法:

针对特定功能设置超时(如 Virtuoso 产品):

1
2
3
4
5
6
### options file ###
TIMEOUT Virtuoso_Layout_Suite_L 3600
TIMEOUT Virtuoso_Layout_Suite_XL 3600
TIMEOUT Virtuoso_Layout_Suite_GXL 3600
TIMEOUT Virtuoso_Schematic_Editor_L 3600
TIMEOUT Analog_Design_Environment_L 3600

对所有功能设置超时

1
TIMEOUTALL 3600

注意: 值 3600 是以为单位的时间(3600秒 = 1小时)

处理 “111” License

“111” 许可证是启动时检出的核心 Virtuoso workbench 许可证:

  • 释放条件: 要触发 111 许可证的空闲计数器,必须关闭所有基础架构作业(如 Schematic、Layout、Netlisting 和 DB 编辑器)
  • 机制: 一旦所有相关任务关闭且应用程序在指定超时时间内保持空闲,111 许可证将被检回

重要约束

  • 最小超时值: 允许的最小值为 3600 秒(1小时)。如果输入的值低于 3600,许可证服务器将自动覆盖并设置为 3600 秒
  • 生效方式: 对 options 文件的更改需要重启许可证守护进程才能生效
  • 崩溃恢复: 如果应用程序崩溃,可能无法释放许可证。可使用 lmutil lmremove 工具手动清理

参考: Article (11345648) - “How to set up license TIMEOUT feature”

1.9 检查 PostInstall 触发器

确认是否有 postInstall 触发器在打开 Maestro 视图时删除 .tmpADEDir_<user> 文件夹:

  • 如果存在此类触发器函数,请移除它。

1.10 优化 ADE 环境变量

.cdsinit 文件中设置以下变量以提升性能:

1
2
3
4
5
6
7
envSetVal("maestro.test" "autoSyncMPC" 'boolean nil)
envSetVal("adexl.test" "autoCopyCellviewVars" 'boolean nil)
envSetVal("adexl.gui" "disableConstraintsRead" 'boolean t)
envSetVal("adexl.test" "checkForUnsavedViewsUponRun" 'boolean nil)
envSetVal("adexl.test" "checkForNewCellviewVarsUponRun" 'cyclic "No")
envSetVal("auCore.misc" "findVariablesSkip" 'cyclic "extracted")
envSetVal("adexl.simulation" "checkInstanceBindings" 'boolean nil)

配置完成后,启动新的 Virtuoso 会话并打开 Maestro 视图。


2. Virtuoso 仿真时无响应 (Hang/Freeze) 的调试步骤

2.1 检查设计配置 (Config View)

如果设计使用了 Config View,配置遍历 (Config traversing) 可能耗时较长:

  • 测试方法: 切换到 Schematic 视图运行仿真,查看问题是否依然存在。
  • 如果切换到 Schematic 后问题消失,说明是 Config View 导致的性能问题。

2.2 检查模态对话框 (MODAL Dialog)

在打开 Maestro 视图时,检查是否有 模态对话框 弹出并等待用户操作:

  • 如果存在,修复初始化流程,避免弹出需要用户干预的对话框。

2.3 Extracted View 性能问题

如果使用寄生提取视图 (extracted view) 时,ADE Assembler 在 Validating 阶段挂起或耗时过长:

问题描述

当启动仿真时,ADE 进入 “Validating” 步骤可能耗时过长。这是因为 ADE 的默认行为是扫描整个设计层次结构以确保一致性,对于包含复杂寄生参数的设计来说,这在计算上非常昂贵。

根本原因

延迟主要由 ADE 在网表生成期间执行的以下后台检查引起:

  • 扫描层次结构查找新变量(cellview variables)
  • 检查层次结构中的未保存 cellview
  • 从 Constraint Manager 导入约束和匹配参数
  • 遍历设计自动复制 cellview 变量到 ADE 状态

解决方案

.cdsinit 文件中设置以下环境变量可显著改善验证时间:

重要: 这些设置必须在 .cdsinit 文件中才能生效,直接在 CIW 中输入不起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 禁用检查新 Cellview 变量
envSetVal("adexl.test" "checkForNewCellviewVarsUponRun" 'cyclic "No")

# 禁用检查未保存的视图
envSetVal("adexl.test" "checkForUnsavedViewsUponRun" 'boolean nil)

# 禁用约束读取
envSetVal("adexl.gui" "disableConstraintsRead" 'boolean t)

# 禁用自动复制 Cellview 变量
envSetVal("adexl.test" "autoCopyCellviewVars" 'boolean nil)

# 跳过 Extracted 视图中的变量查找
envSetVal("auCore.misc" "findVariablesSkip" 'cyclic "extracted")

# 禁用实例绑定检查
envSetVal("adexl.simulation" "checkInstanceBindings" 'boolean nil)

# 禁用 Smart View 自动同步(如果不使用 MPC Smart Views)
envSetVal("maestro.test" "autoSyncMPC" 'boolean nil)

技术说明

  • 变量搜索: 通过将 findVariablesSkip 设置为 "extracted",网表生成器在查找设计变量时会忽略寄生密集的 extracted 视图,这通常是期望的行为,因为变量通常在 schematic 中定义
  • Smart Views: 如果您不使用 Multi-Process Corner (MPC) Smart Views,禁用 autoSyncMPC 可防止不必要的同步开销

这些优化简化了预仿真检查过程,可在高复杂度的后端版图仿真中实现更快的启动时间。

替代方案: 考虑迁移到 SmartViewiDSPF 视图以获得更快的网表生成速度。

参考: Article (20257940) - “ADE Assembler hangs at validating step with extracted view”

2.4 网表生成耗时过长

重要提示: 进程可能并非真正卡死,而是仍在进行网表处理 (netlisting),特别是对于包含数百万实例 (instances) 的设计。

清理临时目录

尝试删除 .tmpADEDir 目录:

  1. 使用 ADE Assembler 工具栏中的 “Remove .tmpADEDir” 图标。
  2. 然后重新启动仿真。

2.5 作业控制模式 (Job Control Mode)

检查问题是否与特定的作业控制模式相关:

  • ICRP (Integrated Cluster Resource Pooling)
  • LSCS (LSF-based Centralized Scheduling)

推荐配置: 使用 LSCS 模式,可以在不同主机上进行仿真和网表生成,提供更好的资源管理。

2.6 本地与远程作业执行

测试本地执行

首先使用默认的 Job Setup Options 在本地运行作业:

  • 资源分配/不可用性和超时设置可能导致挂起。
  • 检查作业日志 (job log) 获取详细信息。

2.7 使用 ADE Service 和 Simulation Manager

对于大规模仿真设置,推荐使用新的 Simulation Manager(基于 LSCS):

Simulation Manager 简介

Simulation Manager 是一个允许分布式管理网表生成和仿真作业的系统。它使用专用的 ADE Broker 服务 (maeBroker) 来跟踪各个 Simulation Manager 服务 (simManager)。

关键优势:

  • 增强响应性: 将计算密集型任务(如网表生成)卸载到后台,防止 ADE Assembler 挂起
  • 持久化作业: 即使关闭 Virtuoso 会话,仿真作业仍会继续运行和管理
  • 作业重连: 用户可在重新打开 maestro cellview 时重新连接到正在进行或已完成的仿真作业
  • 灵活性: 支持单用户和多用户(团队)配置

设置步骤

1. 启动 ADE Broker(推荐由 CAD 管理员执行)

在远程主机上启动 ADE Broker 服务:

1
2
3
4
5
6
7
8
# 使用自动分配的端口
maeBroker -start-daemon

# 或指定特定端口
maeBroker -start-daemon -port <port-number>

# 如果默认位置有权限问题,指定数据库位置
maeBroker -start-daemon -db-name <path>

2. 客户端配置

在启动 Virtuoso 之前设置环境变量:

1
setenv CDS_MAE_BROKER_ADDRESS <brokerHost>:<portNumber>

3. ADE Assembler UI 设置

在 Virtuoso ADE Assembler 中:

  1. 打开 Job Policy Setup 表单
  2. Job Control Mode 下选择 LSCS
  3. 勾选 Use Simulation Manager 复选框

4. 自动 Broker 模式(备选方案)

如果未手动设置外部 broker,当选择 “Use Simulation Manager” 时,Maestro 会自动启动并无缝管理本地 broker。

配置和最佳实践

自动启用阈值: 可以配置 ADE Assembler 在达到一定作业数量后提示激活 Simulation Manager:

1
2
3
# 当作业数超过 100 时提示
envSetVal("maestro.simulation" "autoEnableSimManager" 'int 100)
# 默认值: -1(永不提示)

作业策略控制: 通过 SKILL 指定自定义作业策略:

1
envSetVal("maestro.simulation" "simulationServiceJobPolicy" 'string "your_policy_name")

上面设置好后,在 Job Policy Setup 里勾选上 LSCS 和 Use Simulation Manager。

image-20260104145823301

连接生命周期:

  • Simulation Manager 连接在仿真完成后释放
  • ADE Broker 连接在 Virtuoso 会话结束时关闭

参考: Article (20515209) - “How to set up Simulation Manager in ADE Assembler”

2.8 IC 23.1 ISR8/ISR9 网表冻结问题

受影响版本

  • IC23.1 ISR8
  • IC23.1 ISR9

问题描述

从 ADE Explorer 或 ADE Assembler 运行仿真时,Virtuoso 会话在网表生成阶段冻结(挂起):

  • 会话变得完全无响应
  • 强制用户手动终止并重启 Virtuoso 进程
  • 网表生成和仿真无法完成

根本原因

当设计中存在冲突的子电路名称或使用了保留名称时会出现挂起。网表生成器尝试通过重命名子电路来解决这些名称冲突(例如,如果同一单元的实例来自单个 schematic 视图内的两个不同库)。在受影响的版本(ISR8/9)中,此解析逻辑导致无限循环挂起

官方修复

此问题在 IC23.1 ISR10 及所有后续版本中已正式解决。建议用户升级到最新的可用 ISR。

IC23.1 ISR8/ISR9 的临时解决方案

Cadence 为这些特定版本提供了名为 NetlistHangPatch.ile 的 SKILL 补丁。

实施步骤:

  1. 下载并保存 NetlistHangPatch.ile 文件到环境中的已知路径
  2. 通过在 .cdsinit 文件中添加以下行来自动加载补丁:
    1
    
    load("/path/to/NetlistHangPatch.ile")
    
  3. 启动新的 Virtuoso 会话并继续网表生成和仿真

重要: 如果可能,强烈建议升级到 IC23.1 ISR10+ 以获得永久修复。

参考: Article (20517793) - “Virtuoso session freezes during netlist generation”

2.9 设置 ignoreDesignChangesDuringRun

确保 ignoreDesignChangesDuringRun 变量设置为 t:

当此变量设置为 true 时,系统会为每个测试预先创建网表,并保存为主网表 (master netlist) 到相应测试的 psf 顶层目录中。

注意: 使用 LSCS 作业控制模式时,此变量会自动设置为 t

手动设置方法 - 在 .cdsinit 文件中添加:

1
envSetVal("adexl.simulation" "ignoreDesignChangesDuringRun" 'boolean t)

3. 使用 Diagnostic Center 和 Health Monitor

Virtuoso 提供了专门的性能诊断工具来帮助调试缓慢、冻结和挂起问题。根据您使用的版本,可以选择不同的工具。

3.1 Health Monitor (IC23.1 和 IC25.1 推荐)

Health Monitor 是 Virtuoso IC23.1 及更高版本提供的图形化性能监控工具,专门用于诊断和解决性能问题。

访问方式

方法 1: 通过菜单

  1. 在 CIW (Command Interpreter Window) 中选择:ToolsDiagnostic Center
  2. 选择 Performance 标签页(即 Health Monitor)

方法 2: 通过 SKILL 命令

在 CIW 中直接输入:

1
perfInvokeHealthMonitor()

方法 3: 自动启动

.cdsinit 文件中添加perfInvokeHealthMonitor(),每次启动 Virtuoso 时自动打开 Health Monitor。

image-20260104143504258

主要功能

性能指示器

  • 红绿灯状态指示器: 根据当前 Session 的性能状态显示不同颜色
    • 🟢 绿色: 性能正常
    • 🟡 黄色: 检测到轻微延迟
    • 🔴 红色: 严重性能问题

调用栈记录 (Call Stack Recording)

  1. 开始记录: 点击 Start Recording 按钮
  2. 复现问题: 执行导致缓慢的操作(如打开 Maestro 视图、Zoom、保存等)
  3. 停止记录: 点击 Stop Recording 按钮
  4. 分析结果: 工具会生成高层摘要 (High-level Summary),按时间占比排序显示函数调用链

示例输出:

1
2
3
4
Total 173 non-idle callstacks ('*' >30%)
  45.2% - OpenAccess library read operations
  28.7% - Design rule checking
  15.3% - Graphics rendering

环境检查 (Check Environment)

Health Monitor 提供自动化环境扫描功能:

  • Environment Variables: 检查可能影响性能的环境变量设置
  • License Settings: 验证 License 配置是否合理
  • System Configuration: 检查系统资源和配置

设计检查 (Design Check)

自动识别可能导致性能下降的设计配置:

  • 大型设计文件
  • 复杂的层次结构
  • 过多的实例数量

处理完全无响应的 Virtuoso 会话

如果 Virtuoso 完全卡死(彻底 Freeze),无法通过界面操作:

外部唤起 Health Monitor

  1. 获取进程 ID: 使用 ps 命令找到 Virtuoso 的 PID
    1
    
    ps aux | grep virtuoso
    
  2. 从外部启动诊断工具:
    1
    
    cdsPerfDiag -p <PID>
    
  3. 优雅终止进程: 在弹出的 Diagnostics 窗口中,点击 “Terminate Virtuoso” 按钮

  4. 填写原因: 输入卡死原因(这将记录在日志中)

  5. 收集诊断数据: 系统会在终止前收集最近 10 秒的调用栈和 top 命令输出,生成 hangReport

重要: 使用此方法比直接 kill -9 能提供更多的调试信息,有助于后续问题分析。

测试卡死场景

可以通过在 CIW 中执行死循环来模拟卡死状态,测试诊断工具:

1
while(t nil)

然后从外部使用 cdsPerfDiag -p <PID> 进行诊断。

3.2 Performance Diagnostics Tool (旧版本)

对于 IC6.1.8 (ISR14+)ICADVM20.1.14+ (但低于23.1)版本的,使用 Performance Diagnostics Tool。

安装与访问

首次安装:

  1. 在 CIW 中选择:ToolsPerformance DiagnosisInstall
  2. 等待安装完成

image-20260104143704807

后续使用:

  1. 在 CIW 中选择:ToolsPerformance DiagnosisControl

img image-20260104143807658

主要功能

image-20260104144053299

image-20260104144110818

  • Environment/Design/Library Checking: 环境/设计/库 检查
  • Time Tracking & Tracing: 时间追踪和调用栈跟踪
  • Terminate Virtuoso: 终止挂起的会话并收集诊断数据
  • Expert Mode: 提供高级工具访问
    • pstack (gstack): 打印调用栈
    • strace: 系统调用跟踪
    • Debugger (gdb): 调试器

3.3 诊断日志存储位置

所有诊断工具生成的日志文件默认存储在:

1
<current_working_directory>/.cadence/perf/

日志文件包括:

  • 调用栈记录 (Call stacks)
  • 性能摘要 (Performance summaries)
  • 挂起报告 (Hang reports)
  • 系统状态快照 (System snapshots)

在提交技术支持案例时,请提供此目录下的所有相关日志文件。

3.4 更旧的版本

Virtuoso IC6.1.7或以上都可用。这个utility默认没有加载,加载方式为

1
2
load(strcat(car(getInstallPath()) "/samples/perfUtil/perfUtilInit.il"))
_perfInstallUtil()

image-20260104145118165

image-20260104145138409

image-20260104145225488

image-20260104145323276


4. 高级调试工具

4.1 使用 pstack 实用工具

pstack 可以打印进程所有线程的函数调用堆栈列表,帮助了解进程在特定时刻的操作:

启用详细日志,在 CIW 中设置:

1
2
3
_stacktrace = 10
sstatus(errsetTrace t)
_axlDebugFlag = t

使用方法:

  1. 记录初始 pstack
  2. 等待一段时间
  3. 再次记录 pstack
  4. 对比两次结果,查看进程是否改变操作或卡在同一点

4.2 使用 SKILL Profiler

Virtuoso SKILL Profiler 可以找出性能问题所在:

启动步骤:

  1. 在 CIW 中选择: ToolsSKILL IDE
  2. 在 SKILL IDE 中导航到: WindowsAssistantsProfiler
  3. 开始记录,执行缓慢的操作,然后停止记录
  4. 分析结果,找出耗时最多的函数调用

5. 提交技术支持案例

如果上述步骤都无法解决问题,请通过 https://ask.cadence.com 提交技术支持案例,并附上以下信息:

5.1 Performance 日志

使用性能诊断工具生成 perf log:

Health Monitor 视频教程

Cadence 提供了详细的视频教程来演示如何使用 Health Monitor 工具排查性能问题:

视频标题: Troubleshooting Issues with Health Monitor
适用版本: Virtuoso IC23.1
涉及内容:

  • 识别性能瓶颈的方法
  • 会话维护和优雅终止无响应会话的技巧
  • Layout、Schematic 和 ADE 中的特定视图性能故障排查
  • IC23.1 中引入或更新的诊断功能

视频链接: Troubleshooting Issues with Health Monitor (视频教程)

相关工具和文档

  • Using the Performance Diagnostic Tool
  • What Is the Health Monitor?
  • What Is the Diagnostic Center?
  • Reporting Slowness Using the Health Monitor Tool

5.2 相关日志文件

提供以下日志文件:

  • CDS.log 文件
  • Netlister 日志文件 (netlister log file)
  • 仿真日志文件 (simulation log file)
  • Simulation Monitor 日志
  • Expression Evaluator 日志文件

5.3 环境配置文件

导出 cdsenv 文件:

  1. 在 Virtuoso 主界面选择: OptionsCdsenv Editor
  2. 选择: FileSave
  3. 保存文件并提供给支持团队

5.4 相关参考资源

Cadence 官方提供了以下资源帮助诊断性能问题:

视频教程:

  • Using the Performance Diagnostic Tool
  • Using the Health Monitor
  • Troubleshooting Issues with Health Monitor

相关文章:

  • Debugging Virtuoso Session – Basic Tips and FAQs
  • How to identify slowness from the File System when launching Virtuoso

总结

调试 Maestro 视图打开缓慢和 Virtuoso 仿真无响应问题需要系统化的方法:

  1. 从系统环境开始 - 验证 OS 支持、系统配置和依赖
  2. 逐步排除 - 从简单到复杂,从本地到远程
  3. 优化配置 - 通过环境变量调优性能
  4. 使用诊断工具 - pstack、SKILL Profiler、Health Monitor
  5. 寻求支持 - 准备详细的日志和环境信息

通过遵循这些步骤,大多数性能问题都可以得到有效解决。