rust 使用perf_event_open 观测事件,部分系统事件不更新

💡 原文中文,约5100字,阅读约需12分钟。
📝

内容提要

该代码用于采集PERF_COUNT_HW_CPU_CYCLES数据,测试在不同操作系统下的输出。在Ubuntu环境下输出正常,而在AliOS环境下输出异常,始终为零。代码实现了性能事件的打开、重置和启用功能。

🎯

关键要点

  • 该代码用于采集PERF_COUNT_HW_CPU_CYCLES数据。
  • 在Ubuntu环境下,输出符合预期,显示正常的CPU周期数据。
  • 在AliOS环境下,输出始终为零,未能采集到有效数据。
  • 代码实现了性能事件的打开、重置和启用功能。
  • 使用perf_event_open函数打开性能计数器事件。
  • 使用ioctl函数重置和启用性能事件计数器。

延伸问答

在Ubuntu环境下,PERF_COUNT_HW_CPU_CYCLES数据的输出是什么样的?

在Ubuntu环境下,输出正常,显示的CPU周期数据符合预期。

AliOS环境下的PERF_COUNT_HW_CPU_CYCLES数据输出有什么问题?

在AliOS环境下,输出始终为零,未能采集到有效数据。

如何使用perf_event_open函数采集性能事件?

使用perf_event_open函数可以打开性能计数器事件,并通过ioctl函数重置和启用性能事件计数器。

代码中如何实现性能事件的重置和启用?

代码中使用perf_event_ioctl_reset和perf_event_ioctl_enable函数来重置和启用性能事件计数器。

在不同操作系统下,PERF_COUNT_HW_CPU_CYCLES数据的表现有什么差异?

在Ubuntu下数据正常,而在AliOS下数据始终为零,表现差异明显。

代码中使用的主要库和函数有哪些?

代码中主要使用了perf_event_open_sys库及其bindings中的函数,如perf_event_open、ioctl等。

➡️

继续阅读