Calibre nmDRC Results(19-1)

本文基于 Calibre v2017.1 官方手册,聚焦运行日志的核心模块解读不同运行模式(单线程 / MT/MTflex/ 超缩放)的日志差异,提炼关键信息用于快速调试、性能分析和多线程运行监控,避免重复基础内容,直接提供实战级解读指南。


一、运行日志核心模块

DRC 应用会输出运行日志 (transcript)、结果数据库摘要报告(若指定)。运行日志具备所有读取几何数据库的 Calibre 批处理工具的通用特性。

Calibre 应用会生成一份会话日志,展示不同运行时模块的统计信息。

1.1 头部信息

日志头部提供以下信息:Calibre 版本、主机、Calibre 可执行文件及作业信息。

  1. 第一行显示运行使用的 Calibre 版本:// Calibre <version> <time stamp>

  2. 以下行显示操作系统、主机名、系统版本及构建信息:// Mentor Graphics software executing under <architecture> // Running on <OS> <hostname> <version> <build>.

  3. 以下行显示可执行文件路径、命令行选项及进程 ID(PID):// Running <version>/pkgs/icv/pvt/calibre -drc -hier rules
    // Process ID: 29097

  4. 以下行显示作业开始时间,以及用于运行时计算(需要许可证的计算)的 CPU 数量:// 开始时间:// Starting time: <time stamp>
    //
    // Running on 1 CPU (pending licensing)

耗时从开始时间起计算。

