これ質問キャッシュの一部を見つける方法に関する質問に答えてください。ただし、fincore
実行可能ファイルではファイル名を渡して、そのファイルがキャッシュの一部であることを確認する必要があります。
ファイル名を渡さずにキャッシュメモリに属するすべてのエントリを見つけるためのツールや方法はありますか?
PS:私たちはこれを組み込みシステムで実行しています。 forループを実行し、すべてのファイルをfincore
独自に渡すことは、より多くの時間とメモリを消費するプロセスです。だから別の方法を探しています。
ベストアンサー1
カーネルがキャッシュされたブロックに関連するファイル名をどこで公開しているのかわかりません。この回答によると
https://stackoverflow.com/a/4941371
カスタムカーネルモジュールを使用しても最善の方法は、inodeとデバイスのリストを取得することです。これにより、ファイルシステムでこれらのファイルを見つける必要があります。
それでは、「fincore
私がどのファイルをリストしたのか、どうやって知ることができますか?」このfincore
ツールは、次の操作で動作します。
- 呼ぶマッピング(2)与えられたファイルに(https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#260)
- 呼ぶ最小コア(2)mmapが返したメモリ領域(https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#279)
システムmincore
コールは、指定されたメモリページがコアメモリにあるかどうかを示します(つまり、アクセス中にページエラーを引き起こさない)。マッピングファイルが遅延ロードされ、mmap
まだマップされている領域を読み取っていないため、すべてのページ習慣ページエラーの原因はキャッシュの一部である必要があります。