计数器多路复用方式

您可以使用计数器多路复用来设置比可用硬件计数器更多事件的计数。 此方式用于分析具有相同性能特征的工作负载。 这避免了需要多次运行工作负载以收集比可用硬件计数器更多的事件。

在此方式下, pmapi 会定期更改计数的设置,并为多组事件累积值和计数时间。 在切换到下一个事件集之前,每个事件集的计数时间可以在 10 毫秒到 30 秒的范围内。 缺省值为 100 毫秒。

返回的值包括对所有事件集进行计数的次数,并且对于每个集,将累积计数器值和对该集进行计数的累积时间。 累积时间最多以三种不同的方式进行测量: 使用 "时间基准" ,可用时使用 "PURR 时间" 和 "SPURR 时间"。 这些时间以 timebase 格式存储,可以使用 time_base_to_time 函数将其转换为时间。 这些时间用于在整个测量时间间隔内规范化结果。

多个基本 pmapi 调用具有由 _mx 后缀指示的以下多路复用方式变体:

pm_set_program_mx
设置计数配置。 它与 pm_set_program 函数不同,因为它接受一组要计数的组 (或事件列表) ,并且在切换到下一个集合之前必须计数每个集合的时间。
pm_获取程序最大值
检索当前性能监视器设置。 它与 pm_get_program 函数不同,因为它返回一组组 (或事件列表)。
pm_获取数据_最大值
返回性能监视器计数数据。 它返回一组计数数据,每个组 (或配置的事件列表) 一个计数数据。 返回的数据除了包含累积计数器值外,还包含所有已配置集合的计数次数,并且对于每个集合,还包括其计数的累积时间。
pm_获取_tdata_mx
pm_get_data_mx相同,但包含指示上次读取硬件性能监视器计数器的时间戳记。
pm_get_data_cpu_mx/pm_get_tdata_cpu_mx
pm_get_data_mxpm_get_tdata_mx相同,但返回单个处理器的性能监视器计数数据。 指定的处理器号必须在 0 到 _system_configuration.ncpus范围内。 如果发生了动态重新配置操作,那么此数字可能表示来自调用的不同处理器。
pm_get_data_lcpu_最大值/pm_get_tdata_lcpu_最大值
pm_get_data_cpu_mxpm_get_tdata_cpu_mx相同,但返回单个逻辑处理器的性能监视器计数数据。 逻辑处理器编号不连续,如果自上次调用 pm_set_program_mx以来指定的逻辑处理器未联机,那么对这些接口的调用将返回错误。 逻辑处理器号始终指定相同的处理器,即使发生了动态重新配置操作也是如此。 要获取所有处理器的数据,必须在从 0 到 _system_configuration.max_ncpus的循环中调用这些接口。