0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解析Arm Neoverse N2 PMU事件L2D_CACHE_WR

Arm社区 来源:Arm社区 作者:Arm社区 2024-09-03 11:42 次阅读

作者:安谋科技 (Arm China) 主任工程师 Ker Liu;安谋科技 (Arm China) 主任软件工程师 蔡亦波

有客户希望我们帮忙分析 Eigen gemm 基准测试的一些执行情况。具体来说是为什么 L1D_CACHE_WR 的值会低于 L2D_CACHE_WR,这种情况令人费解。

wKgaombWhaWAAQMZAABcOJk8riw523.jpg

通常,我们期望写操作发生在 L1 数据缓存中。来自 L1 数据缓存的一些回写可能会引发 L2 缓存写操作。一般来说,L1 数据缓存写操作的数量应该高于 L2 缓存写操作的数量。对于一些常用的工作负载(例如 Redis 和 Nginx),如果我们对 PMU 进行监控,就会发现 L1 数据缓存写操作的数量会高于 L2 缓存写操作的 PMU 值。但对于某些工作负载而言,L1 数据缓存写操作的 PMU 值要低于 L2 缓存写操作的 PMU 值。

本文中,我们将分析 L2D_CACHE_WR 的计数,以及在何种情况下,L1D_CACHE_WR 的 PMU 值会低于 L2D_CACHE_WR。

验证平台

本文中的测试都是基于 Arm Neoverse N2 平台的服务器。下表显示了该服务器的硬件和软件版本信息

wKgaombWhbOAEjL2AABBtrmDepA763.jpg

调查

对于大多数工作负载而言,L1D_CACHE_WR 的 PMU 值要高于 L2D_CACHE_WR。例如,对于 Redis 来说,一个 Redis 进程在Core 1 上运行。使用 Memtier 客户端来生成读写混合请求。

wKgZombWhcKAU9TVAABMGsBW1cQ604.jpg

以下是 Neoverse N2 PMU 指南[1]中 L1D_CACHE_WR 和 L2D_CACHE_WR 的定义。

L1D_CACHE_WR:此事件将统计在 L1 数据缓存中查找的任何内存写入操作。此事件还将统计由数据缓存按虚拟地址清零 (DC ZVA) 指令所引发的访问操作。

L2D_CACHE_WR:此事件将统计由 CPU 发出并在统一 L2 缓存中查找的任何内存写入操作。无论 L2 缓存是否命中,该事件都将计数。此事件还将统计从 L1 数据缓存分配到 L2 缓存的任何回写。此事件将 DC ZVA 操作视为存储指令并统计这些访问。来自 CPU 外部的监听不计算在内。

从 Neoverse N2 技术参考手册[2]中我们知道,L1 缓存和 L2 缓存之间具有严格的包含关系。存在于 L1 缓存中的任何缓存行也同样存在于 L2 缓存中。

经过分析研究,我们发现如下规律:

L2D_CACHE_WR 的 PMU 值约等于“L1 数据缓存重填”、“L1 指令缓存重填”和“L1 预取重填”的 PMU 值之和。

为什么我们要从这三个事件开始分析?

因为这三个事件都会引起 L1 数据缓存和 L1 指令缓存的替换行为,包括干净替换 (clean evictions) 和脏替换 (dirty evictions)。如果仔细看 L2D_CACHE_WR 的定义,您会发现它将统计从 L1 数据缓存分配到 L2 缓存的任何回写。L1 数据缓存回写则统计从 L1 数据缓存到 L2 缓存的任何脏数据回写,该值通常非常小,与 L2D_CACHE_WR 的值并不匹配,且没有专门针对干净替换的 PMU 计数器。因此,我们综合考虑了所有可能导致缓存替换的事件(包括干净替换和脏替换),从不同的角度进行分析,找到了这个规律。

wKgaombWhc6AbAEGAABLPedFu4M230.jpg

我们已在几个典型场景中验证了这一发现。大多数测试用例确实遵循这种规律。

对于 Redis 的情况

