利用可能なメモリがPages_high透かしよりはるかに高い場合、kswapdを有効にできますか?

利用可能なメモリがPages_high透かしよりはるかに高い場合、kswapdを有効にできますか?

RHEL 6のページフレームリサイクルアルゴリズムの内部動作を理解しようとしています。

より具体的には、使用可能なメモリがページ_ロー(またはページ_ハイ)を下回らないときにvmstatがsi / soにゼロ以外の値が表示される理由とは異なる置換の兆候が表示されるかどうかを知りたいです。

vmstatから:

  procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu-----
 r     b swpd        free          buff       cache        si   so   bi      bo      in          cs        us sy id wa st
 13 4 2476036 1533508 486264 10396996 18 22 9674 2790 59364 114558 7 8 81 4 0

つまり、システムで使用できるメモリは1,533,508KBです。

/proc/zoneinfoから

Node 0, zone Normal
 min 130364
 low 162955
 high 195546 

ゼロ以外のスワップインおよびスワップアウトアクティビティ(si> 0、​​したがって> 0)が表示されますが、使用可能なメモリ(約375,000ページに相当)は低および高メモリのしきい値よりはるかに高いという事実は文書と一致しているようです。文献に交流活動がどのように記述されているか。

たとえば、Mel Gormanの「Linux仮想メモリの理解」は次のとおりです。

「過去にはkswapdが10秒ごとに目覚めましたが、現在はその領域の利用可能なページ数がpage_lowに達した場合にのみ物理ページアロケータによって起動されます。」

その後、本は私たちが見ているものの1つの可能な説明を提供します。

「極端なメモリ不足の状況では、プロセスはBalance_classzone()を呼び出してkswapdの操作を同期的に完了し、それは次にtry_to_free_pages_zone()を呼び出します。」

言い換えれば、メモリ割り当て要求が失敗したり、遅くなったりすると、プロセスはそれ自体で領域バランスを開始することができる。しかし、try_to_free_pages_zoneがさまざまなキャッシュを縮小することに焦点を当てているように見えるため、これがスワッピングを説明できるかどうかは不明です。

また、交換表示を見ると上部に kswapd が頻繁に表示されますが、これは直接リサイクル理論とも矛盾するようです。

ここで何か抜けましたか?

修正する特に、交換中にExaWatcher psの出力を確認した結果、kswapd0プロセスがこの間に「R」状態にあることがわかります。つまり、直接リサイクルする場合は除外されます。

ありがとう、ニコラ

ベストアンサー1

利用可能なメモリが領域透かしよりはるかに高い場合、ページがメインメモリからスワップアウトする可能性がある状況が1つ以上見つかりました。このシナリオは、仮想マシンを最適化するためのアルゴリズムの1つであるゾーン圧縮に関連しています。

このプロセスの基本的なアイデアは、ページを移動して大規模な連続仮想アドレスブロックを作成することです。 「移動」とは、ページを物理的に移動するのではなく、ページのPTEを更新することを意味する。

圧縮アルゴリズムは、互いに近い領域の反対側の端で2つのスキャナを実行する。あるスキャナーは移動するページを検索し、もう一方のスキャナーは移動可能な無料ページを検索し、最終的には中間点で会う必要があります。

問題は、ゾーン圧縮中に移動することはできませんが、リサイクル可能なページが見つかる可能性があることです。これが発生すると、アルゴリズムは交換を介してそれらをリサイクルしようとする可能性があります。

ここで重要なのは、領域圧縮が透かしによって実行されないことです。代わりに、これは高次割り当てが失敗するたびに、つまりメモリが断片化され、まだ利用可能なメモリが多い場合に発生します。

おすすめ記事