問題タブ [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.
lru - LRU アルゴリズムのページ フォールト
プログラミングの講義で何かを理解するのに苦労しています。ページ置換アルゴリズムにはページ フォールトがあることを知っています。
LRU アルゴリズムで、ページ フォールトが発生するのはいつですか? 空き枠がなくなったときですか?フレームが既に存在するが、既に使用されている場合ですか?
私は講義のプレゼンテーションにこの写真を持っています (オリジナルは別の言語であるため、重要な部分だけを切り取っています):
この図の質問は、「フレームが 4 つしかない場合、LRU アルゴリズムを使用するとページ フォールトが発生するのはいつですか?」というものです。ご覧のとおり、最初の 3 行に x があります。空きフレームが残っているときにページ フォールトが発生するかどうかを尋ねているのはそのためです。それとも、フレームを「キックアウト」する必要があるときに、赤い X でのみページ フォールトが発生しますか?
linux - /usr/bin/time、htop などの mmap と出力のベンチマーク
仮想メモリ、特に物理メモリよりもはるかに大きなファイルへのメモリ マッピング ファイルを多用するプログラムがあります。
プログラムのパフォーマンスは必ずしも素晴らしいものではありません。セットアップを考えると、主要なページ フォールトが原因である可能性があります。
だから私はこれがどれほど悪いかを知りたいと思い、メジャーページフォールトの影響を見積もるプログラムを書きました。基本的に、数GBのサイズのファイルをmmapし、バイトの読み取りにかかる時間を測定しながら、ランダムなバイト数を読み取ります。
ファイルがキャッシュにない可能性が高いかどうか (echo 3 > /proc/sys/vm/drop_caches) と、キャッシュにある場合に応じて、全体の実行時間だけでなく、累積またはヒストグラム分析されたアクセス時間にも大きな違いがあることがわかります。テスト プログラムの 2 回目の実行で既にキャッシュに入っています。
さらに、出力を見てみますが/usr/bin/time -v
、これらの数字は紛らわしいです (簡潔にするために一部の行が切り取られています)。
次の質問に誰でも答えられますか?
- ページには 4k があり、7672 のメジャー ページ フォールトがあります。これらはわずか 30MB です。(そうでなければ非常に高速な) smb ファイル システム上であっても、それらをページインするのに 2 分以上かかることはありません。
- 「ファイル システム入力」とは何を意味しますか? プログラムは、ファイル システムへの入力を行いません。この 2.8 GB ファイルをマップしましたが、read() は実行しません。これは読み取り数ですか、それとも kB ですか? 主要なページ フォールトと何らかの関係がありますか?
- 100k に近いマイナー ページ フォールトは、プログラムが実行する 100k のプローブ (1 バイト読み取り) とうまく一致しています。このマシンでは、実際には drop_caches を実行できません。別のファイルでプログラムを実行して、データをプッシュする必要があります。私は働いていないかもしれません。これは、ほとんどの場合、マイナーなページ フォールトがあることを説明している可能性があります。しかし、なぜこれに時間がかかるのでしょうか。100k プローブによる 2:17 分という率直な見積もりでは、1.37 ミリ秒になります。これは、マイナー ページ フォールトの「通常の」大きさですか?
編集:もう1つ試してみました。テスト プログラムを再度実行し、すべてのシステム コールを strace で記録しました。プローブ中に表示されるのは、clock_gettime、gettimeofday、futex だけです。read(2) がまったくないので、/usr/bin/time によって提供される「ファイル システム入力」、メジャーおよびマイナー フォールト番号が互いにどのように関連しているかについてさらに疑問に思います。
list - FIFO ページ置換アルゴリズム - ページ フォールトのカウント
私は現在、ページ置換アルゴリズムについて読んでおり、FIFO (先入れ先出し) メソッドに関するいくつかの例を見てきました。
私の質問は次のとおりです。私はさまざまな方法を見てきましたが、ページ フォールトの数をどのように数えますか。
例: 例 1 (9 ページ)と例 2はまったく同じ順序です。1 つ目はページ フォールトの数を 12 とカウントしますが、2 つ目はその数が 15 であることを示しています。これらは同じ数のフレーム 3 を使用しています。
シーケンスは次のとおりです。
したがって、私の質問は次のとおりです。どの方法が正しい方法ですか?最初の 3 つのインスタンスをページ フォールトとしてカウントしますか?
その場合、次のシーケンスが与えられます。
どんな助けでも大歓迎です。君たちありがとう!
linux - ユーザー アプリケーションでページ フォールトが発生した場合、カーネルがこのフォールトを処理するときの現在の pid は何ですか?
次のように単純にユーザーアプリを実行します。
malloc はこのデータに触れるまで実際の物理スペースを割り当てないため、ページフォールトが確実にトリガーされると思います。
そして、Linuxカーネル(3.17.6) mm/memory.c : handle_pte_fault() を次のように変更しました
ここで、「tartgetPid」はカーネルに渡したユーザー アプリ pid、「current」はカーネルのマクロです。
ただし、カーネルがページ フォールトを処理する場合、現在の pid はページ フォールトをトリガーするユーザー アプリの pid ではないため、この行はトリガーされませんでした。
ユーザー アプリケーションでページ フォールトが発生した場合、カーネルがこのフォールトを処理するときの現在の pid は何ですか?
operating-system - ページ フォールトが発生した場合、OS は必要なディスク アドレスをどこから取得しますか?
ページ テーブル エントリ (PTE) が有効としてマークされていない場合は、必要なデータがメモリ内ではなくディスク上にあることを意味します。そのため、ページ フォールトが発生し、OS がこのページのデータをディスクからメモリにロードする必要があります。
私の質問は、OS が正確なディスク アドレスをどのように認識しているのかということです。
c# - 故意にページ フォールトを発生させるには?
マルチスレッドを使用して Web ページをクロールする Windows サービスを使用していますが、TCP ウィンドウがいっぱいになると接続がリセットされることがあります。接続がリセットされた頃に発生しているページ フォールトと関係があると思われます。スレッドのページ フォールトによる遅延により、ネットワーク接続が閉じられると思います。私の理論を証明できるように、Web ページがクロールされているときに何らかの形でページ フォールトを引き起こすことは可能ですか?