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

相關文章
相關標籤/搜索