我们使用 Memtier 客户端作为负载生成器,为 Redis 进程生成混合读写请求,结果发现 PMU 值遵循相应规律。

wKgaombWhdqAT66TAABodPvgx80915.jpg

对于“Telemetry: ustress: l1d_cache_workload”[3]的情况

此基准测试仅读取数据,旨在对 L1 数据缓存的未命中情况进行压力测试,结果发现 PMU 值遵循相应规律。

wKgaombWhfaAR1LIAABfDAOeRrc273.jpg

对于“Telemetry: ustress: l1i_cache_workload”[4]的情况

此基准测试将重复调用那些与页面边界对齐的函数,旨在对 CPU L1 指令缓存的未命中情况进行压力测试,结果发现 PMU 值遵循相应规律。

wKgaombWhgWAGzrLAABhpC78Us0471.jpg

对于 Eigen gemm 的情况

此基准测试包含许多读取操作。L1D_CACHE_WR 的 PMU 值比较小,但 L1 缓存的预取操作导致 L2D 的 PMU 值很大。因此,我们得到的结果是 L1D_CACHE_WR 的 PMU 值要低于 L2D_CACHE_WR。PMU 值也遵循这种规律。

wKgaombWhhCAMhY3AABvTojHREU782.jpg

但是,流写入是一个例外。我们使用“Telemetry: ustress: memcpy_workload”[5]基准测试,对加载-存储 (load-store) 管线中完全处于 L1D 缓存内的 memcpy 进行压力测试。memcpy 触发流写入,跳过 L1 并直接写入 L2。此时,PMU 值并不遵循这种规律。

wKgZombWhiWAVsvQAABdaHpXAyo077.jpg

以下是 Neoverse N2 技术参考手册中关于写入流模式的描述。

Neoverse N2 核心支持写入流模式(有时也称为读取分配模式),这一点同时适用于 L1 和 L2 缓存。

当发生读取未命中或写入未命中时,会向 L1 和 L2 缓存分配缓存行。但是,写入大块数据可能会导致不必要的数据浪费缓存空间。这也可能会浪费功率和性能,因为在执行行填充后,如果 memset() 随后写入了整行数据,行填充数据将被丢弃。有些情况下,不需要在写入时分配缓存行,例如在执行 C 标准库 memset() 函数以将一大块内存清除为某个已知值时。

为了防止不必要的缓存行分配,内存系统可以在行填充完成之前检测核心何时写入完整的缓存行。如果在可配置数量的连续行填充中检测到这种情况,系统就会切换到写入流模式。

在写入流模式下,读取操作会正常执行,仍可能引发行填充。写入操作还是会先查找缓存,但如果未命中,它们就会写入 L2 或系统,而不是开始行填充。

总结

在基于 Neoverse N2 的服务器上,L2D_CACHE_WR 会统计来自 L1 缓存的所有缓存替换(包括干净替换和脏替换)以及流写入。

对于读取大量数据的工作负载,我们会看到,L1D_CACHE_WR 的 PMU 值要低于 L2D_CACHE_WR。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9040

    浏览量

    366719
  • 服务器
    +关注

    关注

    12

    文章

    9010

    浏览量

    85160
  • 数据缓存
    +关注

    关注

    0

    文章

    23

    浏览量

    7044
  • PMU
    PMU
    +关注

    关注

    1

    文章

    108

    浏览量

    21563

原文标题:深入研究 Arm Neoverse N2 PMU 事件 L2D_CACHE_WR

