Linuxのswapについて私が知っている二、三の事柄

提供:UnixClassWiki
ナビゲーションに移動 検索に移動

Linuxのswapについて私が知っている二、三の事柄

swapの高速化

fstabでswapのプライオリティが設定できます。この数が多ければ多いほど優先される仕組みになっています。 一方で同じ優先順位であれば均等に使われます。 複数のハードディスク上にswapパーティションを取り、それを同じ優先順位で設定すると、 スワップの際に並列に使われるのでraid0 [1]のような効果をもたらすように出来ています。

下の例は4つのswapパーティションを使いswaponした状態を示しています。


スワップを用意した状態 /proc/swaps
スワップが使用中の状態 /proc/swaps


高速なSSDを複数用意し、その上にswapを設定し、 並列にアクセスできるような設定にすると、 かつてないような巨大かつ高速な仮想記憶が手に入ることになるでしょう。

稼働中にswapを無効にする

実メモリが十分にあり、スワップを利用していたプロセスが既に終了しており、swapが必要なくなった場合、 swapoffをするとswapに使われている記憶装置から実メモリの方にページが移動し、 swapが開放することができます。 再度swaponを行えばswapが設定されます。 このように柔軟にswapを利用する、あるいは止めることが出来ます。


$ free -h -w
              total        used        free      shared     buffers       cache   available
Mem:            15G          9G        1.7G        300M        769M        2.6G        4.5G
Swap:           15G        512K         15G


コマンドfreeを使い、スワップに使われている容量と、メモリ空き領域を確認し、スワップされているサイズがメモリ上に充分のるようであれば、swapoffを行うことでスワップが解消されます。 ただし、スワップ領域上に吐き出されているものは使用頻度が少ないために吐き出されているのであって、このような形でスワップを解消したからといって全体のパフォーマンスが必ず向上するというわけではありません。

swappiness

swappinessはkernel 2.6から入った機能で、スワップの発生する度合いのコントロールを行います。 0から100までの数値で、0が最もスワップの発生が押さえられ、100は最もスワップが発生し易くなります。 デフォルト値は60です [2]

変更するには

 # echo 99 > /proc/sys/vm/swappiness

あるいは

 # sysctl vm.swappiness=99

とします。


swappiness の最適な値は、システムの構成や使われ方、あるいは目的によって適切な値は変わるでしょう。 また管理者がシステムに対してどのような振舞いを期待するかでも変わるでしょう。 スワップされているページは最も優先順位の低いページ、 つまり最も使われていないページだということを理解しなくてはなりません。 スワップをさせないようにして、使われなくなったページが実メモリの中にとどまっている分、 ブロックデバイスのキャッシュバッファに回されるはずだった実メモリが少なくなり I/O 性能が落ちる可能性もあるのです。 そのようなシステム全体のパフォーマンスを十分に考慮した上で swappiness は変更すべきでしょう。

脚注

  1. http://buffalo.jp/products/catalog/storage/raid/raid0.html
  2. デフォルト値はカーネルコードの vmscan.c にハードコーディングされています。

記憶管理