プロセスその8
際限なくWorking Setが肥大化するのを防ぐものが、Working Set Limitである。名前の通り、Working Setの最大値を定めるもので、仮にあるプロセスのPage Falt Rateが閾値以上を示していても、そのページのWorking SetがWorking Set Limitに達していた場合、それ以上Working Setは増やさないということだ。ただ、これについてももう少し複雑な事になっている。図1はこれを簡単にまとめたものだ。
![]() |
図1:PTE(Page Table Entry) |
プロセス生成時は、WSDEFAULTという初期パラメータで指定されるサイズのWorking Setが確保される。このパラメータはプロセス(もっと厳密に言えば、そのプロセスの所属するユーザ)毎に設定されている。その後、Working SetはAWSMINを下限、WSQUOTAを上限とした範囲で変化する。AWSMINはSYSTEM Parameterで、プロセス/ユーザに拠らず一定、一方WSQUOTAの方はユーザ毎に設定される。さて、通常はこの範囲で変化するわけだが、一時的に大量のページを利用する(プログラムの初期化ルーチンなどは、こうした事が置きやすい)際に、一時的にWorking SetをWSQUOTAを越えて利用することができる。このために予約された部分をRoan Regionと呼び、最大でWSEXTENT(ユーザ毎に設定)まで増やすことが可能である。ただしこのRoan Regionは"Roan"とあるように、あくまでも一時的に利用できるに過ぎず、Page Fault Rateがある程度の数字以下になったら、再びWSQUOTAまでWorking Setは減らされてゆくことになる。これとは別にWSMAXというSYSTEM Parameterも用意されており、こちら側が本当にWorking Setの最大値ということになる。ではWSEXTENTとWSMAXの違いは? というと、WSEXTENTの上限がWSMAXと考えれば良い。
一方、Working Setを減らすほうもちゃんと定義されている。先に述べたとおり、通常のWorking SetはAWSMINが最小値ということになる。ただ、システム全体でメモリが足りない場合には、これを割り込んで減らされる事がありえる。このときに、各プロセスのWorking Setは、SWPOUTPGCNTまで減る事はある。で、これに達したプロセスはSWAP OUTの対象とされ、結果としてWorking Setはいきなり0ということになる。
このあたりの仕組みは、完全にVMSからWindows NTに継承されたとはちょっといい難い。VMSの場合、インタラクティブジョブとバッチジョブが混在するという環境を想定しており、インタラクティブジョブは多数のユーザーがそれほど負荷の高くない処理を、バッチジョブは少数ながら負荷の高い処理をそれぞれ行うという想定の元に、ユーザによってWorking Setを細かく調整することを前提とした構成である。だからこそUser Quotaの中にWorking Set Sizeなどのパラメータが用意されていたわけで、インタラクティブジョブは比較的抑え目の数字とすることで多数のユーザーが同時に利用できるようにし、バッチジョブは逆にたっぷりメモリを割り当てることで処理時間を少しでも短くするといった調整が可能だったわけだ。
ところがWindows NTの使い方では、そもそもバッチジョブという考え方が非常に希になってしまっており、インタラクティブで重い処理を実行するのが一般的である。おまけに複数ユーザーで使うというケースが希であり、従ってユーザー単位での管理、という調整が意外に現実にそぐわないのが実情である。しかも、1つのユーザー環境で多数のユーザープロセスが動くという状況を考えると、本来ならプロセス単位でWorking Set関連パラメータを調整できるような仕組みの方が順当なのだろう。
ただ、こうしたパラメータ調整は、必然的にシステム全体の動きを把握して行わないと却ってバランスを崩しやすい。Windows NTがサーバーよりもクライアント向けであることを考えると、むしろこのあたりは自動調整のみとして、外部から調整できる余地を減らしたほうが、むしろ良いと判断したのだと思う。実際ここの"set working set size"の項目を見ると、そうしたMicrosoftの姿勢は明白である。Windows NT系ではこのWorking Setの調整はKeBalanceSetManagerというカーネルコンテクストが実施するという話が7.10.3(上巻P545)に示されているが、ここでも動きの概略が述べられているに過ぎず、外部から調整できるパラメータも2つ(表7-19:上巻P547)のみというあたり、このあたりは遮蔽する方向にあることが判る(続く)。