問題タブ [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.
algorithm - 使用頻度の低いページ フォールトの計算
メモリ管理とページ置換アルゴリズムは初めてです。最近使用されていないアルゴリズムに関する質問を見つけて印刷しましたが、残念ながら、私の回答と思考プロセスが正しいかどうかを判断できません。
無料の教科書を読んだり、YouTube で例を見たりして、アルゴリズムの理解を深めようと懸命に努力しています。ただし、概念を理解しているかどうかを説明し、回答を改善し、思考プロセスを修正する方法について提案を提供していただければ幸いです。下の画像を見てください。太字の数字はページ フォールトで、星の付いた数字はページ ヒットです (21 ページ フォールトを計算しました)。
PS 横読みしづらくて申し訳ありませんが、数字を小さくせずに表全体を画像に収める唯一の方法です。
x86 - tlb に保存されているフラグが一致しない場合に発生する障害は何ですか?
私の理解が間違っていなければ、TLBは仮想アドレスから物理アドレスへのマッピングだけでなく、書き込み可能フラグ(W)、実行無効(XD)フラグなどの各ページのフラグも格納します。
私の質問は、ヒープやスタックなどの実行不可能なページを実行しようとすると、どのような障害が生成されるのでしょうか? ページフォルトですか?
bash - 「トップ」の障害列とは何ですか?
Xcode を (バージョン El Capitan に) ダウンロードしようとしていますが、スタックしているようです。「top」を実行すると、「storedownloadd」というプロセスが表示され、「STATE」列がスリープ、スタック、および実行を交互に繰り返します。「FAULTS」の数字は急速に増加し、その後にプラス記号が付きます。「FAULTS」列は現在 400,000 を超えており、増加しています。「トップ」以外には、ダウンロードのアクティビティの兆候は見られません。これは何かがおかしいことを示していますか? スクリーンショットは次のとおりです。
memory-management - プロセスの常駐メモリは増加していますが、メジャー ページ フォールトはありません
malloc() を使用して 50Mb のメモリを割り当て、ループを使用してすべてのページを「タッチ」して常駐させる、以下の小さな C プログラムを作成しました。
実際、プログラムは動作しているように見えます。つまり、最初の 5 秒間のスリープの後、「トップ コマンド」出力の常駐メモリがいっぱいになり始め、最終的にすべての仮想メモリが RAM に割り当てられます。
プログラムのページ フォールトに気付きましたが、小さなものしかありません。
主要なページ フォールトがあってはなりませんか? 私が理解している限り、malloc() を使用すると、50Mb の仮想アドレス空間が作成されます。各仮想ページに書き込む前の実際の常駐サイズは非常に小さいですが、書き込み後は要求された仮想メモリに等しくなります。
ページを「タッチ」すると(ページを居住させるために)、各ページがディスクからDRAMに移動されますよね?それでは、メジャー ページ フォールトが発生しないのはなぜでしょうか。
また、malloc() を 50m 実行し、住居のサイズに気付いたとき、わずか数キロバイトしかありません。残りのページはどこにありますか? それらはディスク上にありますか?
linux-kernel - userfaultfd ecample をコンパイルしたい
ユーザー空間のページ ハンドラを処理したい。
次の URL は、userfaultfd の使用法を示してい
ます https://www.cons.org/cracauer/cracauer-userfaultfd.html
しかし、このプログラムをコンパイルできません。
エラーは次のとおりです。
このプログラムをコンパイルできないのはなぜですか?
私の環境:
Ubuntu 16.04 64bit
gcc バージョン 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
c - 私のプロセスが*実際に*取っているマイナーフォールトの数は?
私は次の単純なプログラムを持っています。これは基本的にmmap
ファイルを保存し、その中のすべてのバイトを合計します:
私はこのようにします:
ファイル名と、が渡されるかどうかを制御するpopulate
or nopopulate
1を渡します。終了する前にエンターを入力するのを待ちます(何かをチェックアウトする時間を与えます)。MAP_POPULATE
mmap
/proc/<pid>
ランダム データの 1 GB のテスト ファイルを使用しますが、実際には何でも使用できます。
MAP_POPULATE
を使用すると、ページ キャッシュ内のファイルでメジャー フォールトがゼロになり、ページ フォールトが少数になることが予想されます。perf stat
私は期待される結果を得る:
45 のエラーは、ランタイムとプロセスのオーバーヘッドから発生します (マッピングされたファイルのサイズには依存しません)。
ただし、/usr/bin/time
最大 15,300 の軽微な障害が報告されます。
同じ ~15,300 の軽微な障害が、top
および を調べることによって報告され/proc/<pid>/stat
ます。
を使用しない場合MAP_POPULATE
、 を含むすべての方法で、perf stat
最大 15,300 のページ フォールトが発生することに同意します。1,000,000,000 / 4096 / 16 = ~15,250
つまり、1GB が 4K ページに分割され、カーネル機能 (「フォールトアラウンド」) によってさらに 16 分の 1 に削減されます。障害発生時のページ キャッシュ。
ここにいるのは誰?の文書化された動作に基づいて、MAP_POPULATE
によって返される図perf stat
は正しいものです。1 回のmmap
呼び出しで、マッピング全体のページ テーブルが既に取り込まれているため、これに触れたときに軽微な障害が発生することはありません。
1実際には、以外の populate
文字列はとして機能しnopopulate
ます。
opencl - OpenCL は自動ページ移行をサポートしていますか?
CUDA の最近のイテレーションでは、ドライバーによって自動的に処理される転送 (障害) を使用して、ホストとデバイスの両方でアクセス可能な「メモリを割り当てる」ことができます。
現在、OpenCL はそのような機能を許可していますか? もしそうなら、実際にそれをサポートする実装はありますか?