15

Linux 2.6.30 以降で、ユーザー空間から (非共有) mmap のページの汚れにアクセスできますか? プラットフォーム固有のハックとクラッジは大歓迎です。

理想的には、mmap された領域のページごとに 1 つ (4kB?) のビット配列を探しています。これは、領域が mmap されてからそのページに書き込まれた場合に設定されます。

(書き込みを行うプロセスがこの情報を追跡できることは承知していますが、とにかくカーネルがそれを行っている場合、そうするのはばかげているようです。)

ありがとう、

クリス。

4

5 に答える 5

12

/proc/*/ pagemapおよび/proc/kpageflags インターフェイスを参照してください。1 つ目はアドレスの PFN を示し、2 つ目は指定された PFN のダーティ ビットを示します。

fs/proc/task_mmu.c 、Documentation/vm/pagemap.txt、Documentation/vm/page-types.c を参照してください。

于 2010-06-22T06:46:25.887 に答える
5

従来の解決策は、mprotect を読み取り専用にしてから、sigsegv を処理し、再保護して書き込みを許可する前にダーティとマークすることです。これは、まさにこの目的のためにずっと前に ObjectStore で行いました。

于 2010-06-18T20:02:06.723 に答える
2

generic_writepagesbalance_dirty_pages_ratelimited_nrは、ダーティページに関連するカーネル(2.6.20)へのエントリポイントのようです。2.6.30以降でも機能することを願っています。興味深い質問ですが、ページのそのような制御を必要とするあなたが書いているものを尋ねることができますか?

于 2010-06-17T10:18:08.780 に答える
1

このデータは常に古くなっています。ページがダーティであることをプロセスが認識した後で、ページが書き戻される可能性があります。

そうは言っても、調子の良い方法は、それを 1 ページのチャンクにマップして/proc/pid/smapsから、チャンクがダーティかどうかを確認することです。つまり、カーネルがページをマージすると、これは失敗する可能性があります。

残念ながら、ページ テーブルはユーザー空間プロセスからは見えないため、何らかのカーネル パッチを適用しない限り、これが最善の方法です。

于 2010-06-21T17:40:45.367 に答える
0

ビットの配列が十分に小さい場合は、Intel でデバッグ レジスタを使用できる可能性があります (ただし、Linux でどのように行われるかはわかりません)。

于 2010-06-19T16:15:40.070 に答える