システムコールとmmapを介して、1つまたはすべてのアプリケーションで実行されているすべてのファイルIOを追跡/書き込みできますか?

システムコールとmmapを介して、1つまたはすべてのアプリケーションで実行されているすべてのファイルIOを追跡/書き込みできますか?

私は、アプリケーションが存続期間中に実行するすべてのIO操作を追跡し、キャッシュ効果が妨げられないようにしたいと思います。シムを使用すると、アプリケーションのソースコードを変更することはできません。パフォーマンスは問題ではありません。何時間もかかっても、アプリケーションが何をしているのかを記録したいと思います。究極の目標は、トレースを使用してプリフェッチなどのファイルシステム関連の経験的な方法を改善することです。理想的には、出力は<filename、offset>に似ていますが、それだけで十分かもしれません。

これまでの私の考えとそれがうまくいかないと思う理由は次のとおりです。

  1. SSDに送信されたIOなど、すべてのブロックレベルのアクセスを追跡します。これを行うには、先読みとページキャッシュを無効にする必要があります。前者は簡単にでき、後者は不可能に見えます。すべての読み取りがページキャッシュをバイパスするという保証はないため、X時間単位ごとにページキャッシュを更新することは不可能です。単に書き込みキャッシュを無効にするだけでは不十分です。

  2. eBPFを使用して、次のすべてのファイルシステム操作を追跡します。この記事はさすが。これには2つの問題があります。ファイルへの最初の要求だけが記録されているようです(ブログで:「私たちが実装したプローブは...最初の要求ブロックの時間を識別します」)。そして、Aコピーと読み値が何であるかについてブログに投稿しました。ここには印刷ソースはありません。]2(編集:表示されないのは、私が読んでいるファイルがNFSドライブにあるためです。申し訳ありません。)BCCスクリプトはシステム上で発生したいくつかのIOを表示しますが、アプリケーションtouchblkのIOは印刷されません。理由や方法がわかりません。

編集:ここにいくつかの異なるアイデアがありますが、まだ実装方法がわかりません。

  1. 常にページを使用できないとマークし、常にディスクからインポートしてください。
  2. TLB中毒。

私は考えをあまりにやっているのだろうか?これを行うか、見つかった問題の1つを解決できるとは思わない解決策はありますか?

ありがとうございます!

関連情報