Hexagon 处理器可以收集其执行的应用程序的执行统计信息。 统计数据总结了应用程序运行时发生的各种类型的 Hexagon 处理器事件。
可以在硬件或软件中收集执行统计信息:
执行统计以处理器事件表示。 本章定义了事件符号及其相关的数字代码。
注意
由于执行事件的类型因 Hexagon 处理器版本而异,因此会为每个版本收集不同类型的统计信息。 本章列出了为版本 V65 定义的事件符号。
表 9-1 定义了用于表示 V65 Hexagon 处理器的处理器事件的符号。
表 9-1 V65 处理器事件符号
Event | Symbol | Definition |
---|---|---|
0x0 | N/A | 此事件永远不会导致计数器更新 |
0x1 | COUNTER0_OVERFLOW | 计数器 0 溢出。 这可以用作 counter1 检测到的事件,以构建有效的 64 位计数器。 |
0x2 | COUNTER2_OVERFLOW | 计数器 2 溢出。 这可以作为 counter3 检测到的事件来构建一个有效的 64 位计数器。 |
0x3 | COMMITTED_PKT_ANY | 线程提交了一个数据包。 执行的数据包。 |
0x4 | COMMITTED_PKT_BSB | 数据包在同一线程中的前一个数据包之后提交了 2 个周期。 |
0x5 | COUNTER4_OVERFLOW | Counter4 溢出。 这可以作为 counter5 检测到的事件来构建一个有效的 64 位计数器。 |
0x6 | COUNTER6_OVERFLOW | Counter6 溢出。 这可以作为 counter7 检测到的事件来构建一个有效的 64 位计数器。 |
0x7 | COMMITTED_PKT_B2B | 数据包在同一线程中的前一个数据包之后提交了 1 个周期。 |
0x8 | COMMITTED_PKT_SMT | 在同一个周期内提交了 2 个数据包。 |
0xa | CYCLES_5_THREAD_RUNNING | 恰好有 5 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0xb | CYCLES_6_THREAD_RUNNING | 恰好有 6 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0xc | COMMITTED_PKT_T0 | 线程 0 提交了一个数据包。 执行的数据包。 |
0xd | COMMITTED_PKT_T1 | 线程 1 提交了一个数据包。 执行的数据包。 |
0xe | COMMITTED_PKT_T2 | 线程 2 提交了一个数据包。 执行的数据包。 |
0xf | COMMITTED_PKT_T3 | 线程 3 提交了一个数据包。 执行的数据包。 |
0x12 | ICACHE_DEMAND_MISS | Icache 需求未命中。 包括次要失误。 |
0x13 | DCACHE_DEMAND_MISS | Dcache 可缓存需求主要或次要未命中。 包括 dczero 失速。 不包括不可缓存、预取和无分配存储未命中。 |
0x14 | DCACHE_STORE_MISS | Dcache 可缓存存储未命中。 |
0x17 | CU_PKT_READY_NOT_DISPATCHED | 数据包在 CU 调度器上准备好但没有被调度,因为 (1) 没有选择它的线程或 (2) 集群间资源冲突。 |
0x20 | ANY_IU_REPLAY | 除了 Icache 未命中之外的任何 IU 停顿。 包括跳转寄存器停顿、fetchcross 停顿、itlb 未命中停顿等。不包括 CU 重放。 |
0x21 | ANY_DU_REPLAY | 任何 DU 重播。 存储体冲突、存储缓冲区已满等。排除由于缓存未命中导致的停顿 。 |
0x22 | CU_REDISPATCH | 重新分派数据包的任何情况。 最常见的情况是 Qualcomm® Hexagon™ Vector eXtensions (HVX) FIFO 在 HVX 数据包已在传输中时变满。 也可以是对不可重放指令或转发总线资源冲突请求的重放。 |
0x23 | ISSUED_PACKETS | 从 IU 投递的推测性发布的数据包。 |
0x25 | COMMITTED_PKT_1_THREAD_RUNNING | 已提交的数据包运行 1 个线程。 不在停止/等待。 |
0x26 | COMMITTED_PKT_2_THREAD_RUNNING | 有 2 个线程运行的已提交数据包。 不在停止/等待。 |
0x27 | COMMITTED_PKT_3_THREAD_RUNNING | 已提交数据包,运行 3 个线程。 不在停止/等待。 |
0x2a | COMMITTED_INSTS | 提交的指示。 每个周期最多增加 8 个。 双工计为两条指令。 不包括结束循环。 |
0x2b | COMMITTED_TC1_INSTS | 提交 tc1 类指令。 每个周期最多增加 8 个。 两条 tc1 指令的双工计为两条 tc1 指令。 |
0x2c | COMMITTED_PRIVATE_INSTS | 具有每个集群(私有)执行资源的已提交指令。 每个周期最多增加 8 个。 两条私有指令的双工算作两条私有指令。 |
0x2f | COMMITTED_PKT_4_THREAD_RUNNING | 有 4 个线程运行的已提交数据包。 不在停止/等待。 |
0x30 | COMMITTED_LOADS | 提交的加载指令。 包括缓存和非缓存。 双负载增加 2。 不包括预取、备忘录和协处理器负载。 |
0x31 | COMMITTED_STORES | 提交的存储说明。 包括缓存和非缓存。 双存储的增量为 2。 不包括备忘录和协处理器存储。 |
0x32 | COMMITTED_MEMOPS | 提交的备忘录指令。 缓存或未缓存。 |
0x37 | COMMITTED_PROGRAM_FLOW_INSTS | 提交的数据包包含程序流 inst。 包括 cr 跳转、endloop、j、jr、dealloc_return、system/trap、事件 56 的超集。双跳转算作两次。 |
0x38 | COMMITTED_PKT_CHANGED_FLOW | 提交的数据包导致流量改变。 任何采取的跳跃。 包括 endloop 和 dealloc_return。 |
0x39 | COMMITTED_PKT_ENDLOOP | 提交的数据包包含一个已被采用的 endloop。 |
0x3b | CYCLES_1_THREAD_RUNNING | 恰好有 1 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0x3c | CYCLES_2_THREAD_RUNNING | 恰好有 2 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0x3d | CYCLES_3_THREAD_RUNNING | 恰好有 3 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0x3e | CYCLES_4_THREAD_RUNNING | 恰好有 4 个线程正在运行的处理器周期。 运行意味着不等待或停止。 |
0x40 | AXI_READ_REQUEST | 主要 AXI 主设备发出的所有读取请求。 包括全线和部分线。 |
0x41 | AXI_LINE32_READ_REQUEST | 由主要 AXI 主控器发出的 32 字节行读取请求。 |
0x42 | AXI_WRITE_REQUEST | 由主要 AXI 主设备发出的所有写请求。 包括全线和部分线 。 |
0x43 | AXI_LINE32_WRITE_REQUEST | 由主 AXI 主控器发出的 32 字节行写请求,所有字节均有效。 |
0x44 | AHB_READ_REQUEST | AHB 主机发出的读取请求。 |
0x45 | AHB_WRITE_REQUEST | AHB 主机发出的写请求。 |
0x47 | AXI_SLAVE_MULTI_BEAT_ACCESS | AXI 从设备多拍访问。 |
0x48 | AXI_SLAVE_SINGLE_BEAT_ACCESS | AXI 从属单拍访问。 |
0x49 | AXI2_READ_REQUEST | 由辅助 AXI 主设备发出的所有读取请求。 包括全线和部分线。 |
0x4a | AXI2_LINE32_READ_REQUEST | 由辅助 AXI 主控器发出的 32 字节线读取请求。 |
0x4b | AXI2_WRITE_REQUEST | 由辅助 AXI 主设备发出的所有写请求。 包括全线和部分线。 |
0x4c | AXI2_LINE32_WRITE_REQUEST | 由辅助 AXI 主控器发出的 32 字节行写请求。 |
0x4d | AXI2_CONGESTION | 辅助 AXI 命令或数据队列已满,操作卡在辅助 AXI 主命令队列的开头。 |
0x4e | DMA_SLAVE_MULTI_BEAT_ACCESS | DMA 从机多拍访问。 |
0x4f | DMA_SLAVE_SINGLE_BEAT_ACCESS | DMA 从机单拍访问。 |
0x50 | COMMITTED_FPS | 提交的浮点指令。 双 FP 操作增加 2。 不包括转化。 |
0x51 | REDIRECT_BIMODAL_MISPREDICT | 错误预测双模分支方向导致控制流重定向。 |
0x52 | REDIRECT_TARGET_MISPREDICT | 错误预测分支目标导致控制流重定向。 包括 RAS 错误预测。 不包括 JUMPR R31 返回以外的间接跳转和调用。 不包括方向错误预测。 |
0x53 | REDIRECT_LOOP_MISPREDICT | 错误预测硬件环路导致控制流重定向。 仅当循环具有相对较少的数据包并且循环计数为 2 或更少时才会发生。 |
0x54 | REDIRECT_MISC | 出于事件 81、82 和 83 之外的原因的控制流重定向。包括异常、陷阱、中断、非 R31 跳转、多个 initloop 正在运行等。 |
0x58 | JTLB_MISS | JTLB 中缺少指令或数据地址转换请求。 |
0x5a | COMMITTED_PKT_RETURN | 提交了返回指令。 包括取消的返回值。 |
0x5b | COMMITTED_PKT_INDIRECT_JUMP | 提交了间接跳转或调用指令。 包括取消的指令。 不包括 JUMPR R31 退货。 |
0x5c | COMMITTED_BIMODAL_BRANCH_INSTS | 承诺双模分支。 包括 .old 和 .new。 双跳时增加 2。 |
0x5d | BRANCH_QUEUE_FULL | 双模分支被忽略。 如果队列已满。 |
0x5e | DU_REQUESTED_BUBBLE_INSERTED | 应 DU 请求插入的停顿 CU 数量,以避免 DU 端口冲突。 |
0x5f | VTCM_SCALAR_FIFO_FULL_CYCLES | Cycles 集群可以向 VTCM 标量 FIFO 发出标量内存访问 。 |
0x60 | COPROC_ACTIVE | VXU 时钟/非空闲。 |
0x61 | COPROC_ENABLED | VXU 启用并通电。 |
0x62 | ICACHE_ACCESS | Icache 行获取数。 |
0x63 | BTB_HIT | BTB命中。 |
0x64 | BTB_MISS | BTB 未命中。 |
0x65 | IU_DEMAND_SECONDARY_MISS | Icache 二次未命中。 |
0x66 | IU_LINE_FROM_HWLOOP | 从检测到的硬件循环中提取的 IU 行。 低功耗优化可以省略此处的各种标签和数据访问。 |
0x67 | FAST_FETCH_KILLED | Fast-fetch 被杀死(在 Icache 访问之后)。 |
0x68 | IU_1_PKT_AVAILABLE_TO_ISSUE | 获取可以独立于可用数据包队列条目发出一个数据包的数据包。 |
0x69 | FETCHED_PACKETS_DROPPED | 由于无法传送到 CU 而丢包。 |
0x6a | IU_REQUESTS_TO_L2_REPLAYED | IU 对 L2 的请求已重播。 可能是 IU 和 DU 冲突到 L2 或 IU 信用失败。 可以为单个事务多次触发。 |
0x6b | IU_PREFETCHES_SENT_TO_L2 | IU 预取发送到 L2。 计算 L2 未丢弃的缓存行。 排除重放的预取,只计算 L2 接受的预取。 |
0x6c | ITLB_MISS | ITLB 未命中,转至 JTLB。 |
0x6d | IU_2_PKT_AVAILABLE_TO_ISSUE | Fetch 可以独立于可用的数据包队列条目发出两个数据包。 |
0x6e | IU_3_PKT_AVAILABLE_TO_ISSUE | Fetch 可以独立于可用的数据包队列条目发出三个数据包。 |
0x6f | IU_REQUEST_STALLED | IU 请求因填写而停止。 从 L2 到 Icache 的需求或预取填充导致 IU 需求停止。 |
0x70 | IU_BIMODAL_L2_ELIGIBLE | 此事件计算可以到 L2 的已解决分支的数量。 |
0x71 | IU_0_PKT_AVAILABLE_TO_ISSUE | 由于跳转到跨越缓存线边界的数据包,Fetch 只能发出部分数据包。 |
0x72 | FETCH_2_CYCLE | 实际 2 周期(返回、循环结束、失败、BTB)。 |
0x73 | FETCH_3_CYCLE | 3 周期实际。 |
0x74 | IU_PREFETCHES_DROPPED | IU 预取在访问 I$ 之前中止。 |
0x75 | L2_IU_SECONDARY_MISS | 来自 IU 的 L2 次要未命中。 |
0x76 | L2_IU_ACCESS | 来自 IU 的 L2 可缓存访问。 由 IU 命令导致的对 L2 缓存的任何访问,无论是请求访问还是 L1 预取访问。 排除在 L2 中生成的任何预取。 不包括 L2Fetch、TCM 访问和不可缓存。 地址必须以主 AXI 为目标。 |
0x77 | L2_IU_MISS | 来自 IU 的 L2 未命中。 在 0x76 限定的事件中,导致 L2 未命中(需求未命中或 L1 预取未命中)的事件。 L2 未命中是阻止数据立即返回 IU 的任何条件,不包括管道冲突。 |
0x78 | L2_IU_PREFETCH_ACCESS | 从 IU 预取到 L2。 发送到 L2 缓存的任何 IU 预取访问。 访问必须是 L2 可缓存的并且以主 AXI 为目标。 这不包括 L2Fetch 生成的访问。 |
0x79 | L2_IU_PREFETCH_MISS | IU 未命中的 L2 预取。 在 0x78 限定的事件中,导致 L2 未命中的事件。 |
0x7a | L2_IU_BRANCH_CACHE_WRITE_REQUEST | 从 IU 发送到 L2 的请求以在 L2 中写入指令的双模位。 包括所有请求,不考虑目标。 |
0x7b | L2_IU_BRANCH_CACHE_WRITE | 写入 L2 中指令的双模位。 这是通过更新 L2 高速缓存或 TCM 中的内存完成的事件 122 请求的数量。 |
0x7c | L2_DU_READ_ACCESS | 来自 DU 的 L2 可缓存读取访问。 来自 DU 的任何读取访问都可能导致 L2 缓存中的查找。 包括加载、l1 预取、dcfetch。 不包括初始 L2fetch 命令、不可缓存、TCM 和协处理器负载。 必须以 AXI 主为目标。 |
0x7d | L2_DU_READ_MISS | L2 从 DU 读取未命中。 在 0x7C 限定的事件中,任何导致 L2 未命中的事件。 即,该行先前未在 L2 缓存中分配,将从后备内存中获取。 |
0x7e | L2FETCH_ACCESS | 来自 DU 的 L2fetch 访问。 通过对 L2Fetch 引擎进行编程而启动的从 L2 预取引擎对 L2 缓存的任何访问。 仅包括缓存查询和获取(如果不存在)命令。 |
0x7f | L2FETCH_MISS | 程序查询中的 L2fetch 未命中。 在 0x7E 限定的事件中,导致 L2 未命中的事件。 即,该行先前未在 L2 缓存中分配,将从后备内存中获取。 |
0x80 | L2_AXI_INTERLEAVE_DROP | 由于 AXI 交错缓冲区溢出,L2 丢弃返回或转换为不可缓存。 |
0x81 | L2_ACCESS | 对 L2 的所有请求。 不包括内部生成的访问,如 L2Fetch,但是 L2Fetch 引擎的编程将被计算在内。 访问以奇数或偶数交错为目标,并且可能是 L2 可缓存或 TCM。 |
0x82 | L2_PIPE_CONFLICT | 由于管道冲突,L2 未接受请求。 冲突可以是标签库、数据库或其他管道冲突。 |
0x83 | L2_TAG_ARRAY_CONFLICT | 事件 130 中的项目中,与标签数组冲突导致的项目。 |
0x84 | AXI_RD_CONGESTION | 主要 AXI 读取命令队列已满,操作停留在主要 AXI 主命令队列的头部。 |
0x85 | AHB_CONGESTION | AHB 拥塞。 当 AHB 接口已满且操作卡在命令队列的头部时触发。 |
0x86 | SNOOP_BLOCK | Snoop 块。 当一个 snoop 未被接受并且 snoop 阻塞了返回 FIFO 的头部,并且返回 FIFO 有其他项时触发。 |
0x87 | TCM_DU_ACCESS | 来自 DU 的 TCM 访问。 DU 访问 L2 TCM 空间。 不包括 HVX 请求。 |
0x88 | TCM_DU_READ_ACCESS | 来自 DU 的 TCM 读取访问权限。 DU 读取 L2 TCM 空间。 不包括 HVX 请求。 |
0x89 | TCM_IU_ACCESS | 来自 IU 的 TCM 访问。 IU访问L2 TCM空间。 |
0x8a | L2_CASTOUT | L2 丢弃(castout)。 当 L2 由于分配而驱逐脏线时触发。 不会在缓存操作上触发。 |
0x8b | L2_DU_STORE_ACCESS | 来自 DU 的 L2 可缓存存储访问。 来自 DU 的任何存储访问都可能导致 L2 缓存中的查找。 不包括高速缓存操作、不可高速缓存、TCM 和协处理器存储。 必须针对主要 AXI。 |
0x8c | L2_DU_STORE_MISS | 来自 DU 的 L2 未命中。 在 0x8B 限定的事件中,导致未命中的事件。 特别是行不在缓存或合并缓冲区中的情况。 |
0x8d | L2_DU_PREFETCH_ACCESS | 来自 DU 的 L2 预取访问。 在 0x7C 限定的事件中,有 Dcfetch 和 dhwprefetch。 这些是针对 AXI 主要的 L2 可缓存。 |
0x8e | L2_DU_PREFETCH_MISS | 来自 DU 的 L2 预取未命中。 在 0x8D 限定的事件中,哪些事件错过了 L2。 |
0x8f | L2_DU_RETURN_NOT_ACKED | L2 返回到 DU 未确认。 这对于任何 DU 返回、预取或需求都是有效的。 已经修改事件名,称为 L2_DU_PREFETCH_NOT_ACKED |
0x90 | L2_DU_LOAD_SECONDARY_MISS | 来自 DU 的 L2 加载二次未命中。 在记分板上打忙线,阻止返回。 繁忙情况可能包括由连续两次负载( back to back loads)引起的停顿(pipeline bubble),如 L1UC 负载所示。 |
0x91 | L2FETCH_COMMAND | L2fetch 命令。 不包括停止命令 |
0x92 | L2FETCH_COMMAND_KILLED | L2fetch 命令被终止,因为发出了停止命令。 每个被杀死的 L2fetch 命令增加一次。 如果多个命令排队到 L2Fetch 引擎,则会记录每个命令的终止情况。 |
0x93 | L2FETCH_COMMAND_OVERWRITE | L2fetch 命令覆盖。 杀死旧的 L2fetch 并用新的 L2fetch 替换。 |
0x94 | L2FETCH_ACCESS_CREDIT_FAIL | L2fetch 访问无法获得信用。 L2fetch 因缺少 L2fetch 或 L2evict 信用而被阻止。 |
0x95 | AXI_SLAVE_READ_BUSY | AXI 从设备读访问遇到忙线。 |
0x96 | AXI_SLAVE_WRITE_BUSY | AXI 从机写访问遇到忙线。 |
0x97 | L2_ACCESS_EVEN | 在 0x81 中的事件中,对偶数 L2 缓存的访问次数。 |
0x98 | CLADE_HIGH_PRIO_L2_ACCESS | IU 或 DU 请求高优先级 CLADE 区域。 不计入 L2 Fetch。 |
0x99 | CLADE_LOW_PRIO_L2_ACCESS | IU 或 DU 请求低优先级 CLADE 区域。 不计入 L2 Fetch。 |
0x9a | CLADE_HIGH_PRIO_L2_MISS | L2 中错过的 CLADE 高优先级 L2 访问。 |
0x9b | CLADE_LOW_PRIO_L2_MISS | L2 中错过的 CLADE 低优先级 L2 访问。 |
0x9c | CLADE_HIGH_PRIO_EXCEPTION | 发生异常的 CLADE 高优先级解码。 |
0x9d | CLADE_LOW_PRIO_EXCEPTION | 发生异常的 CLADE 低优先级解码。 |
0x9e | AXI2_SLAVE_READ_BUSY | AXI 辅助从属读取访问遇到忙线。 |
0x9f | AXI2_SLAVE_WRITE_BUSY | AXI 辅助从属写访问遇到忙线。 |
0xa0 | ANY_DU_STALL | 任何DU档。 当线程有任何 DU 停顿(dcache 未命中或 dTLBmiss)时递增一次。 |
0xa1 | DU_BANK_CONFLICT_REPLAY | DU 存储体冲突重播。 双内存访问相同的银行但不同的线路。 |
0xa2 | DU_CREDIT_REPLAY | 由于可用的 QoS DU 信用不足,数据包进行重播的次数。 |
0xa3 | L2_FIFO_FULL_REPLAY | 计数 L2 偶数/奇数 FIFO 完整重播。 |
0xa4 | DU_STORE_BUFFER_FULL_REPLAY | 第一个数据包将访问权限放入 DU 存储缓冲区(memop、store.new、加载/存储库冲突、存储/存储库冲突)。 任何后面的数据包都会在第一个数据包驱逐之前尝试使用存储缓冲区,并且必须重播以便存储缓冲区可以耗尽。 |
0xa5 | DU_STORE_BUFFER_FORCED_DRAIN | 存储缓冲区经历强制排空的次数 |
0xa6 | DU_SNOOP_CONFLICT_REPLAY | DU snoop 冲突重播。 当snoop 进来时,与存储进行基于集合的匹配,我们重播存储。 Snoop 读取和写入缓存,必须在存储可以写入之前完成。 不包括snoop 可能导致的填充重放情况。 |
0xa7 | DU_SNOOP_REQUEST | 已接受的 DU snoop请求 |
0xa8 | DU_FILL_REPLAY | 填充与流水线中来自同一线程的指令存在索引冲突。 如果延迟队列中有预取,或者填充没有被 ACK 太长时间并强制进入管道,则填充和请求可能来自不同的线程。 |
0xa9 | DU_SECMISS_REPLAY | 在填充待处理时,负载命中保留行。 |
0xaa | DU_SNOOP_REQUEST_CLEAN_HIT | DU snoop 请求清除命中。 Snoop 击中干净的线条。 |
0xac | DU_READ_TO_L2 | DU 读到 L2。 从 L2 带来数据的所有内容的总和。 包括预取(dcfetch 和 hwprefetch)。 不包括协处理器负载。 |
0xad | DU_WRITE_TO_L2 | DU 写入 L2。 从 DU 写入 L2 数组的所有内容的总和。 包括 dczeroa。 不包括 dcclean、dccleaninv、标记写入和协处理器存储。 |
0xaf | DCZERO_COMMITTED | 提交了 dczeroa 指令。 |
0xb3 | DTLB_MISS | DTLB 未命中转到 JTLB。 当两个插槽都未命中不同的页面时,递增 2。当两个插槽均未命中同一页面时,仅计算 S1,因为 S1 先行并填充 S0。 |
0xb5 | DU_STORE_BUFFER_ACCESS | 此事件计算条目进入存储缓冲区的次数。 |
0xb6 | STORE_BUFFER_HIT_REPLAY | 由于具有 2 个存储的数据包进入同一个存储库但不同的高速缓存行,存储缓冲区命中重放,然后从被推入存储缓冲区的地址加载 。 |
0xb7 | STORE_BUFFER_FORCE_REPLAY | 存储缓冲区必须耗尽,迫使当前数据包重播。 这通常发生在当前数据包和存储缓冲区之间的缓存索引匹配上。 也可能是存储缓冲区超时。 |
0xb9 | SMT_BANK_CONFLICT | 计算线程间 SMT 库冲突。 |
0xba | PORT_CONFLICT_REPLAY | 计算所有端口冲突重播,包括由于高优先级填充和存储缓冲区强制耗尽导致的相同集群重播,以及集群间重播。 |
0xbd | PAGE_CROSS_REPLAY | 页面交叉重播。 来自导致重放的有效数据包的页面交叉。 不包括 pdkill 数据包。 如果两个插槽都导致页面交叉,则计数两次。 |
0xbe | DU_DEALLOC_SECURITY_REPLAY | 由于使用 FRAMEKEY != 0 执行 deallocframe 或 dealloc_return 而重播。 |
0xbf | DU_DEMAND_SECONDARY_MISS | DU请求再次错过。 |
0xc0 | DU_MISC_REPLAY | 所有 DU 重播不计入其他重播事件。 每次 ANY_DU_REPLAY 计数且没有其他 DU 重播事件计数时,此事件都应计数 |
0xc3 | DCFETCH_COMMITTED | dcfetch 已提交。 包括命中和掉落。 不包括转换为预取。 |
0xc4 | DCFETCH_HIT | Dcfetch 在 dcache 中命中。 包括命中有效或保留线路 |
0xc5 | DCFETCH_MISS | 在 L1 中错过了 Dcfetch。 计算发送到 L2 FIFO 的 dcfetch。 |
0xc8 | DU_LOAD_UNCACHEABLE | L1 缓存中的不可缓存负载。 双不可缓存负载计数两次。 |
0xc9 | DU_DUAL_LOAD_UNCACHEABLE | L1 缓存中的双不可缓存负载。 |
0xca | DU_STORE_UNCACHEABLE | 一级缓存中的不可缓存存储。 对于双不可缓存存储,计数两次。 不包括未缓存的备忘录。 |
0xcc | MISS_TO_PREFETCH | Dcache 未命中转换为预取。 可能是数据包中丢失的第二个负载,也可能是同一线程上的 DMT 后续数据包。 当第一次未命中解决时,正常的 dcache 访问继续进行。 包括转换后的预取到不可缓存的空间中,这些空间稍后在管道中被取消。 |
0xce | AXI_LINE64_READ_REQUEST | 由主要 AXI 主控器发出的 64 字节行读取请求。 |
0xcf | AXI_LINE64_WRITE_REQUEST | 由主 AXI 主控器发出的 64 字节行写请求。 所有字节均有效。 |
0xd0 | AXI_WR_CONGESTION | 主要 AXI 写入命令或数据队列已满,并且操作停留在主要 AXI 主命令队列的开头。 |
0xd1 | AHB_8_READ_REQUEST | 进行了 8 字节 AHB 读取。 |
0xd2 | AXI_INCOMPLETE_WRITE_REQUEST | 对主 AXI 进行了 L2 行大小的写入,但并非所有字节都有效。 这包括分段写入。 它不包括 WT 存储。 此事件的目的是捕获在行级别合并的写入次数。 |
0xd3 | L2FETCH_COMMAND_PAGE_TERMINATION | L2fetch 命令终止,因为它无法获得从 VA 到 PA 的页面转换。 包括因许可错误而导致的终止。 例如,地址转换可能会失败,因为 VA 到 PA 不在 TLB 中,或者转换中的属性不可接受并且命令终止。 |
0xd4 | REQUEST_STALL_WRITE_BUFFER_EXHAUSTION | 由于缺少写缓冲区,对 L2 的请求停止。 这是为标量和向量存储设置的 |
0xd5 | L2_DU_STORE_COALESCE | 合并的 139 个事件。 |
0xd6 | L2_STORE_LINK | 计算新存储链接到记分板中其他内容的次数。 |
0xd7 | L2_SCOREBOARD_70_PERCENT_FULL | L2 记分板至少占满 70% 的每个周期递增 1。 对于 32 个条目的记分牌,这意味着消耗了 23 个或更多条目。 即使记分板已满 80%,此事件仍会继续计数。 对于多个交错,此事件仅考虑消耗条目最多的记分牌。 |
0xd8 | L2_SCOREBOARD_80_PERCENT_FULL | L2 记分板至少满 80% 的每个周期递增 1。 对于 32 个条目的记分牌,这意味着消耗了 26 个或更多条目。 即使记分板已满 90%,此事件仍会继续计数。 对于多个交错,此事件仅考虑消耗条目最多的记分牌。 |
0xd9 | L2_SCOREBOARD_90_PERCENT_FULL | L2 记分板至少占满 90% 的每个周期递增 1。 对于 32 个条目的记分牌,这意味着消耗了 29 个或更多条目。 对于多个交错,此事件仅考虑消耗条目最多的记分牌。 |
0xda | L2_SCOREBOARD_FULL_REJECT | L2 记分板太满,无法接受选择器请求,并且选择器有请求。 |
0xdb | L2_DU_RETURN_REPLAYED | 由于 DU 拥塞重放 L2 返回(请求或预取)。 |
0xdc | L2_EVICTION_BUFFERS_FULL | 当任何交错中的所有逐出缓冲区都被占用时,对每个周期进行计数。 |
0xdd | AHB_MULTI_BEAT_READ_REQUEST | 进行了 32 字节多拍 AHB 读取。 |
0xdf | L2_DU_LOAD_SECONDARY_MISS_ON_SW_PREFETCH | 在 0x90 中的事件中,主要未命中的事件是 DCFETCH 或 L2FETCH。 |
0xe1 | REPLAY_MAXIMUM_FORCE | 已达到最大 DU 重播次数,并且通过停止其他线程来强制该线程通过 DU。 |
0xe2 | SCHEDULER_WATCHDOG_FORCE | CU 调度程序看门狗强制线程选择的次数。 这个线程选择可以被活锁警告随机化器覆盖。 |
0xe3 | LIVELOCK_REFETCH | 活锁检测器触发重新获取所有线程的次数。 |
0xe4 | CYCLES_LIVELOCK_WARNING | 由于传递了活锁警告水印,Cycles 核心正在随机化调度程序。 这可能是核心没有取得进展的迹象,或者只是水印设置得太低而无法在系统中进行合法停顿。 |
0xe5 | THREAD_OFF_PVIEW_CYCLES | 由于线程关闭或等待,Cycles 集群无法提交。 |
0xe6 | ARCH_LOCK_PVIEW_CYCLES | 由于内核锁或 TLB 锁,Cycles 集群无法提交。 |
0xe7 | REDIRECT_PVIEW_CYCLES | 由于分支错误预测等重定向,Cycles 集群无法提交。 |
0xe8 | IU_NO_PKT_PVIEW_CYCLES | 由于 IQ 为空,Cycles 集群无法提交。 |
0xe9 | DU_CACHE_MISS_PVIEW_CYCLES | 由于 D-cache 可缓存未命中,Cycles 集群无法提交。 |
0xea | DU_BUSY_OTHER_PVIEW_CYCLES | 由于 DU 重播或 DU 停顿或 DTLB 未命中,Cycles 集群无法提交。 |
0xeb | CU_BUSY_PVIEW_CYCLES | 由于寄存器互锁、寄存器端口冲突、由于时序类(例如 tc_3stall、无 B2B HVX 或 HVX FIFO 已满)而导致的停顿,周期集群无法提交。 |
0xec | SMT_DU_CONFLICT_PVIEW_CYCLES | 由于 DU 资源冲突,Cycles 集群无法提交。 |
0xed | SMT_XU_CONFLICT_PVIEW_CYCLES | 由于 XU 资源冲突,Cycles 集群无法提交。 |
0xee | DU_UNCACHED_PVIEW_CYCLES | 由于 D-cache 不可缓存访问,Cycles 集群无法提交。 |