【问题标题】:Vtune: Accuracy of Intel sampling drivers when vtune measurement run on a machine running other tasksVtune:在运行其他任务的机器上运行 vtune 测量时英特尔采样驱动程序的准确性
【发布时间】:2021-08-23 15:56:50
【问题描述】:

我有最新的咖啡机,主要用作存储服务器。单独运行存储服务器时,每个核心(4 个核心)的平均工作负载约为 5-10%。

我想使用英特尔采样驱动程序在这台机器上运行工作负载的 vtune 测量。但是,鉴于存储服务器应用程序正在同时运行,我怀疑测量是否准确。

但正如英特尔的文件所暗示的那样,采样驱动程序安装在 Linux 内核上,那么如果与其他应用程序同时运行,测量结果是否真的会不准确?换句话说,英特尔采样驱动程序究竟是如何工作的?他们是否能够区分工作负载进程和系统上运行的其他进程?

【问题讨论】:

    标签: linux performance intel intel-vtune intel-pmu


    【解决方案1】:

    如果 VTune 类似于 perf 使用的 Linux PAPI 子系统,它基本上会在上下文切换时保存/恢复硬件事件计数器寄存器以及常规寄存器状态。所以像instructionsuops_retired 这样的事件应该不受影响。而对其他事件的影响将是由于实际影响,例如额外的缓存未命中。

    (硬件性能事件的基本机制是每个逻辑内核都有自己的可编程性能计数器,每次发生一些微体系结构事件时都会递增。如果一个溢出,它会引发一个中断让驱动程序收集计数。或者@ 987654324@ 类型的功能,perf 或 VTune 会将它们编程为倒计时,因此定期触发中断,并在此时对保存的用户空间 RIP 进行采样。这会对超标量无序 CPU 产生一些时髦的效果,例如“例如,指责“等待数据的指令,而不是缓存未命中加载本身。但关键是内核内部事件完全是每个内核的。非内核/ L3缓存事件计算有关共享资源的内容,例如L3缓存,因此更容易受到系统负载的干扰。)

    另一点是,如果您正在在 CPU 内核上运行某些东西,Linux 不会想要在那里安排其他任务。因此,您的后台负载将倾向于避免您的测试在哪个内核上运行,使其能够使用 100% 的单个内核而无需大量上下文切换。 (尽管网络/磁盘中断可能仍会在该内核上处理。)

    所以,是的,您应该能够相当准确地测量您的进程在一个并非完全空闲的系统上运行时实际发生的情况。这可能与在完全空闲的系统上运行时会发生的情况有所不同,但可能差别不大。特别是如果它是单线程的,或者您可以将其限制为少于所有内核,因此操作系统至少还剩下一个可以安排其他任务。

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2016-12-25
      相关资源
      最近更新 更多