0

私が理解していることから、Linuxはすべての親プロセスメモリを子プロセスの別のページにコピーするのではなく、コピーオンライトを実行します。いずれかのプロセスがマップされた(共有)ページのメモリ位置を変更(書き込み)するまで、子と親の仮想アドレス空間が同じ物理メモリ位置(同​​じ物理ページ)にマップされます。

プロセスによって共有されている物理メモリページ番号を表示するツールが利用可能かどうか知りたいのですが。または、仮想アドレス->物理アドレスマッピングを提供するツール。実際に物理アドレスを調べて、プロセスが同じ物理メモリにマップされているかどうかを確認できるようにします。

ありがとう。

4

1 に答える 1

0

専用のツールが利用できるかどうかはわかりませんが、必要なすべての情報は/procファイルシステムを介してすでにエクスポートされているはずです。

あなたの質問で与えられた特別なユースケースは、関連するドキュメントで明示的に言及されています。(linux-src-directory/Documentation/vm/pagemap.txtまたはオンラインhttps://www.kernel.org/doc/Documentation/vm/pagemap.txt):

ページマップを使用してプロセスのメモリ使用量を確認する一般的な手順は、次のようになります。

  1. / proc / pid / mapsを読み取って、メモリ空間のどの部分が何にマップされているかを確認します。
  2. 興味のあるマップを選択します-それらすべて、または特定のライブラリ、スタックまたはヒープなど。
  3. / proc / pid / pagemapを開き、調べたいページを探します。
  4. ページマップから各ページのu64を読み取ります。
  5. / proc/kpagecountおよび/または/proc/kpageflagsを開きます。読み取ったPFNごとに、ファイル内のそのエントリを探し、必要なデータを読み取ります。

たとえば、プロセスが使用しているメモリの量であり、他のプロセスと共有されていない「一意のセットサイズ」(USS)を見つけるには、プロセス内のすべてのマップを調べ、PFNを見つけて、調べます。それらはkpagecountで増加し、一度だけ参照されるページの数を集計します。

于 2013-03-10T22:19:43.760 に答える