Linux kernel 测量Linux上程序发生的页面错误数

Linux kernel 测量Linux上程序发生的页面错误数,linux-kernel,posix,system-calls,page-fault,Linux Kernel,Posix,System Calls,Page Fault,我正在Linux调度器上做一个项目,试图将页面错误的数量降到最低 我已经完成了算法的实现,我需要测量效果。我想知道Linux是否提供了工具来记录在整个执行过程中发生的页面错误数 基本上,我想要 $ pfstat ./a.out page faults: 3 Execution Time: 1003 ms 有这样的工具吗?在决定自己编写一个之前,我想确定这将是一项艰巨的工作…在大多数系统上/usr/bin/time将报告页面错误,例如: $ /usr/bin/time /bin/true 0.0

我正在Linux调度器上做一个项目,试图将页面错误的数量降到最低

我已经完成了算法的实现,我需要测量效果。我想知道Linux是否提供了工具来记录在整个执行过程中发生的页面错误数

基本上,我想要

$ pfstat ./a.out
page faults: 3
Execution Time: 1003 ms

有这样的工具吗?在决定自己编写一个之前,我想确定这将是一项艰巨的工作…

在大多数系统上
/usr/bin/time
将报告页面错误,例如:

$ /usr/bin/time /bin/true
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 1632maxresident)k
40inputs+0outputs (1major+141minor)pagefaults 0swaps

在大多数系统上,
/usr/bin/time
会报告页面错误,例如:

$ /usr/bin/time /bin/true
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 1632maxresident)k
40inputs+0outputs (1major+141minor)pagefaults 0swaps
我建议:

$perf stat make
“make”的性能计数器统计信息:
4.142908任务时钟#使用0.781个CPU
0个上下文开关#0.000 K/sec
0 CPU迁移#0.000 K/sec
318页错误#0.077米/秒
311777个周期#0.751 GHz
1956914失速循环前端#62.89%前端循环闲置
2275123后端暂停周期#73.11%后端周期空闲
11244599指令#每周期3.61 INSN
#每insn 0.20次失速循环[65.87%]
分支机构
分支未命中
0.005305316秒经过的时间
它计算页面错误以及许多其他性能计数器

但它需要您安装一个包
perf

我建议:

$perf stat make
“make”的性能计数器统计信息:
4.142908任务时钟#使用0.781个CPU
0个上下文开关#0.000 K/sec
0 CPU迁移#0.000 K/sec
318页错误#0.077米/秒
311777个周期#0.751 GHz
1956914失速循环前端#62.89%前端循环闲置
2275123后端暂停周期#73.11%后端周期空闲
11244599指令#每周期3.61 INSN
#每insn 0.20次失速循环[65.87%]
分支机构
分支未命中
0.005305316秒经过的时间
它计算页面错误以及许多其他性能计数器


但是它需要您安装一个包
perf

谢谢!主要和次要页面错误是什么意思?我不确定主要和次要页面错误是否100%定义良好。但一般来说,重大故障意味着它必须执行一些I/O来维护故障,例如,从磁盘加载页面。从手册页:重大故障:这些是必须从磁盘读入页面的故障。次要错误:这些是无效页面的错误,但其他虚拟页面尚未声明这些错误。因此,页面中的数据仍然有效,但必须更新系统表。谢谢!主要和次要页面错误是什么意思?我不确定主要和次要页面错误是否100%定义良好。但一般来说,重大故障意味着它必须执行一些I/O来维护故障,例如,从磁盘加载页面。从手册页:重大故障:这些是必须从磁盘读入页面的故障。次要错误:这些是无效页面的错误,但其他虚拟页面尚未声明这些错误。因此,页面中的数据仍然有效,但必须更新系统表。