/proc/vmstat のパラメータ (pgpgin、pswpin) と (pswpout、pgpgout) の正確な違いは何ですか?

/proc/vmstat のパラメータ (pgpgin、pswpin) と (pswpout、pgpgout) の正確な違いは何ですか?

この質問は にlinuxのみ特有であることに注意してください。 とはswap space、専用の を意味しますswap partition

googleこれについて少し調べてみたところ、次のことがわかりましたdefinitions

Paging refers to writing portions, termed pages, of a process’ memory to disk.
Swapping, strictly speaking, refers to writing the entire process, not just part, to disk.
In Linux, true swapping is exceedingly rare, but the terms paging and swapping
often are used interchangeably.

そして

page-out: The system's free memory is less than a threshold "lotsfree" and unnused / least used pages are moved to the swap area.
page-in: One process which is running requested for a page that is not in the current memory (page-fault), it's pages are being brought back to memory.
swap-out: System is thrashing and has deactivated a process and it's memory pages are moved into the swap area.
swap-in: A deactivated process is back to work and it's pages are being brought into the memory.

さて、ページングとスワッピングの違いについて尋ねる質問とこの質問を重複させたいと思うかもしれません。しかし、私はもう少し詳しく知りたいのです。どの時点でも、これらのカウンターは/proc/vmstat相互に排他的ですか? つまり、パラメーターpswpinには からのカウントが含まれていますかpgpgin、またはその逆ですか? プロセスが の場合、正確には何が起きますかdeactivated? そのすべてのページがswapスペースに移動された場合、複数の と正確にどう違うのですかpageouts? また、pageinページフォールトが発生するたびに が発生する場合、このイベントに関して他の 2 つのパラメーターpgmajfaultとについて何が言えるでしょうか? が発生するたびに、対応するも発生するpgfaultのですか?pagefault (major? minor?)pagein

これらの個々のパラメータをテストするためのサンプル プログラム/ベンチマークがいくつか提案されると役立ちます。

PS: 質問を追加/編集し続けるかもしれません :)

答え1

とても古い質問で、今のところ正しい答えはありません。

まず、メモリは CPU とカーネルによってページと呼ばれる部分に分割されます。ページのサイズは CPU のアーキテクチャによって決まります。多くのアーキテクチャは複数の異なるページ サイズをサポートしていますが、x86_64 アーキテクチャの最も一般的なページ サイズは 4KB です。ここで言及されているこれらのパラメーターは、ディスクに読み書きされたメモリ ページの数と、そのうちのスワップ ページの数を示しています。

それを念頭に置いてページインこれは Linux カーネルの通常のアクティビティであり、ディスク (キャッシュされていない) からバイナリをオペレーティング メモリにロードするたびに、つまりアプリケーションを起動するたびにほぼ発生します。

pgin および pgout 操作は必ずしも心配する必要のあるものではないため、スワップの情報のみを含む追加のカウンター (pswpin カウンターと pswpout カウンター) が作成されました。これらのカウンターは、メモリ ページがスワップに書き込まれるか、スワップから読み取られるときに増加します。

繰り返しますが、これも問題を示すものではなく、特定の状況下でのみ問題を示します。たとえば、これらの数値が短期間で大きく変化する場合 (通常はシステムのメモリが不足している場合) などです。

つまり、簡単に言うと:

  • pgpgin、pgpgout - ディスクから読み込まれ、メモリに書き込まれるページ数。通常、これらの数値をそれほど気にする必要はありません。
  • pswpin、pswpout - これらの数値を時間ごとに追跡すると良いでしょう(prometheusのような監視機能を使用)。スパイクがある場合は、システムでスワップが頻繁に発生しており、問題が発生していることを意味します。

答え2

  1. pgpgin - システムがディスクから 1 秒あたりにページインしたキロバイト数。
  2. pgpgout - システムが 1 秒あたりにディスクにページアウトしたキロバイト数。
  3. pswpin - システムがディスクから 1 秒あたりにスワップインしたキロバイト数。
  4. pswpout - システムが 1 秒あたりにディスクにスワップアウトしたキロバイト数。

関連情報