「Linuxのswapについて私が知っている二、三の事柄」の版間の差分

提供: UnixClassWiki
移動先: 案内検索
(稼働中にswapを無効にする)
(脚注)
 
(同じ利用者による、間の17版が非表示)
1行目: 1行目:
 
== Linuxのswapについて私が知っている二、三の事柄 ==
 
== Linuxのswapについて私が知っている二、三の事柄 ==
 
=== swapの高速化 ===
 
=== swapの高速化 ===
fstabでswapのプライオリティが設定できる。この数が多ければ多いほど優先される。一方で同じ優先順位であれば均等に使われる。
+
fstabでswapのプライオリティが設定できます。この数が多ければ多いほど優先される仕組みになっています。
複数のハードディスク上にswapパーティションを取り、それを同じ優先順位で設定すると、スワップの際に並列に使われるのでraid0のような効果をもたらす。
+
一方で同じ優先順位であれば均等に使われます。
 +
複数のハードディスク上にswapパーティションを取り、それを同じ優先順位で設定すると、
 +
スワップの際に並列に使われるのでraid0 <ref> http://buffalo.jp/products/catalog/storage/raid/raid0.html </ref>のような効果をもたらすように出来ています。
  
下の例は4つのswapパーティションを使いswaponした状態である。
+
下の例は4つのswapパーティションを使いswaponした状態を示しています。
  
  
11行目: 13行目:
  
  
これはSSDを複数用意し、その上にswapを設定し、
+
高速なSSDを複数用意し、その上にswapを設定し、
 
並列にアクセスできるような設定にすると、
 
並列にアクセスできるような設定にすると、
かつてないような巨大かつ高速な仮想記憶が手に入ることを示唆している。
+
かつてないような巨大かつ高速な仮想記憶が手に入ることになるでしょう。
  
 
=== 稼働中にswapを無効にする ===
 
=== 稼働中にswapを無効にする ===
実メモリが十分にあり、特別な処理を既に終了させswapが必要なくなった場合、
+
実メモリが十分にあり、スワップを利用していたプロセスが既に終了しており、swapが必要なくなった場合、
 
swapoffをするとswapに使われている記憶装置から実メモリの方にページが移動し、
 
swapoffをするとswapに使われている記憶装置から実メモリの方にページが移動し、
swapが開放される。
+
swapが開放することができます。
またswaponを行えばswapが設定される。
+
再度swaponを行えばswapが設定されます。
柔軟にswapを利用する、あるいは止めることができる。
+
このように柔軟にswapを利用する、あるいは止めることが出来ます。
 +
 
 +
 
 +
 
 +
<pre class="bash">
 +
$ 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
 +
</pre>
 +
 
 +
 
 +
 
 +
コマンドfreeを使い、スワップに使われている容量と、メモリ空き領域を確認し、スワップされているサイズがメモリ上に充分のるようであれば、swapoffを行うことでスワップが解消されます。
 +
ただし、スワップ領域上に吐き出されているものは使用頻度が少ないために吐き出されているのであって、このような形でスワップを解消したからといって全体のパフォーマンスが必ず向上するというわけではありません。
 +
 
 +
=== swappiness ===
 +
 
 +
swappinessはkernel 2.6から入った機能で、スワップの発生する度合いのコントロールを行います。
 +
0から100までの数値で、0が最もスワップの発生が押さえられ、100は最もスワップが発生し易くなります。
 +
デフォルト値は60です
 +
<ref>
 +
デフォルト値はカーネルコードの [http://uc2.h2np.net/misc/codes/vmscan.c.html#N132 vmscan.c] にハードコーディングされています。
 +
</ref>
 +
 +
 
 +
変更するには
 +
 
 +
<pre class="bash">
 +
# echo 99 > /proc/sys/vm/swappiness
 +
</pre>
 +
 
 +
あるいは
 +
 
 +
<pre class="bash">
 +
# sysctl vm.swappiness=99
 +
</pre>
 +
 
 +
とします。
 +
 
 +
 
 +
swappiness の最適な値は、システムの構成や使われ方、あるいは目的によって適切な値は変わるでしょう。
 +
また管理者がシステムに対してどのような振舞いを期待するかでも変わるでしょう。
 +
スワップされているページは最も優先順位の低いページ、
 +
つまり最も使われていないページだということを理解しなくてはなりません。
 +
スワップをさせないようにして、使われなくなったページが実メモリの中にとどまっている分、
 +
ブロックデバイスのキャッシュバッファに回されるはずだった実メモリが少なくなり
 +
I/O 性能が落ちる可能性もあるのです。
 +
そのようなシステム全体のパフォーマンスを十分に考慮した上で swappiness は変更すべきでしょう。
 +
 
 +
== 脚注 ==
 +
<references/>
 +
 
 +
----
 +
[[記憶管理]]

2020年2月17日 (月) 04:55時点における最新版

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 にハードコーディングされています。

記憶管理