3

Windows C ++プログラムで、発生したハードページフォールトの数を読み取れるようにしたいと思います。プログラムは管理者として実行されていません。 追加のために編集:明確にするために、私はシステム全体の総ページフォールトカウントにはそれほど興味がありません。

ETWがこのためのカウンターをエクスポートする可能性があるように見えますが、APIを理解するのに非常に苦労しており、管理者と比較して通常のユーザーがアクセスできるものが明確ではありません。

この機能の例を誰かが持っていますか?それとも、Windowsでは不可能ですか?

(OTですが、これが* nixでどれほど簡単になるかは悲しいことではありませんか?gerusage()で完了です。)

4

6 に答える 6

4

afaiは、これを行う唯一の方法は、ETW(Windowsのイベントトレース)を使用してカーネルのハードページフォールトを監視することです。イベントペイロードにはスレッドIDがあり、これを既存のプロセスと関連付けて(これは重要です)、実行中のプロセスごとのカウントを生成できる可能性があります。プロセスごとに履歴情報を取得する方法がわかりません。

Process Explorerは、プロセスごとの表示でページフォールト(ソフトまたはハード)のみをサポートしているため、これが難しい問題であることを保証できます。

http://msdn.microsoft.com/en-us/magazine/ee412263.aspx

ページフォールトは、検索されたページテーブルエントリが無効な場合に発生します。要求されたページをディスクから取り込む必要がある場合、それはハードページフォールト(非常に高価な操作)と呼ばれ、他のすべてのタイプはソフトページフォールト(より安価な操作)と見なされます。ページフォールトイベントペイロードには、ページフォールトが発生した仮想メモリアドレスと、それを引き起こした命令ポインタが含まれています。ハードページフォールトでは、ディスクアクセスが発生する必要があります。これは、ファイル内のコンテンツへの最初のアクセス、またはページアウトされたメモリブロックへのアクセスである可能性があります。ページフォールトイベントを有効にすると、ハードページフォールトがタイプハードページフォールトのページフォールトとしてログに記録されます。ただし、ハードフォールトは通常、パフォーマンスにかなり大きな影響を及ぼします。そのため、個別に有効にできるハードフォールトに対してのみ別のイベントを使用できます。ハードフォールトイベントペイロードには、ページフォールトイベントと比較して、ファイルキー、オフセット、スレッドIDなどのデータが多く含まれています。

于 2011-06-20T19:20:53.757 に答える
2

GetProcessMemoryInfo()を使用できると思います-詳細については、http://msdn.microsoft.com/en-us/library/ms683219(v = vs.85).aspxを参照してください

于 2011-06-20T19:03:11.387 に答える
1

はい、かなり悲しいです。または、Windowsがページフォールトカウンターを提供せず、それを検索するほどの弱点であると想定することはできませんでした:Win32_PerfFormattedData_PerfOS_Memory

于 2011-06-20T19:03:17.190 に答える
1

これは、Windowsのパフォーマンスカウンターを使用して行われます。私が彼らと何かをしたのは久しぶりです。それらを照会するために管理者として実行する必要があるかどうかは覚えていません。

[編集]提供するサンプルコードはありませんが、このページによると、特定のプロセスに関する次の情報を取得できます。

プロセス:ページフォールト/秒。これは、この特定のプロセスからの要求が原因で発生したページフォールトの数を示しています。特定のプロセスからの過度のページフォールトは、通常、不適切なコーディング慣行を示しています。関数とDLLが正しく編成されていないか、アプリケーションが使用しているデータセットが効率的ではない方法で呼び出されています。

于 2011-06-20T19:03:29.590 に答える
1

Microsoftのサイトには、パフォーマンスカウンターの読み取り方法を説明するC / C ++サンプルがあります。情報:パフォーマンスカウンターとインスタンスを列挙するためのPDHサンプルコード

あなたはそれをコピー/貼り付けすることができます、そして私はあなたがこの興味深い記事で述べられているように「メモリ」/「ページ読み取り/秒」カウンターに興味があると思います:ページフォールトの基本

于 2011-06-20T20:11:37.317 に答える
0

パフォーマンスカウンターを列挙するために管理者の資格は必要ないと思います。codeproject PerformanceCountersEnumeratorのサンプル

于 2011-06-21T07:23:18.347 に答える