“perf”作为页面错误究竟显示了什么?

Dar*_*ark 5 memory linux cache perf

我想在我的脚本完整运行期间计算磁盘访问次数。我的 bash 脚本在本地运行另外 2 个可执行文件和远程运行另外 2 个可执行文件。像这样(那些可执行文件本身可以访问其他工具):

#!/bin/bash

./executable1 DATA1 &
./executable2 DATA2 &

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

wait;
Run Code Online (Sandbox Code Playgroud)

现在我正在运行我的 bash 脚本,perf如下所示:

perf stat -e page-faults,page-faults:u ./myBashScript.sh
Run Code Online (Sandbox Code Playgroud)

但结果总是相同的,无论我是否更改 DATA* 文件、命令、命令数量,......像这样:

128,470 page-faults
127,641 page-faults:u
Run Code Online (Sandbox Code Playgroud)

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

附:

  • 如您所知,Linux 试图通过使用 ram 的可用空间作为缓存磁盘来减少磁盘访问次数,这里通过“计算磁盘访问次数”我确切的意思是操作系统需要将数据从硬盘带到主内存的次数(= RAM命中/未命中)
  • 我只需要计算本地机器上的磁盘访问次数而不是远程机器。
  • 抱歉英语不好。

osg*_*sgx 2

perfLinux 工具 ( ) 中的工具中的页面错误perf_events适用于次要页面错误和主要页面错误。较小的页面错误不适用于磁盘访问。并不是每个主要页面错误都是针对磁盘访问的(仅是磁盘文件被mmap编辑)。并且磁盘读/写访问不会产生任何页面错误。

一些通用的页面错误计数解决方案位于/sf/ask/1631193441/

要统计全局磁盘访问次数,请使用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 在http://www.brendangregg.com/perf.htmlhttps://github.com/brendangregg/perf-tools提供了一些高级 perf 使用示例。

他的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,并且它还将测量磁盘访问的延迟。

另请查看http://www.brendangregg.com/perf.html的“7.2. 热图”

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

 # perf record -e block:block_rq_issue -e block:block_rq_complete -a sleep 120
Run Code Online (Sandbox Code Playgroud)