关键内容 排查要点
Calibre 版本 & 时间戳 确认版本是否与规则文件兼容
命令行参数(-drc/-hier/-turbo/-hyper/-remotefile 验证运行模式(层级化 / 多线程 / 超缩放 / MTflex)是否正确配置
CPU 核心数(Running on N CPUs 确认多线程核心数是否与预期一致
进程 ID(PID) 用于定位运行进程(如强制终止时)

2.1 规则文件编译

日志中的 **"STANDARD VERIFICATION RULE FILE COMPILATION MODULE"** 部分包含以下信息:规则文件相关信息、Calibre 环境状态。

  1. 规则文件路径:--- rule file = home/rule_files/rules

  2. 规则文件内容:规则文件内容会回显到日志中。若规则文件采用编译时 Tcl 验证格式(TVF),默认情况下 TVF 代码不会展开为 SVRF 格式。随后会显示所有遇到的编译错误。

  3. 编译所需的 CPU 时间和实际时间:若编译成功,会显示如下行:--- STANDARD VERIFICATION RULE FILE COMPILATION MODULE COMPLETED.
    CPU TIME = 0 REAL TIME = 0 LVHEAP = 1/3/4时间和 LVHEAP 统计信息的定义见 "版图数据输入" 章节。

  4. 环境变量与许可证信息:随后会列出所有 CALIBRE_* 环境变量,以及许可证获取信息和当前运行的工具。

    复制代码
    --- CALIBRE_* ENVIRONMENT VARIABLES:
    <variable list>
    -------------------------------------------------------------------
    -------------------------------------------------------------------
    ----- CALIBRE::DRC-H - LICENSING MODULE -----
    -------------------------------------------------------------------
    -------------------------------------------------------------------
    // Applying licensing policy...
    // <feature> license acquired.
    // <feature> license acquired.
    ...
    // Licensed Products
    // -----------------
    // Base products running on <n> cores:
    // - DRC (Hierarchical)

2.2 版图数据输入

日志中的 **"CALIBRE LAYOUT DATA INPUT MODULE"** 部分包含以下信息:版图系统、放大倍数及版图统计信息。本节内容基于层次化运行数据展开说明。

版图数据信息分为以下子部分展示:

  1. 版图系统文件摘要信息 示例:

    plaintext

    复制代码
    -------------------------------------------------------------------
    ----- OASIS FILE SUMMARY INFORMATION -----
    -------------------------------------------------------------------
    OASIS FILENAME: test.oas
    OASIS VERSION: 1.0
    DATABASE PRECISION: 1000
    MAGNIFICATION: 1
  2. 单个单元的版图输入数据 此部分展示数据库中所有单元的统计信息:单元名称、实例数量、阵列记录数、多边形记录数、路径记录数及文本记录数。版图读取的统计信息以表格形式呈现,表头示例如下:单元名称 实例数 阵列数 多边形数 路径数 文本数若适用,还会显示其他信息,例如:运行未使用数据的来源层、空层信息。上述信息之后,会显示如下行:CELL NAME PLACEMENTS ARRAYS POLYGONS PATHS TEXTS

    • CPU 时间:CPU 完成该模块所需的总时间(秒),结果四舍五入至最接近的整数。

    • 实际时间:完成该模块所经过的时钟时间(秒),结果四舍五入至最接近的整数。

    • LVHEAP:以兆字节为单位的内存数据,定义见 "LVHEAP 统计信息" 章节。接下来,会显示构建 Calibre 内部数据库所使用的各种算法,以及受该算法影响的单元名称和其他数据。

  3. 用于连通性提取的文本对象 此部分列出用于连通性分析的文本对象,这些对象位于 Layout TextText 语句指定的层上。可通过 Text Print Maximum 语句控制此处报告的对象数量。

  4. 用于 With Text 操作的文本对象 此部分列出位于 [Not] With Text 操作指定层上的文本对象。

  5. 用于 Expand Text 操作的文本对象 此部分列出参与 Expand Text 操作的文本对象。

  6. 用于 CAPI 操作的文本对象

  7. **端口(仅 Calibre nmLVS / Calibre nmLVS-H)**此部分列出对应工具的端口信息。

  8. 层读取摘要(简单层几何图形) 此部分展示简单层编号,以及在这些层上读取的几何图形数量。示例:

    plaintext

    复制代码
    -------------------------------------------------------------------
    SIMPLE LAYER GEOMETRIES
    -------------------------------------------------------------------
    4 34669
    5 65853
    6 13525
    35 2393
    36 3732

    注意Calibre 工具仅读取运行所需的层,可能并非版图数据库中的所有层。运行所需的层是指:执行规则检查生成输出,或进行电路提取时需要的层。

  9. 层读取摘要(原始层几何图形) 此部分展示以下层的统计信息:在规则文件的 Layer 语句中声明、且运行所需的 Calibre 层。

    • 初始几何图形数:Calibre 处理前的几何图形数量,先显示层次化计数,括号内为扁平化计数。

    • 最终几何图形数:Calibre 处理输入数据并构建自身数据库表示后的几何图形数量。示例:


      ORIGINAL LAYER INITIAL GEOMETRIES FINAL GEOMETRIES

      M1METAL 17257 (27524) 18493 (27524)
      CONTACT 68246 (132621) 69434 (132621)
      POLY_LAYOUT 34669 (66488) 43862 (66488)

  10. **层读取摘要(用于连通性提取的文本)**此部分列出连通性提取所需的简单层和文本对象。

  11. 层读取摘要(用于 With Text 操作的文本) 此部分列出 [Not] With Text 层操作所需的简单层和文本对象。

  12. 层读取摘要(用于 Expand Text 操作的文本) 此部分列出 Expand Text 操作所需的简单层和文本对象。

  13. 层读取摘要(用于 CAPI 操作的文本)

  14. 单元与实例摘要(仅层次化应用) 此部分根据 Calibre 的视角,汇总各类单元信息:

    • 用户单元:原始设计中的单元。
    • 伪单元:Calibre 为层次化管理创建的单元。同时显示层次化实例数和扁平化实例数。
  15. 版图数据输入模块摘要 此部分报告该模块的汇总信息。部分需要说明的关键项如下:

    • 简单层:由单个层号组成的绘制层。
    • 原始层:由简单层或简单层集合组成的绘制层。
    • 数据库范围:Calibre 运行实际所需层的左下角和右上角的 x、y 坐标。该范围不一定是原始版图数据库的范围,因为 Calibre 仅读取运行实际所需的层。
    • 连通性提取文本深度 :规则文件中 Text Depth 语句的设置值,或其默认值。表示读取连通性提取文本对象的层次化深度。
    • 几何图形标记 :显示本次运行启用的 SVRF Flag 系列语句。
    • 排除单元 :显示规则文件中 Exclude Cell 语句排除的单元。
    • 版图基础层 :规则文件中 Layout Base Layer 语句定义的器件级层。若值为 "未指定",表示规则文件中未定义该语句。
    • 版图顶层 :规则文件中 Layout Top Layer 语句定义的顶层。若值为 "未指定",表示规则文件中未定义该语句。

2.2.1 限制文本对象输出

在日志中,Calibre 应用会打印本次运行中所有用于连通性提取的文本对象。若此类对象数量过多,可使用 Text Print Maximum 规范语句,限制每个块中打印的对象数量。

2.2.2 层次化与扁平化计数

日志和摘要报告文件(若指定)均会提供许多与派生层统计信息无关的统计数据。在层次化应用中,这些统计数据以一对数字呈现,第二个数字置于括号内:

  • 第一个数字:层次化计数
  • 第二个数字:(估计的)扁平化计数

示例:--- TOTAL GEOMETRIES WRITTEN TO ORIGINAL LAYERS = 866804 (6508994)

估计的扁平化对象数量取决于单元实例中重叠和接触对象的数量,这些对象在布局中实例化时会经历各种变换,可能与实际的扁平化对象计数存在差异。

2.3 结果数据库初始化部分

日志的结果数据库初始化部分,展示 Calibre nmDRC 应用的结果数据库相关规则文件设置。

各项设置及其说明如下:

设置项 说明
全局 DRC 结果数据库文件 显示 DRC Results Database 语句指定的路径名和类型
全局每个规则检查的最大结果数 显示 DRC Maximum Results 语句的设置值
全局每个结果多边形的最大顶点数 显示 DRC Maximum Vertex 语句的设置值
检查文本映射 显示 DRC Check Text 语句的设置值
保留空规则检查 显示 DRC Keep Empty 语句的设置值
DRC 结果放大倍数 显示 DRC Magnify Results 语句的设置值
DRC 结果数据库精度 显示 DRC Results Database Precision 语句的设置值
所有上述设置 显示规则文件中 DRC Results DatabaseDRC Check Map 语句的设置值

二、 执行流程

**"Calibre:: 执行模块"** 部分报告以下内容:层派生、规则检查执行、连通性提取、工具特定流程、各类事件日志、警告信息、汇总信息。同时报告运行参数,例如:每个检查的最大结果数、每个结果多边形的最大顶点数等。

2.1 层统计信息

在执行模块中生成层时,生成该层的操作会打印关于此派生层的统计信息。不同 Calibre 应用中,层的统计信息示例存在差异。

日志中所有时间统计信息的定义一致:

  1. CPU 时间:CPU 完成该模块所需的时间(秒),结果四舍五入至最接近的整数。

  2. 实际时间:完成该模块所经过的时钟时间(秒),结果四舍五入至最接近的整数。若操作涉及多个 CPU,CPU 时间可能大于实际时间。

  3. 耗时:自日志头部的开始时间起经过的时钟时间(秒)。耗时会考虑许可证获取时间,以及通过网络读写数据的时间。

若要为每个派生层打印当前时间戳,可将环境变量 CALIBRE_PRINT_TIME_STAMPS 设置为任意值(包括空值)。当前时间戳会在耗时之后的括号中输出,示例如下:CPU 时间 = 2 实际时间 = 0 LVHEAP = 22/69/69 已完成操作 = 191 / 193 耗时 = 52 (2013/05/01 12:32:23)

2.2 扁平化处理中的层统计信息

日志中的某些统计信息与层的扁平化处理相关。

层统计信息示例

复制代码
nplus = diff NOT plus
---------------------
nplus (TYP=1 CFG=1 ECT=504382 OCT=381317 SRT=1 CMP=T MPN=14231
CPU TIME = 140 REAL TIME = 142 LVHEAP = 40/55/56 OPS COMPLETE = 34 OF 589
ELAPSED TIME = 987

该操作生成了层 nplus,耗时 140 个 CPU 秒、142 个实际时间秒。这是总共 589 个层操作中的第 34 个已完成操作。自运行开始起的耗时为 987 秒。LVHEAP 的解释见 "LVHEAP 统计信息" 章节。

报告格式中的其他参数说明:

  1. 类型(TYP)nplus 层的类型为 1。类型定义如下:

    • 1:派生多边形层
    • 2:派生边层
    • 3:派生错误层
  2. 配置(CFG)nplus 层的配置为 1。配置定义如下:

    • 0:既非多边形也非节点
    • 1:多边形
    • 2:节点
    • 3:多边形和节点
  3. 边计数(ECT)nplus 层上的边数量为 504382。该计数不包括垂直边(类型 1 层不存储垂直边,但类型 2 层会存储)。

  4. 对象计数(OCT):该层上的对象数量为 381317。

  5. SRT 和 CMP:内部统计信息。

  6. 最大多边形数(MPN)nplus 层上的最大多边形编号。该参数针对类型 1、配置为 1 或 3 的层报告。对于层选择器,该值可能与层上的实际多边形数量不一致,但对于层构造器,通常是一致的。

对于错误层(类型 = 3),报告格式略有不同,示例:

复制代码
Rule23a::<1> = EXT nplus < 1.4 SINGULAR
--------------------------------------------------------------------
Rule23a::<1> (TYP=3 ECT=4 CCT=2)
CPU TIME = 51 REAL TIME = 51 LVHEAP = 49/59/59 OPS COMPLETE = 34 OF 589
ELAPSED TIME = 146

报告第三行的参数与前文说明一致。

Rule23a::<1> 表示 DRC 规则检查 Rule23a 中的第一个输出操作;而 Rule34::X 表示 DRC 规则检查 Rule34 中本地定义的层 X。本示例中的 :: 表示该层的作用域仅限于其所在的规则检查。任何形式为 TMP<数字>(可能带有本地作用域)的层名称,均为用于展开隐式层定义的内部名称。

报告中的其他参数说明:

  • 边簇计数(CCT):边簇的数量,仅针对类型 3 的对象报告。
  • 边计数(ECT):构成边簇的独立边的总数。

注意单个块中可能出现多个操作,表示层操作的并发执行。示例:

plaintext

复制代码
5.4.2.2::<1> = EXT poly < 1.2 SINGULAR
5.8.3::pg24 = EXT poly < 2.4 REGION OPPOSITE
5.4.1::<1> = INT poly < 0.98
-------------------------------------------------------------------------
5.4.2.2::<1> (TYP=3 ECT=0 CCT=0)
5.8.3::pg24 (TYP=1 CFG=0 ECT=55264 OCT=32611 SRT=1 CMP=T MPN=0)
5.4.1::<1> (TYP=3 ECT=0 CCT=0)
CPU TIME = 383 REAL TIME = 388 LVHEAP = 58/61/63 OPS COMPLETE = 34 OF 589
ELAPSED TIME = 787

上述示例中的三个操作已并发执行。

2.3 层次化处理中的层统计信息

运行日志中的某些统计信息与层的层次化处理相关。

示例

复制代码
nplus = sdm NOT ppm
-------------------
nplus (层次化 类型=1 配置=1 层次化几何图形数=4578 扁平化几何图形数=316325 层次化边数=137654 扁平化边数=37475542 VHC=F VPC=F)
CPU 时间 = 4 实际时间 = 4 LVHEAP = 27/31/31 已完成操作 = 34 / 589 耗时 = 982

第一行显示层派生关系。第二行以派生层名称开头,层次化(HIER) 表示该层具有层次化实例化。若 nplus 为独占扁平化实例化,其统计信息与 Calibre nmDRC 一致。若该层为双重实例化,则会同时报告扁平化和层次化统计信息。

HIER 形式有多种变体:

  • HIER:表示 "自然" 层次化实例化。
  • HIER-FMF:表示全合并形式的层。
  • HIER-PMF:表示部分合并形式的层。
  • HIER-LSL:表示 "大形状" 层(例如数据库范围),会触发特殊的内部优化。

报告中的其他参数说明:

  1. 类型(TYP):与扁平化处理中的定义一致。

  2. 配置(CFG):与扁平化处理中的定义一致。

  3. 层次化几何图形数(HGC):层上的对象数量,按层次化计数(即每个单元计数一次)。

  4. 扁平化几何图形数(FGC):层上的估计扁平化对象数量。计算方式:对每个单元,将单元内的对象数量乘以该单元在层次结构中的扁平化实例总数,然后对所有单元求和。该值为估计值,因为计算时未考虑单元间的几何图形合并。对象包括:类型 0 和 1 的多边形、类型 2 的边、类型 3 的边簇。估计的扁平化对象数量取决于单元实例中重叠和接触对象的数量,可能与实际的扁平化对象计数存在差异。

  5. 层次化边数(HEC)

    • 对于原始和派生多边形层(类型 1):HGC 计数的多边形上的总边数。

    • 对于派生边层(类型 2):HECHGC 相同。

    • 对于派生错误层(类型 3):HGC 计数的边簇上的独立边总数。对于多边形层,HECHGC 更能准确衡量层的实际几何大小或密度,因为一个具有 N 条边的多边形在 HGC 中仅计数一次,与 N 的大小无关。

  6. 扁平化边数(FEC):层上的估计扁平化边数量。计算方式:对每个单元,将单元内的边数量乘以该单元在层次结构中的扁平化实例总数,然后对所有单元求和。该值为估计值,因为计算时未考虑单元间的边合并。包括类型 2 的边和类型 3 的边簇。估计的扁平化边数量取决于单元实例中重叠和接触边的数量,可能与实际的扁平化边计数存在差异。

  7. VHC 和 VPC:标识层的连通性状态,为内部统计信息。

注意 不会报告扁平化统计信息 MPN(最大多边形数)。

第三行显示生成该层所需的 CPU 时间和实际时间(秒)、LVHEAP 统计信息,以及在本次运行所需的总层操作数中已完成的操作数。

2.4.LVHEAP 统计信息

LVHEAP 数值会随日志中所有派生层和结果层的统计信息一起显示,用于报告 Calibre 应用的近似当前内存使用情况。当层基于内存时,这些应用完全在内存中运行。

内存使用情况报告包含三个数值,以兆字节(2^20 字节)为单位。示例:LVHEAP = 28/47/49

  • 第一个数值:报告时的当前内存使用量
  • 第二个数值:应用已分配的总内存量
  • 第三个数值:截至报告时,运行过程中已分配的最大内存量

通常,第三个 LVHEAP 数值最大。第二个和第三个数值有时会相等。

DRC 日志的末尾会显示基于层操作类别的数据,这些性能信息对规则文件优化有帮助。

根据运行过程中使用的层操作和连通性操作,会看到如下类型的报告:

复制代码
Cumulative ONE-LAYER BOOLEAN Time: CPU = 0 REAL = 0
Cumulative TWO-LAYER BOOLEAN Time: CPU = 1 REAL = 3
Cumulative POLYGON TOPOLOGICAL Time: CPU = 2 REAL = 4
Cumulative POLYGON MEASUREMENT Time: CPU = 0 REAL = 0
Cumulative SIZE Time: CPU = 0 REAL = 0
Cumulative EDGE TOPOLOGICAL Time: CPU = 1 REAL = 2
Cumulative EDGE MEASUREMENT Time: CPU = 0 REAL = 0
Cumulative STAMP Time: CPU = 4 REAL = 6
Cumulative ONE-LAYER DRC Time: CPU = 10 REAL = 11
Cumulative TWO-LAYER DRC Time: CPU = 7 REAL = 8
Cumulative NET AREA (RATIO) Time: CPU = 6 REAL = 8
Cumulative DENSITY Time: CPU = 0 REAL = 0
Cumulative MISCELLANEOUS Time: CPU = 34 REAL = 36
Cumulative CONNECT Time: CPU = 1506 REAL = 1620
Cumulative RDB Time: CPU = 7 REAL = 12

各项说明如下表所示:

表 累计运行时统计信息

类别 报告的操作
单一层布尔运算 AND、OR、XOR
两层布尔运算 AND、NOT、OR、XOR
多边形拓扑运算 [Not] Cut、[Not] Enclose、[Not] Inside、[Not] Interact、[Not] Outside、[Not] Touch
多边形测量运算 [Not] Area、[Not] Donut、[Not] Enclose Rectangle、Perimeter、Holes、[Not] Rectangle、Vertex
尺寸运算 Size
边拓扑运算 Coincident Edge、Inside Edge、Outside Edge、Touch Edge 系列操作;OR Edge
边测量运算 [Not] Angle、Convex Edge、Expand Edge、[Not] Length、Path Length
标记运算 Stamp
单一层 DRC External、Internal
单一层 DRC (A) Enclosure、External、Internal(两层操作,其中输入层实际为同一层的别名)
两层 DRC Enclosure、External、Internal
网络面积(比率) Net Area、Net Area Ratio、Net Area Ratio Accumulate、Net Area Ratio Print
密度运算 Density
TDDRC TDDRC
DFM 复制 DFM Copy
杂项 DFM DFM Text、DFM Stamp
DFM 属性 DFM Property、DFM Property Merge
DFM RDB DFM RDB
DFM 间距 DFM Space
杂项运算 Copy、Deangle、Drawn 系列操作、Expand Text、Extent、Extent Cell、Extent Drawn、Extents、Flatten、Grow、[Not] Inside Cell、Magnify、Merge、[Not] Net、Net Interact、Offgrid、Ornet、Push、Rectangle Enclosure、Rectangles、Rotate、Shift、Shrink、Snap、[Not] With Edge、[Not] With Neighbor、[Not] With Text、[Not] With Width
连通性运算 Connect、Sconnect
RDB 结果数据库生成,包括使用 RDB 关键字创建的数据库

以下行报告整个执行模块的 CPU 时间和实际时间(秒):-

复制代码
--- CALIBRE::DRC-H EXECUTIVE MODULE COMPLETED. CPU TIME = 47
REAL TIME = 49

以下行报告运行过程中执行的规则检查数量,该数量受 DRC [Un]Select Check 语句影响:

复制代码
--- TOTAL RULECHECKS EXECUTED = 7

以下行报告从已执行规则检查中生成的结果总数:

复制代码
--- TOTAL RESULTS GENERATED = 7000 (9006)
  • 第一个数字:结果数据库中显示的层次化结果总数 ,该数量受 DRCERC Maximum Results 语句控制。
  • 括号内的数字:扁平化结果数,该数值大于或等于第一个数字。

以下行报告 DRC Results Database 语句中指定的结果数据库文件名和类型:

复制代码
--- DRC RESULTS DATABASE FILE = drc_results (ASCII)

以下行报告整个运行的 CPU 时间和实际(时钟)时间(秒),以及运行完成的时间戳:

复制代码
--- CALIBRE::DRC-H COMPLETED - <time stamp>
--- TOTAL CPU TIME = 93 REAL TIME = 110

以下行报告运行过程中用于执行计算的 CPU 数量(即计入许可证使用的处理器):

复制代码
--- PROCESSOR COUNT = 1

以下行报告 DRC 或 ERC 摘要报告文件的位置(若指定):

复制代码
--- SUMMARY REPORT FILE = drc_summary

三、基于运行模式的日志特性

Calibre 多线程运行模式具有特定的日志特性。其中部分特性在各种模式中通用,其他特性则存在差异。

3.1 启用超大规模的 MT 和 Calibre MTflex 模式

本节所述的大多数特性,在启用超大规模的 MT 和 Calibre MTflex 日志中均存在。若有例外,会特别指明为 MT 模式。

Calibre MTflex 日志的特定特性描述见 "启用超大规模的 Calibre MTflex 模式的独特日志特性" 章节。若运行于 MT 或 Calibre MTflex 模式,建议启用超大规模(-hyper 选项)。

3.1 头部信息

以下是启用超大规模的 MT 运行生成的头部信息日志示例:

复制代码
// Running home/pkgs/icv/pvt/calibre64 -drc -hier -turbo -hyper rules
//
// Starting time: <time stamp>
//
// HYPERSCALING ENABLED with 4 pseudo HDBs.
// Running on 4 CPUs (pending licensing)
//
// LITHO operations available for use on 4 CPUs (pending licensing)
//
// Initializing MT on HDB 0: 0
// Creating log for pseudo HDB 1 on host, logfile = /path/
CalibreHDBLog.host.cpuid
// Creating log for pseudo HDB 2 on host, logfile = /path/
CalibreHDBLog.host.cpuid
// Creating log for pseudo HDB 3 on host, logfile = /path/
CalibreHDBLog.host.cpuid.
// Creating log for pseudo HDB 4 on host, logfile = /path/
CalibreHDBLog.host.cpuid.
// Initializing MT on pseudo HDB 1
// Initializing MT on pseudo HDB 2
// Initializing MT on pseudo HDB 3
// Initializing MT on pseudo HDB 4

本示例显示已使用 -hyper 命令行选项,并初始化了 4 个伪数据库(编号为 HDB 1 至 4)。HDB 0 是由主处理器维护的主数据库,这些均为内存数据库,用于收集运行过程中各 CPU 生成的数据。本次特定运行使用了 4 个 CPU。

3.2 内存分配

当以超大规模模式运行 Calibre 作业时,日志中会包含 LVHEAP 和 SHARED 统计信息。示例:LVHEAP = 4/6/6 SHARED = 1/1由于启用超大规模的多线程需求,LVHEAP 数值与其他运行模式不同。LVHEAP 数值的说明见 "LVHEAP 统计信息" 章节。

Calibre 运行操作时,需要部分内存用于计算,部分内存用于存储数据。启用超大规模时,有时一个 HDB 上的操作会使用与另一个独立 HDB 上的操作相同的内存。为减少此类情况下的总体内存占用,数据会从第一个 HDB 传输到第二个 HDB。发生此情况时,传输的数据量会写入 SHARED 部分。

SHARED 统计信息:以兆字节为单位,特定操作在 HDB 之间传输的内存量。

  • 第一个数字:当前步骤的共享内存
  • 第二个数字:最大共享内存

该统计信息是 LVHEAP 统计信息的一个子集。

  • 在 MT 模式下,SHARED 统计信息不表示任何形式的效率低下。

  • 在 MTflex 模式下,若未启用 RDS 且观察到较大的 SHARED 数值,请参考《Calibre 管理员指南》中的 "内存管理" 章节。

  • 若启用了远程数据服务器(RDS)、未使用 -hyper remote,且 SHARED 数值非 0/0,则可能表示可用远程内存不足。这不一定是问题,但表明增加远程内存可带来性能提升。

  • 若对 RDS 使用 -hyper remote,则 SHARED 数值应为 0/0,因为此配置下的内存共享会降低性能。

3.3 构建层次化数据库

构建层次化数据库部分列出了两个仅在启用超大规模时使用的算法。示例:

复制代码
展平选定的极小单元实例
展平选定的顶层单元实例

这些是超大规模运行所需的内部优化,这些算法会影响运行日志中显示的对象计数。超大规模运行与非超大规模运行的对象计数可能存在差异,此为预期行为。

3.4 注入层次结构

单元名称的顺序在超大规模运行与非超大规模运行之间可能存在差异,这是由于超大规模运行的数据分区方式不同所致。

3.5 伪层次化数据库构建

日志的此部分包含伪层次化数据库构建的相关信息。示例:

plaintext

复制代码
PSEUDO HDB 1 CONSTRUCTED. CPU TIME = 0 REAL TIME = 0 LVHEAP = 1/1/1
PSEUDO HDB 2 CONSTRUCTED. CPU TIME = 0 REAL TIME = 0 LVHEAP = 1/1/1
PSEUDO HDB 3 CONSTRUCTED. CPU TIME = 0 REAL TIME = 0 LVHEAP = 1/1/1
PSEUDO HDB 4 CONSTRUCTED. CPU TIME = 0 REAL TIME = 0 LVHEAP = 1/1/1

该信息表示各 CPU 使用的伪层次化数据库已准备好存储数据。

3.6 层读取摘要(原始层几何图形)

日志的此部分也可能与非超大规模运行不同。由于超大规模的版图数据库分区方式,最终几何图形数 可能存在差异。超大规模运行的最终几何图形数可能高于非超大规模运行。

例如,日志中的以下行通常会显示比非超大规模运行更高的数值:层名 68246 (132621) 132593 (132621)

3.7 单元与实例摘要

日志的此部分显示的数值,可能会小于非超大规模运行对应部分的数值。这是由于前文提到的两种展平算法所致。

3.8 版图数据输入模块摘要

日志的此部分反映了 "层读取摘要" 部分的数据,与非超大规模运行存在差异。

3.9 Calibre 执行模块

执行模块显示的差异体现在:数据如何分区到伪层次化数据库,以及这些数据如何在日志中报告。本节示例来自 Calibre nmDRC-H 运行。

在启用超大规模的 MT 日志中,层派生的报告通常如下所示:

复制代码
CONTACT = OR CONTACT
--------------------
操作正在 HDB 1 上执行 (T2 S1 E4:4 H0:0 A15:16 L14:14 C1)

这表示该操作已分配给其中一个 CPU,数据正存储在 HDB 1 中。括号内的信息供 Mentor Graphics 研发使用。

当工具完成该层的处理后,日志中会报告:原始层 CONTACT 已删除 -- LVHEAP = 1/5/5 SHARED = 0/1

在 MT 日志的其他位置,该操作的统计信息报告如下:

复制代码
CONTACT = OR CONTACT
--------------------
CONTACT (HIER TYP=1 CFG=1 HGC=132964 FGC=132992 HEC=532450 FEC=532562
VHC=F VPC=F)
CPU TIME = 0 REAL TIME = 0 LVHEAP = 2/5/5 SHARED = 0/1 OPS COMPLETE =
1 OF 2 ELAPSED TIME = 2
Operation COMPLETED on HDB 1 LVHEAP = 1/5/5

该报告显示操作已在 HDB 1 上完成,并报告了 HDB 1 的 LVHEAP 统计信息。

对于一组并发规则检查,报告如下所示:

复制代码
min_m1_space::<1> = EXT M1METAL < 0.18 ABUT < 90 SINGULAR
min_m1_width::<1> = INT M1METAL < 0.18 ABUT < 90 SINGULAR
---------------------------------------------------------
Operation EXECUTING on HDB 1 (T3 S1 E0 H0 A0 C3)
...
...
min_m1_space::<1> = EXT M1METAL < 0.18 ABUT < 90 SINGULAR
min_m1_width::<1> = INT M1METAL < 0.18 ABUT < 90 SINGULAR
---------------------------------------------------------
min_m1_space::<1> (HIER TYP=3 HGC=2356 FGC=2356 HEC=4712 FEC=4712)
min_m1_width::<1> (HIER TYP=3 HGC=3511 FGC=3511 HEC=7022 FEC=7022)
CPU TIME = 0 REAL TIME = 0 LVHEAP = 14/16/16 SHARED = 1/1 OPS COMPLETE
= 7 OF 13 ELAPSED TIME = 3
Operation COMPLETED on HDB 1 LVHEAP = 1/5/5
...
DRC RuleCheck min_m1_space COMPLETED. Number of Results = 10
Layer min_m1_space::<1> DELETED -- LVHEAP = 6/12/18 SHARED = 0/1
...
DRC RuleCheck min_m1_width COMPLETED. Number of Results = 10
Layer min_m1_width::<1> DELETED -- LVHEAP = 6/12/18 SHARED = 0/1

HGC、FGC、HEC、FEC 等统计信息(说明见 "层次化处理中的层统计信息" 章节),在超大规模运行中可能高于非超大规模运行。这是由于运行的几何图形分区方式所致。

3.10 summary

日志末尾的摘要部分,与非超大规模运行的日志类似。

在 MT 运行日志的末尾附近,会看到如下部分:

复制代码
Cumulative ONE-LAYER BOOLEAN Time: CPU = 0/2 REAL = 0/2
Cumulative TWO-LAYER BOOLEAN Time: CPU = 0/0 REAL = 0/0
Cumulative POLYGON TOPOLOGICAL Time: CPU = 0/2 REAL = 0/6
Cumulative POLYGON MEASUREMENT Time: CPU = 0/0 REAL = 0/0
Cumulative SIZE Time: CPU = 0/4 REAL = 0/4
Cumulative EDGE TOPOLOGICAL Time: CPU = 0/14 REAL = 0/15
Cumulative EDGE MEASUREMENT Time: CPU = 0/0 REAL = 0/0
Cumulative ONE-LAYER DRC Time: CPU = 0/2 REAL = 0/2
Cumulative TWO-LAYER DRC Time: CPU = 0/1 REAL = 0/1
Cumulative MISCELLANEOUS Time: CPU = 0/1 REAL = 0/1
Cumulative CONNECT Time: CPU = 5/0 REAL = 5/0
Cumulative RDB Time: CPU = 0/0 REAL = 0/0

CPU 时间和实际时间的显示格式为:HDB 0 / HDB 1-4 的总时间

尽管此摘录显示的是启用超大规模的 MT 运行结果,但这种使用 / 字符格式化 HDB 时间的方式,同样适用于 Calibre MTflex 运行(包括本地和远程主机)。详情见 "启用超大规模的 Calibre MTflex 模式的独特日志特性" 章节。

时间四舍五入至最接近的整数。但时间在内部以浮点数存储,这会影响 MT 日志此部分报告的累计时间:

复制代码
HDB 0: CPU TIME = 6 MAX LVHEAP = 28
HDB 1: CPU TIME = 8 MAX LVHEAP = 13
HDB 2: CPU TIME = 4 MAX LVHEAP = 9
HDB 3: CPU TIME = 7 MAX LVHEAP = 17
HDB 4: CPU TIME = 8 MAX LVHEAP = 15
HDB 0-4 TOTAL LVHEAP = 82

这些行显示了每个 HDB 的累计 CPU 时间(秒)、每个 HDB 使用的最大内存,以及所有这些最大值的总和。

超大规模运行中生成的总结果数,可能与非超大规模运行存在差异。这是预期行为(详见第 130 页的 "超大规模" 章节),原因是超大规模运行中会对特定数据进行选择性展平。

用于计算的处理器数量(即计入许可证使用的处理器),在如下行中报告:--- 处理器数量 = 4

四、启用超大规模的 Calibre MTflex 模式的独特日志特性

启用超大规模的 Calibre MTflex 日志,与启用超大规模的 MT 模式生成的日志类似,但包含一些独特特性。

两种多线程模式的通用元素完整说明,见 "启用超大规模的 MT 和 Calibre MTflex 模式" 章节。若运行于 Calibre MTflex 模式,建议启用超大规模(-hyper 选项),除非有充分理由不启用(详见第 130 页的 "超大规模" 章节)。

4.1 头部信息

以下是启用超大规模的 Calibre MTflex 模式运行 Calibre 作业生成的头部信息日志示例。启用超大规模的 Calibre MTflex 运行生成的输出差异,在以下日志中高亮显示:

plaintext

复制代码
// Running home/pkgs/icv/pvt/calibre64 -drc -hier -turbo -remotefile
mtflex.config -hyper rules
//
// Starting time: <time stamp>
//
// Reading remote host configuration file: mtflex.config
...
// HYPERSCALING ENABLED with 4 pseudo HDBs.
// Assigning RCSs to Pseudo HDBs, RCS allocated per PHDB = 12
// Initializing MTflex on pseudo HDB 1
// Calibre Remote Connection node#:12345
// Launching Calibre Remote server on: node
// Waiting for launch of remote hosts
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Launching Calibre Remote server on: node
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// Connected to CPU on remote host node, logfile =
/tmp/CalibreRemoteLog.node.<n>.<time>.node.<id>
// List of connected remote cpus:
// REMOTE CPU node: pid = 18372
// REMOTE CPU node: pid = 18373
// REMOTE CPU node: pid = 18374
// REMOTE CPU node: pid = 18375
// REMOTE CPU node: pid = 15225
// REMOTE CPU node: pid = 15226
// REMOTE CPU node: pid = 15227
// REMOTE CPU node: pid = 15228
// REMOTE CPU node: pid = 15229
// REMOTE CPU node: pid = 15230
// REMOTE CPU node: pid = 15231

从本示例中可以看到,使用了 -turbo-remotefile-hyper 命令行选项。在典型运行中,除 HDB 0 外,还会初始化 4 个伪 HDB。

Calibre MTflex 配置文件的内容会被读取(配置文件相关信息,见《Calibre 管理员指南》中的 "创建配置文件" 章节)。日志会报告远程主机的名称和进程 ID,每个 HDB 都会重复此报告。

运行配置的摘要信息如下:

复制代码
// MTflex initialization for pseudo HDBs completed.
// Running on 12 CPUs (pending licensing)
// List of connected remote hosts:
// REMOTE HOST node: np = 8, nc = 2, ns = 4
// REMOTE HOST node: np = 8, nc = 2, ns = 8
// MTflex CPU resources: 8 Local, 12/16 Remote
//
// LITHO operations available for use on 12 CPUs (pending licensing)
//
// Initializing MT on HDB 0: 0
// Creating log for pseudo HDB 1 on host, logfile =
/path/CalibreHDBLog.host.cpuid
// Creating log for pseudo HDB 2 on host, logfile =
/path/CalibreHDBLog.host.cpuid
// Creating log for pseudo HDB 3 on host, logfile =
/path/CalibreHDBLog.host.cpuid
// Creating log for pseudo HDB 4 on host, logfile =
/path/CalibreHDBLog.host.cpuid
// Initializing MT on pseudo HDB 1
// Initializing MT on pseudo HDB 2
// Initializing MT on pseudo HDB 3
// Initializing MT on pseudo HDB 4

此部分报告了运行使用的本地和远程 CPU 总数,以及远程主机的名称和在远程主机上使用的处理器数量。

对于 Calibre MTflex 应用,本地(主)机器上的 CPU 通常不计入 "运行于 N 个 CPU" 行的计数中,因为它们仅用于数据管理,不执行层操作。主机器上的 CPU 通常仅处理远程(从)CPU 生成的数据,远程 CPU 始终被视为 "运行中" 的 CPU。

若主机器过载,则其部分或全部 CPU 除执行数据管理服务外,还会用于运行时数据生成。此类 CPU 会计入运行的总处理器数量(用于许可证统计)。运行中使用的、计入许可证的 CPU 总数,可在如下行中找到:// 运行于 ## 个 CPU

例如,假设本地机器有 4 个 CPU,远程机器有 16 个 CPU。若在命令行中指定 -turbo 18(或 -turbo_litho 18),则主机器会过载 2 个 CPU。这 2 个 CPU 会计入许可证使用量(未过载的 CPU 不计入),并计入总处理器数量。不建议使主主机过载。

4.2 注入层次结构

单元名称的顺序,在启用超大规模的 Calibre MTflex 运行与其他操作模式之间存在差异。这是由于不同模式的数据分区方式不同所致。

4.3 MTflex 小单元

在 Calibre MTflex 运行过程中,会使用一种识别小单元的算法,这是一个内部优化步骤。日志中会出现如下行,表示已执行此步骤:

复制代码
识别 MTflex 小单元
MTflex 小单元数量:39

4.4 CPU 时间与实际时间

在 Calibre MTflex 运行过程中,日志包含 CPU 时间和实际时间的信息。示例:CPU 时间 = 1 + 0 实际时间 = 1

CPU 时间的格式为:HDB 0 + HDB 1-n(总计)。实际时间为经过的时钟时间。这些数值在内部以浮点数存储,报告时四舍五入至最接近的整数。

累计时间格式的说明见下文的 "摘要" 部分。

4.5 Calibre 执行模块

报告的Calibre 执行模块部分,与非 Calibre MTflex 运行存在差异。各种操作的执行顺序、操作完成情况以及层从内存中的删除,均与非 Calibre MTflex 运行不同。这是由于 Calibre MTflex 的数据分区和操作调度方式所致。

报告的时间和 LVHEAP 数值,也与其他类型的运行存在差异。这是由于网络性能限制和 Calibre MTflex 内部的启发式算法所致。

4.6 summary

对于启用超大规模的 Calibre MTflex 模式运行的 Calibre 作业,日志末尾的摘要部分包含本地和远程主机的统计信息。本地主机的 CPU 数值在 + 号前报告,远程主机的数值在 + 号后报告,格式为:本地 HDB 0/HDB 1-n + 远程 HDB 0/HDB 1-n

示例:

复制代码
Cumulative ONE-LAYER BOOLEAN Time: CPU = 0/0 + 0/1 REAL = 0/2
Cumulative TWO-LAYER BOOLEAN Time: CPU = 0/0 + 0/0 REAL = 0/1
Cumulative POLYGON TOPOLOGICAL Time: CPU = 0/0 + 0/2 REAL = 0/2
Cumulative POLYGON MEASUREMENT Time: CPU = 0/0 + 0/0 REAL = 0/0
Cumulative SIZE Time: CPU = 0/1 + 0/2 REAL = 0/2
Cumulative EDGE TOPOLOGICAL Time: CPU = 0/0 + 0/11 REAL = 0/4
Cumulative EDGE MEASUREMENT Time: CPU = 0/0 + 0/0 REAL = 0/0
Cumulative ONE-LAYER DRC Time: CPU = 0/0 + 0/1 REAL = 0/0
Cumulative TWO-LAYER DRC Time: CPU = 0/0 + 0/1 REAL = 0/0
Cumulative MISCELLANEOUS Time: CPU = 0/0 + 0/0 REAL = 0/1
Cumulative CONNECT Time: CPU = 0/0 + 3/0 REAL = 1/0
Cumulative RDB Time: CPU = 0/0 + 0/0 REAL = 0/0
相关推荐
Florence2316 小时前
cuFuncSetCacheConfig
linux·运维·服务器
Petal99091216 小时前
内核调试:Linux编译内核源码为deb并更新内核
linux·运维·服务器
Web项目开发16 小时前
Mysql创建索引的SQL脚本,复制粘贴即可使用
数据库·sql·mysql
晴天¥17 小时前
Oracle如何在DBeaver上进行登录
数据库·oracle
轩轶子17 小时前
【Macbook环境配置】Macbook设置ssh免密登陆服务器
运维·服务器·ssh
Dillon Dong17 小时前
服务器运维:Linux 磁盘查看 & 清理常用命令
linux·运维·服务器
ben9518chen17 小时前
Linux用户管理
linux·运维·服务器
2301_8002561117 小时前
事务处理-同步与调度-两阶段锁-隔离级别
数据库·oracle
小罗和阿泽17 小时前
MySql数据库系列 数据库基础操作
数据库·mysql