Linuxカーネルでは、スワップ空間アクセスはどこで処理されますか?

Linuxカーネルでは、スワップ空間アクセスはどこで処理されますか?

私は研究助教であり、この質問は私たちのチームにとって非常に重要です。

私たちは、プロセス(Pythonプログラムなど)がスワップスペースを使用するときに遅延を注入する方法を探しています。たとえば、通常の状況でページを処理するためにスワップ空間からメインメモリにスワップされている場合、これを実行する前に遅延が必要です。 (実際の世界では、スワップ空間やメインメモリにアクセスするときにカーネルで遅延が発生することは意味がないことを知っていますが、これにより私たちにとって重要なことをシミュレートできます。)

私が前にしたこと:

printkカーネルの次のセクションにステートメントを追加しようとしましたが、それらのどれもハンドルswap-inswap-outプロセスの正確な位置ではないようです。

  1. ファイルのmemory.c関数からdo_swap_page()。常に動作するわけではありません。
  2. ファイルのmemcontrol.c関数からmem_cgroup_swapin_charge_page。アプリケーションが新しいスワップ領域を割り当てる場合にのみ機能します。 (実際にスワップを使用する場合より)
  3. swap_state.cファイル、関数swapin_readahead()、関数からswap_vma_readahead()

プロセスがスワップスペースを使用しても効果はありません。

注1:私は最新バージョンのカーネル(6.0.9)を使用しています。しかし、私はLinuxカーネルの異なるバージョンが異なるとは思わない。

注2:コマンドを使用して使用されたスワップ量を測定していますfree -m。また、詳細についてはドキュメントに記載されています/proc/meminfo。したがって、私のプロセスはスワップスペースを使用していると確信していますが、カーネルソースからそれをキャプチャする方法がわかりません。

私は成功せずに数週間答えを探していました。どんな助けでも大変感謝します。ありがとうございます。

関連情報