“perf”具体显示哪些页面错误?

“perf”具体显示哪些页面错误?

我想计算脚本完整运行过程中的磁盘访问次数。

我的 bash 脚本在本地运行另外 2 个可执行文件,在远程运行另外 2 个可执行文件。如下所示(这些可执行文件本身可能会访问其他工具):

#!/bin/bash

./executable1 DATA1 &
./executable2 DATA2 &

ssh remote_host './executable3 DATA3' &
ssh remote_host './executable4 DATA4' &

wait;

现在我正在perf像这样运行我的 bash 脚本:

perf stat -e page-faults,page-faults:u ./myBashScript.sh

但结果总是相同的,无论我是否更改 DATA* 文件、顺序、命令数量……如下所示:

128,470 page-faults
127,641 page-faults:u

现在我的问题是“如何计算整个脚本的磁盘访问次数?”

附言:

  • 如您所知,Linux 尝试通过使用 RAM 的可用空间作为缓存磁盘来减少磁盘访问次数,这里所说的“计算磁盘访问次数”确切地意味着 OS 需要将数据从硬盘传送到主内存的次数(= RAM 命中/未命中)
  • 我只需要计算本地机器上的磁盘访问次数,而不是远程机器的磁盘访问次数。

答案1

perflinux 工具 ( )中的页面错误perf_events既包括次要页面错误,也包括主要页面错误。次要页面错误不适用于磁盘访问。并非每个主要页面错误都适用于磁盘访问(仅当编辑了磁盘文件时才适用mmap)。读/写磁盘访问不会产生任何页面错误。

一些通用的页面错误计数解决方案如下https://stackoverflow.com/questions/23302763

要全局统计磁盘访问次数,请使用iostat工具http://man7.org/linux/man-pages/man1/iostat.1.html(tps、r/s、w/s) 或vmstat工具http://man7.org/linux/man-pages/man8/vmstat.8.html(bo、bi、-d)。两者都与以秒为单位的句点一起使用,例如iostat 1vmstat 1每秒打印一组活动,直到被 ctrl-c 终止;或者像iostat 1 60vmstat 1 60每秒打印 1 分钟并退出。

其他解决方案是结合使用perf工具和来自 i/o 或磁盘子系统的一些特定事件。Gregg 在以下网址提供了一些高级 perf 使用示例:http://www.brendangregg.com/perf.htmlhttps://github.com/brendangregg/perf-tools

他的 iosnoop 工具http://www.brendangregg.com/blog/2014-07-16/iosnoop-for-linux.htmlhttp://www.brendangregg.com/blog/2014-07-23/linux-iosnoop-latency-heat-maps.html(基于 perf)可以使用进程 pid、磁盘 id、偏移量和 io 大小跟踪磁盘 i/o,还可以测量磁盘访问的延迟。

另请参阅“7.2. 热图”http://www.brendangregg.com/perf.html

我使用 perf_events 记录块请求(磁盘 I/O)问题和完成静态跟踪点:

 # perf record -e block:block_rq_issue -e block:block_rq_complete -a sleep 120

相关内容