我想在运行一些工作负载时收集性能计数器数字。这可以使用现有的 LAPI 性能计数器基础设施轻松完成。但是,我想要更多的统计数据,比如
- 环级指令数 0,1,2,3
- 不同环级别对 l1 缓存的加载请求数
- 环形电平开关长度
所以,实际上我想要区分操作系统和应用程序的内存访问。
有人可以指导我如何做到这一点吗?PS:我以前没有使用过性能计数器。所以,对你来说似乎有点微不足道的事情实际上可能对我有帮助。谢谢
PS:有没有办法在不改变应用程序行为的情况下获得系统的执行跟踪和内存访问跟踪。
我想在运行一些工作负载时收集性能计数器数字。这可以使用现有的 LAPI 性能计数器基础设施轻松完成。但是,我想要更多的统计数据,比如
所以,实际上我想要区分操作系统和应用程序的内存访问。
有人可以指导我如何做到这一点吗?PS:我以前没有使用过性能计数器。所以,对你来说似乎有点微不足道的事情实际上可能对我有帮助。谢谢
PS:有没有办法在不改变应用程序行为的情况下获得系统的执行跟踪和内存访问跟踪。
您可以使用perf等硬件性能计数器。
现代硬件提供了硬件性能计数器,因此您的机器很有可能具有此功能。此外,您可能需要为其放置内核驱动程序。(在 ubuntu 上 sudo apt-get 对此很神奇)。
perf 的一点描述(从上面的链接导入)
Perf 是一个用于基于 Linux 2.6+ 的系统的分析器工具,它抽象出 Linux 性能测量中的 CPU 硬件差异,并提供了一个简单的命令行界面。Perf 基于最新版本的 Linux 内核导出的 perf_events 接口。
perf 工具支持可测量事件列表
这些事件在上面的链接中列出。
说在许多事件中,您想获得cycles
以下事件的统计信息
perf stat -e cycles:u -e cycles:k -e cycles dd if=/dev/zero of=/dev/null count=100000
where u
and k
stands user and kernel respectively. you can also put all the events by separating them using comma.