問題タブ [page-fault]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1079 参照

memory-mapped-files - メモリ マップ ファイルと「ソフト」ページ フォールト。やむを得ない?

Windows XP で実行されている 2 つのアプリケーション (プロセス) があり、メモリ マップ ファイルを介してデータを共有しています。反復ごとのメモリ割り当てをなくすためのあらゆる努力にもかかわらず、データ転送ごとに約 10 のソフト ページ フォールトが発生します。CreateFileMapping() と CreateFileView() にあるすべてのフラグを試しましたが、それでも発生します。それがメモリマップファイルの仕組みなのかどうか疑問に思い始めています。

メモリ マップド ファイルの背後にある O/S 実装の詳細を知っている人がいる場合は、次の理論に関するコメントをいただければ幸いです。無効として書き込まれます。他のプロセスが無効化されたページに属するメモリ領域を読み取ろうとすると、(設計により) ソフト ページ フォールトが発生し、O/S は無効化されたページをリロードすることを認識します。また、ソフト ページ フォールトの数は、データ書き込みのサイズに正比例します。

私の実験は、上記の理論を裏付けているようです。データを共有するときは、1 つの連続したデータ ブロックを書き込みます。つまり、共有メモリ領域全体が毎回上書きされます。ブロックを大きくすると、それに応じてソフト ページ フォールトの数が増えます。したがって、私の理論が正しい場合、メモリ マップト ファイルを使用しない以外に、ソフト ページ フォールトをなくすためにできることはありません。皮肉なことに、TCP ソケット接続の代わりにメモリ マップド ファイルを使用することを選択したのは、その方が効率的であると考えたからです。

ソフト ページ フォールトが無害である場合は、注意してください。数が多すぎると、ある時点でシステムのパフォーマンスが損なわれる可能性があると聞いています。ソフトページフォールトが本質的にそれほど有害ではない場合、1秒あたりの数が「過剰」であるというガイドラインがある場合は、それを聞きたいです。

ありがとう。

0 投票する
3 に答える
450 参照

virtual-memory - ページがディスクからフォールトインされたときに起動する(OS X)dtraceプローブはどれですか?

ページの障害に関するドキュメントを作成していて、具体的な数値を使用できるようにしようとしているので、12 * 1024*1024バイトのデータを読み取る簡単なプログラムを作成しました。簡単:

そうです、それはファイル全体を調べて読み取ります。問題は、このプロセス中に1536回起動するdtraceプローブが必要なことです(12M / 8k)。すべてのfbt:mach_kernel:vm_fault *:プローブとすべてのvminfo :::プローブを数えても、500に到達しないため、適切なプローブが見つからないことがわかります。

ページがディスクからフォールトインされたときに起動するdtraceプローブをどこで見つけることができるか知っている人はいますか?

アップデート:

stdio関数でインテリジェントなプリフェッチが行われていることが問題であるという偶然の機会に、私は次のことを試みました。

このバージョンの実行にははるかに長い時間がかかります(リアルタイムで42秒、そのうちの10秒はユーザーで、残りはシステム時間でした-ページフォールトだと思います)が、それでも予想される5分の1のフォールトが生成されます。

不思議なことに、時間の増加はループのオーバーヘッドとキャスト(charからint)によるものではありません。これらのアクションだけを実行するコードバージョンは.07秒かかります。

0 投票する
1 に答える
2558 参照

arrays - 2つのアレイ内のページフォールトカウント?

宿題:

2次元配列Aについて考えてみます。

ここで、A [0] [0]は、サイズ500のページを持つページメモリシステムの500の位置にあります(少し非現実的です。512ではありません)。マトリックスを操作する小さなプロセスは、ページ0(位置0から499)にあります。したがって、すべての命令フェッチは、現在ページ0に格納されている命令から行われます。

ページ0を含むページフレームが5つしかない場合、LRU置換を使用し、ページフレーム0にプロセスが含まれ、他の4つは最初は空であると仮定して、次の配列初期化ループによって生成されるページフォールトはいくつですか。

A)for(int j = 0; j <200; j ++)for(int i = 0; i <200; i ++)A [i] [j] = 0;

B)for(int i = 0; i <200; i ++)for(int j = 0; j <200; j ++)A [i] [j] = 0;

質問:

どこでこれを理解し始めますか?私は自分のテキストを調べましたが、それの多くが有用であるとは思いませんでした。私はいくつかの数字を投げつけました、そして私は見つけました:

40,000=配列アイテムの総数

80(40k / 500)=総ページ数

A)20,000(80 * 250)は、他のすべてのループがページフォールトを引き起こすためですか?

B)80(各ページに1つ、40,000 / 500 = 80)?

私は正しい方向に進んでいますか?何かアドバイス?ヒント?

0 投票する
2 に答える
309 参照

linux - ページフォールト例外が発生した場合、OSはメモリにロードされていないディスク上のコンテンツをどのように見つけますか?

CPUがアクセスしようとしているコンテンツがメモリにロードされていないためにページフォールト例外が発生した場合、OSはセカンダリストレージ(ハードディスクなど)で欠落しているコンテンツをどのように見つけますか?

よろしくお願いします。

-ivan

0 投票する
3 に答える
3833 参照

delphi - 4,000万ページフォールト。これを修正する方法は?

