• 论文题目:Efficient Cross-platform Multiplexing of Hardware
    Performance Counters via Adaptive Grouping
  • 作者:TONG-YU LIU, JIANMEI GUO, and BO HUANG
  • 期刊:ACM Trans. Arch. Code Optim.
  • 年份:2024

引入

硬件性能监控计数器(PMC)用于监控各种微架构性能事件,如时钟周期、失效的指令、缓存丢失和分支的错误预测。这些计数可以计算出丰富的性能指标,如每个指令的评价周期数(CPI)、每千条指令的缓存丢失数(MPKI)和分支预测错误率等。

与需要测量的事件数量相比,PMC的数量相对有限。一种广泛使用的解决方案是多路复用,即将事件分组并轮流使用PMC,并根据实际计数和采样率估计结果。

目前,Linux内核已经集成了perf_event子系统,以支持PMC访问。它还实现了一个针对多路复用的循环事件调度策略。各种用户模式实现的接口或工具都是在Linux perf_event之上开发的,如PAPI、LIKWID和Linux perf。

事件组对于多路复用至关重要,并与衍生指标的可靠性相关。通常,用于计算衍生指标的事件需要在同一事件组中设置,以便同时测量它们。现有的分析工具实现预定义的事件组,或基于待测度量动态生成的事件组。但是,现有的方法和工具仍然有以下一些局限性:

  • 效率较低:现有工具主要关注指标的可靠性,而忽略了多路复用PMC的效率,导致了PMC的利用率较低。
  • Linux perf_event中的事件调度陷阱:当将事件调度进入多路PMC时,Linux perf_event并不区分固定的PMC事件和通用的PMC事件。
  • 可用PMC的数量未知:测量效率低下的根本原因是人们难以获取可用PMC的数量。因此,工具保守地设计事件组,不能跨平台生成自适应的高效事件组。
    • 实际可用的PMC数量和工具能获取到的PMC总数往往是不匹配的,因为可能存在占用PMC的进程,如不可屏蔽中断(NMI)监视器或其他分析器。
    • PMC的数量可能并不总是能从文件中准确地获得。

PMC的利用不足导致指标的抽样率比较低,最终影响测量的准确性。此外,利用率不足还导致了需要设置更多的事件组。

为此,我们提出了一种通过自适应分组的多路复用PMC来高效测量跨平台微架构性能的方法。本文的贡献如下:

  • 我们提出了一种纯粹的数据驱动和易于使用的方法,用于检测主流x86-64和AArch64平台上可用PMC的数量。在此基础上,我们提出了一种有效的方法,以多路复用检测到的PMC,以生成自适应事件组,而不影响性能测量的可靠性。
  • 通过对Linux内核源代码的深入分析,揭示了Linux perf_event子系统中多路复用PMC的详细事件调度策略。我们揭示了内核调度器不区分固定PMC和通用PMC的调度缺陷。此外,我们还减轻了用户模式中的缺陷,以保证性能测量的效率。
  • 我们实现了我们的方法,并开发了一个跨平台的微架构性能数据收集器-hperf。该工具使用Python,并在Linux perf的基础上开发。它是开源的,目前已经验证了主流的x86-64和AArch64处理器。
  • 我们使用SPEC CPU 2017验证了我们的方法的正确性。此外,我们还在性能评估的场景中评估了效率。实验表明,我们的工具在性能指标的平均采样比方面提高了约50%。