6

ページ フォールトの原因となるメモリ アクセス (ポインタ) を取得する方法を知っている人はいますか? 私は主に主要なページフォールトに興味があります。

私が達成しようとしていることについての少しの背景。大きなメモリ フットプリント (データベース) を持つアプリケーションがあり、ページングを大きなデータ構造 (テーブル、mmap() を使用して割り当てられたインデックスなど) へのアクセスと関連付けたいと考えています。プロセスのマッピングは、/proc//maps から簡単に取得できます。ここで、ページ フォールトを引き起こすメモリ アクセスがある場合、各データ構造にアクセスするときに発生したページ フォールトの数を追跡できます。

perf または systemtap で十分だと思います。何か案は?

4

2 に答える 2

7

プローブ ポイントで何が利用できるかを確認します。

% stap -L vm.pagefault
vm.pagefault name:string write_access:long address:long $mm:struct mm_struct* \
   $vma:struct vm_area_struct* $address:long unsigned int $flags:unsigned int

ログ、アドレスをシンボル名にマップしようとしています

# stap -e 'probe vm.pagefault { if (execname()=="foo") { printf("%p (%s)\n", address, usymdata(address)) } }' -d /bin/foo --ldd

参照: http://sourceware.org/systemtap/examples/#memory/pfaults.stp

于 2013-03-25T19:39:42.303 に答える
7

あなたの推測は正しいです。perf ツールを使用して、アプリケーションが引き起こしたページ フォールトの数を追跡できます。

このチュートリアルを読んでツールの使い方を学ぶことをお勧めします。

インストールするには、次を使用します。

イベントpage-faultを探しています。次の方法で(ubuntuまたは他のaptディストリビューションに)インストールできます。

sudo apt-get install linux-tools-common linux-base 
sudo apt-get install linux-tools-YOUR-KERNEL number

uname -r でカーネル番号を取得できます。

例として、次のコマンドは「ls」コマンドで perf ツールを実行します。

perf record -e page-faults:u -F 250 ls

次に、結果を確認できます (「ls」のバイナリにはデバッグ情報がないため、きれいな出力は期待しないでください)。

perf report
于 2013-03-26T21:53:24.013 に答える