個々のオブジェクトのディスクから170個のファイル(たとえば、テキストファイル)をロードし、常にメモリに保持するアプリケーションがあります。これらのファイルをディスクからロードすると、メモリが1回割り当てられます。したがって、メモリの断片化はありません。また、FastMMを使用して、アプリケーションがメモリリークを起こさないようにします。

アプリケーションは、これらすべてのファイルを相互に比較して、類似点を見つけます。単純化しすぎると、テキスト文字列を比較すると言えますが、文字列間の違いを許容する必要があるため、アルゴリズムははるかに複雑です。各ファイルは約300KBです。メモリ(それを保持するオブジェクト)にロードすると、約0.4MBのRAMが必要になります。したがって、実行中のアプリは約60MBまたはRAM(ワーキングセット)を必要とします。データを約15分間処理します。問題は、4000万を超えるページフォールトを生成することです。

なんで?約2GBの空きRAMがあります。私が知っていることから、ページフォールトは遅いです。彼らは私のプログラムをどれだけ遅くしていますか?これらのページフォールトを減らすためにプログラムを最適化するにはどうすればよいですか?データの局所性と関係があると思います。誰かがこれ(Delphi)のいくつかのサンプルアルゴリズムを知っていますか?

更新:
しかし、ページフォールトの数を見ると(タスクマネージャーの他のアプリケーションは私の近くにありません)、メモリレイアウトを最適化する(ページフォールトを減らす)ことができれば、アプリケーションの速度を上げることができると思います)。


Delphi 7、Win 7 32ビット、RAM 4GB(3GB表示、2GB空き)。

0 投票する
1 に答える
1743 参照

c++ - メジャーページフォールトの原因の特定

C ++で記述され、Linuxで実行されている内部アプリケーションを調べるように依頼されましたが、いくつかの問題があります。定期的に大量の主要なページフォールト(〜200k)が発生し、壁掛け時計の実行時間が10倍以上増加しますが、一部の実行では発生しません。

コードのさまざまな部分を分離しようとしましたが、テスト時にページフォールトエラーを繰り返すのに苦労しています。

主要なページフォールトについて、アプリケーション/ Linuxからさらに情報を取得するための提案はありますか?私が持っているのは本当に合計です。

0 投票する
1 に答える
345 参照

performance - プロセスページフォールトの数がパフォーマンスに影響を与える時期を知る方法は?

プロセスが生成するページフォールトの数に対するWindowsパフォーマンスカウンターがあります。パフォーマンスに影響を与える経験則のしきい値はありますか?

0 投票する
5 に答える
34546 参照

operating-system - ベラディの異常が理解できない

Belady's Anomaly は、FIFO ページ置換ポリシーを使用すると、ページ スペースを追加するとページ フォールトが増えると述べています。

私の直感では、ページ スペースを追加するのと同じ数のページ フォールトを減らすか、多くても同じ数にする必要があります。

FIFO キューをパイプと考えると、ページ スペースを追加することは、パイプを大きくすることに似ています。

では、なぜページ フォールトが増えるのでしょうか。私の直感では、パイプが長いと、ページ フォールトが発生し始めるまでに少し時間がかかります (したがって、無限のパイプを使用すると、ページ フォールトは発生しません)。多くの場合、より小さなパイプと同様です。

私の推論のどこが間違っていますか?

0 投票する
1 に答える
2249 参照

c - ページ仮想メモリを理解するための最初のステップ: 最初のページ フォールト時のページ テーブル エントリの作成

仮想メモリのページングを理解しようとしています。プロセスの最初のステップを表す次のコード スニペットがあります。ここでsearch_tblは、提供された論理アドレスを物理メモリ内の場所にマップするエントリがページ テーブルに既にあるかどうかを確認するために、各論理アドレスのメイン プログラムから呼び出されます。vfn仮想フレーム番号です。

編集済み: この実装は意味がありますか? それとも間違った道を進んでいますか?

どんな助け/提案も大歓迎です。ありがとうございました。

0 投票する
2 に答える
1606 参照

java - Java JVM はオペレーティング システムに対してメモリ割り当てを維持する

Windows 7 64ビットで1.6.0_25 64ビットを実行しています。

私のアプリケーションは非常にメモリを集中的に使用するため、JVM を最大メモリで実行しようとしています...しかし悲しいことに...メモリ割り当てが構築されず、Windows から多くのページ フォールトが発生して、次のセットを保持し続けます。仮想メモリ内。

Java -Xms2G -Xmx3G Test を実行しています

次のコードは、ファイル全体を読み込もうとする試みです...読み込み中にページフォールトが発生しないようにします。

この方法を実行すると、Windowsタスクマネージャーで、ファイルの読み取り中にシステムが2G相当のメモリに達することがわかります...しかし、読み取りが完了すると...メモリは再び低下します!!!!

これは大きな問題です...アクティブなメモリにとどまるには、バイト配列全体が必要です。

ありがとう、エイ


int と float を含むオブジェクトの ArrayList を保持する代わりに、基本的な配列型 int[][] と float[][] を使用してデータを保持するようにコードを変更しました。

これを行うと、Javaメモリがスワップされないことがわかりました(したがって、ヒープメモリはここのスタックとは少し異なる方法で扱われると思います)[ああ、すべてのコードを静的型付けに変更しました-知っています、非常に悪いですプログラミングスタイル】

私が今直面している問題は、HashMap を処理する方法です...ルックアップ テーブルを構築しようとするすべての試みは、O(n^2) 実行時間で構築に失敗しています!!!