Linux应用程序的性能分析(1)--page fault

影响一个应用程序性能的因素有不少,此次说说page fault。html

1. 为何会存在page fault问题?shell

计算机的物理内存(看看你的内存条)有限,通常如今都是几个GB的容量了,BTW,个人笔记本有8GB,:-)。ide

但应用程序的需求是无限的,操做系统为了解决这个矛盾,使用了虚拟内存的设计。简单的描述就是,给应用程序函数

一个与物理内存无关的虚拟地址空间,并提供一套映射机制,将虚拟地址映射到物理内存。固然应用程序是不知道性能

有这个映射机制存在的,他惟一须要作的就是尽情的使用本身的虚拟地址空间。操做系统提供的映射机制是spa

运行时动态进行虚拟地址和物理地址之间的映射的,当一个虚拟地址没有对应的物理内存时候,操作系统

映射机制就分配物理内存,构建映射表,知足应用程序的需求,这个过程就叫page fault。设计

与直接访问物理内存不一样,page fault过程大部分是由软件完成的,消耗时间比较久,因此是影响性能的一个关键指标。orm

Linux把page fault又进一步分为minor page fault和major page fault。前面提到的分配物理内存,构建映射表过程能够看作是htm

minor page fault。major page fault是由swap机制引入的,对于swap状况,地址映射好了后,还须要从外部存储读取数据,这个

过程涉及到IO操做,耗时更久。

2. 如何查看应用程序的page fault指标呢?

1) 可使用time命令:

     好比我想看看svm-train的状况(模型训练很耗资源)\time svm-train age_train_equal.txt(前面的斜杠表示不使用shell的内嵌time命令)

输出是:7.68user 0.02system 0:07.71elapsed 99%CPU (0avgtext+0avgdata 42768maxresident)k

              0inputs+6696outputs (0major+15445minor)pagefaults 0swaps

能够看到只有minor page fault,没有major。

time命令的实现是用到了Linux提供的rusage机制。Linux的wait API能够返回一个应用程序的运行过程的资源消耗状况。

若是你想在本身的代码中获取资源利用状况,可使用libc的getrusage函数,这个函数也是内核的API。

2) proc文件系统

Linux系统下的/proc/PID/stat文件,也提供了相关统计数据。

转载自

http://www.cnblogs.com/cornsea/archive/2012/12/17/2821429.html

相关文章
相关标签/搜索