スワップ関連はロックとプロセス状態が複雑で難しい2018年01月17日 12時16分40秒

FreeBSD で無駄にスワップデバイスが解放されない場合があるので、実験してみた。

swapoff_all() 関数を参考に、スワップ領域が埋まってきたら、全てのプロセスのメモリを調べる。vmpage が実メモリに存在し、一度スワップに書き出されて呼び戻された後に、内容が更新されたとマークされているメモリを探す。

探して見付けたメモリの番地を表示したり、見付けた数を表示するだけは、比較的簡単に出来た。しかし、swp_pager_freeswapspace() 関数を呼び出すと、プロセスのスイッチやロック関連でカーネルパニックを連発する。他にも、何処からか kill シグナルが送られる様になったケースもあった。

スワップ領域が圧迫されている環境は、たいがい大量のページインとページアウトが行われている状態なので、それらの いIO 等と競合してしまうようだ。何度も試してみたが、思ったよりも複雑で、今は諦めるしか無さそうだ。

前回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2018/01/17/8771172/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。