文章出处:【微信号:Arm社区,微信公众号:Arm社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Arm Neoverse家族新增V1和N2两大平台,突破高性能计算瓶颈

    Arm 近日公开了Arm® Neoverse V1 和 N2 平台的产品细节,两者满足了基础设施应用的各种需求。这两个平台的设计旨在解决当前正在运行的各种工作负载和应用问题,与上一代
    的头像 发表于 04-30 16:20 9117次阅读

    ARM Neoverse N2 PMU指南

    发生时。 2.1 范围 本文件提供N2 PMU事件的高水平描述。 提到建筑行为和N2微性造影行为,以澄清这些事件的描述。 关于更完整的武器结构描述,请参考Armú 建筑参考手册。 关于
    发表于 08-09 06:07

    Arm Neoverse V1 PMU指南

    事件之一时计数发生。 2.1范围 本文档提供了Neoverse V1 PMU事件的高级描述。有参考资料体系结构行为和Neoverse V1微观体系结构行为事件描述。有关Arm架构的更完
    发表于 08-09 07:30

    Arm Neoverse N2汽车硬件技术概述

    算子系统。RD-N2-Automotive是在RD-N2的基础上逐步开发的。 本文件必须与Arm NeoverseTM N2参考设计(RD-N2
    发表于 08-10 06:25

    ARM NeoverseN2软件优化指南

    新宇宙™ N2是一款高性能、低功耗的产品,采用Arm®v9.0-a架构。此实现支持Arm®v8.6‑A之前的所有Armv8-A体系结构实现。
    发表于 08-11 06:47

    Arm NeoverseN1 PMU指南

    本文档提供了Neoverse N1 PMU事件的高级描述。 对体系结构行为和Neoverse N1微体系结构行为的引用阐明了这些事件描述。
    发表于 08-12 07:10

    Arm NeoverseN2核心加密扩展技术参考手册

    NeoverseN2核心支持可选的ARM®v8.0-A和ARM®v8.2-A加密扩展。 ARM®v8.0-A加密扩展为Advanced S
    发表于 08-17 07:08

    ARM NeoverseN1核心技术参考手册

    (推测存储旁路安全)位,以及ARM®v8.5-A扩展中引入的推测屏障(CSDB、SSBB、PSSBB)指令。 NeoverseN1内核具有1级(L1)内存系统和专用的集成
    发表于 08-29 08:05

    ARM NeoverseN2核心技术参考手册

    NeoverseN2内核是一款高性能、低功耗的产品,采用ARM®v9.0-A架构。 此实施支持所有以前的ARMv8-A架构实施,包括ARM®v8.5-A。 Neoversedsu
    发表于 08-29 08:12

    A_D-2WR2

    A_D-2WR2数据手册,又需要的下来看看。
    发表于 01-13 17:53 8次下载

    互联网巨头纷纷启用Arm CPU架构,Arm最新Neoverse V1和N2平台加速云服务器芯片自研

    电子发烧友网报道(文/黄晶晶)Arm在2018年10月宣布了Neoverse的路线图,继2019年Neoverse N1平台发布后,今年9月发布Ne
    发表于 09-30 14:46 1181次阅读

    Arm推出新一代平台 Neoverse V2 平台

    目前,Arm Neoverse家族包括:V系列、N系列以及E系列。就在今年9月,Arm Neoverse迎来新的进展,推出新一代平台
    的头像 发表于 09-26 09:22 1423次阅读

    Neoverse N2和CMN-700系统的PoC点在哪里?

    DC IVAC/ DC CIVAC指令用于将一个虚拟地址对应的cache line从data cache或是unified cache失效或清除失效到PoC点。N2 core硬件默认会
    的头像 发表于 06-09 16:45 2814次阅读
    <b class='flag-5'>Neoverse</b> <b class='flag-5'>N2</b>和CMN-700系统的PoC点在哪里?

    Arm 更新 Neoverse 产品路线图,实现基于 Arm 平台的人工智能基础设施

    Neoverse CSS 产品;与 CSS N2 相比,其单芯片性能可提高 50% Arm Neoverse CSS N3 拓展了
    发表于 02-22 11:41 349次阅读

    ArmArm Neoverse计算子系统(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Neoverse CSS N3代表了Arm计算子系统产品组合的最新进展。 Neoverse CSS V3是高性能V系列产品组合的首款产品,相比其前身
    的头像 发表于 04-24 17:53 984次阅读
    <b class='flag-5'>Arm</b>新<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b>计算子系统(CSS):<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS V3和<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS <b class='flag-5'>N</b>3