「スワップ」の版間の差分
9行目: | 9行目: | ||
{{Related3|Swap on video ram|ビデオ ram にスワップ}} |
{{Related3|Swap on video ram|ビデオ ram にスワップ}} |
||
{{Related|fstab}} |
{{Related|fstab}} |
||
+ | {{Related|サスペンドとハイバネート}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
このページでは GNU/Linux でのスワップとページングを紹介します。また、スワップパーティションとスワップファイルの作成と有効化について説明しています。 |
このページでは GNU/Linux でのスワップとページングを紹介します。また、スワップパーティションとスワップファイルの作成と有効化について説明しています。 |
||
23行目: | 24行目: | ||
もしくは: |
もしくは: |
||
− | $ free - |
+ | $ free -h |
{{Note|スワップファイルとパーティションにパフォーマンスの違いはありません、どちらも同じように扱われます。}} |
{{Note|スワップファイルとパーティションにパフォーマンスの違いはありません、どちらも同じように扱われます。}} |
||
51行目: | 52行目: | ||
パーティションを作るかわりに、オンザフライでサイズを変えたり簡単に削除できるものとしてスワップファイルが選択肢になりえます。特にディスク容量が貴重な場合 (例: 小容量の SSD) はこちらが理想的でしょう。 |
パーティションを作るかわりに、オンザフライでサイズを変えたり簡単に削除できるものとしてスワップファイルが選択肢になりえます。特にディスク容量が貴重な場合 (例: 小容量の SSD) はこちらが理想的でしょう。 |
||
− | {{Note|今のところ |
+ | {{Note|今のところ [[Btrfs]] ファイルシステムはスワップファイルをサポートしていません。このことに気をつけておかないとファイルシステムの破壊をもたらす可能性があります。ただし loop デバイスを使ってマウントしている場合 btrfs でもスワップファイルを使うことが可能です。この方法は多少スワップのパフォーマンスが落ちます。}} |
=== スワップファイルの作成 === |
=== スワップファイルの作成 === |
||
58行目: | 59行目: | ||
# fallocate -l 512M /swapfile |
# fallocate -l 512M /swapfile |
||
− | + | または: |
|
# dd if=/dev/zero of=/swapfile bs=1M count=512 |
# dd if=/dev/zero of=/swapfile bs=1M count=512 |
||
73行目: | 74行目: | ||
# swapon /swapfile |
# swapon /swapfile |
||
− | + | [[Fstab#ファイル例|fstab]] を編集してスワップファイルのエントリを加えて下さい: |
|
− | + | {{hc|/etc/fstab|/swapfile none swap defaults 0 0}} |
|
=== スワップファイルの削除 === |
=== スワップファイルの削除 === |
||
124行目: | 125行目: | ||
このガイドは SD カードなどの他のメモリでも使うことができます。 |
このガイドは SD カードなどの他のメモリでも使うことができます。 |
||
+ | |||
+ | == スワップの暗号化 == |
||
+ | |||
+ | [[dm-crypt/スワップの暗号化]]を見て下さい。 |
||
== パフォーマンスチューニング == |
== パフォーマンスチューニング == |
||
131行目: | 136行目: | ||
=== Swappiness === |
=== Swappiness === |
||
− | ''swappiness'' [[ |
+ | ''swappiness'' [[sysctl]] パラメータはカーネルのスワップ領域の優先(もしくは回避)を表しています。Swappiness は 0 から 100 の間の値にすることができます。デフォルトの値は60です。このパラメータを低い値に設定すると RAM からのスワッピングが減り、多くのシステムでレスポンスが向上することが知られています。 |
− | 現在のswappiness値をチェックするには |
+ | 現在の swappiness 値をチェックするには: |
$ cat /proc/sys/vm/swappiness |
$ cat /proc/sys/vm/swappiness |
||
− | swappiness値を一時的にセットするには |
+ | swappiness 値を一時的にセットするには: |
# sysctl vm.swappiness=10 |
# sysctl vm.swappiness=10 |
||
− | swappiness値を永続的にセットするには、''sysctl'' 設定ファイルを編集します |
+ | swappiness 値を永続的にセットするには、''sysctl'' 設定ファイルを編集します: |
{{hc|/etc/sysctl.d/99-sysctl.conf|2= |
{{hc|/etc/sysctl.d/99-sysctl.conf|2= |
||
147行目: | 152行目: | ||
}} |
}} |
||
− | テストしたり、なぜこれが働くのか知るには、 |
+ | テストしたり、なぜこれが働くのか知るには、[http://rudd-o.com/en/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that この記事] を見て下さい。 |
[http://askubuntu.com/questions/103915/how-do-i-configure-swappiness この] Q&A には swappiness について多くの情報が載っています。 |
[http://askubuntu.com/questions/103915/how-do-i-configure-swappiness この] Q&A には swappiness について多くの情報が載っています。 |
||
+ | |||
+ | 他にもスワップのパフォーマンスに影響する ''sysctl'' パラメータとして {{ic|vm.vfs_cache_pressure}} が存在します。このパラメータはカーネルがページキャッシュやスワップに対して VFS キャッシュに使用されているメモリを回収する傾向をコントロールします。この値を増やすことで VFS キャッシュの回収がされやすくなります [http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.memory.html#cha.tuning.memory.vm.reclaim]。詳しい情報は、[https://www.kernel.org/doc/Documentation/sysctl/vm.txt Linux カーネルドキュメント] を見て下さい。 |
||
=== Priority === |
=== Priority === |
2015年3月17日 (火) 19:20時点における版
このページでは GNU/Linux でのスワップとページングを紹介します。また、スワップパーティションとスワップファイルの作成と有効化について説明しています。
All about Linux swap space より:
- Linux は物理 RAM (random access memory) をページと呼ばれるメモリのかたまりに分割します。スワッピングとは、メモリを開放するために、ページがスワップ領域という名の事前設定領域にコピーされることを言います。物理メモリとスワップ領域の合計が利用できる仮想メモリのサイズになります。
目次
スワップ領域
スワップ領域は普通ディスクパーティションとして作られますが、ファイルにすることもできます。Arch Linux のインストール中にユーザーはスワップ領域を作成することができ、場合によっては後でそれが必要になるでしょう。スワップ領域は一般的に RAM が 1GB より少ないユーザーに推奨されます、PC に物理メモリが余分にあるならスワップ領域を作るかは好みの問題になります (ただ suspend-to-disk をするには必要になります)。
スワップの状態を確認するには、次を実行:
$ swapon -s
もしくは:
$ free -h
スワップパーティション
ほとんどの GNU/Linux パーティションツール (例: fdisk
, cfdisk
) でスワップパーティションの作成ができます。スワップパーティションはタイプ 82 と指定されています。
Linux のスワップ領域をセットアップする時には、mkswap
コマンドが使われます。例えば:
# mkswap /dev/sda2
mkswap ユーティリティはデフォルトでパーティションの UUID を生成します。特定の UUID を指定したい場合は -U
フラグを使って下さい:
# mkswap -U custom_UUID /dev/sda2
デバイスのページングを有効にするには:
# swapon /dev/sda2
起動時にスワップパーティションを有効にするには、エントリを fstab に追加します:
/dev/sda2 none swap defaults 0 0
スワップファイル
パーティションを作るかわりに、オンザフライでサイズを変えたり簡単に削除できるものとしてスワップファイルが選択肢になりえます。特にディスク容量が貴重な場合 (例: 小容量の SSD) はこちらが理想的でしょう。
スワップファイルの作成
root 権限で fallocate
を使ってあなたが決めたサイズでスワップファイルを作成します (M = メガバイト, G = ギガバイト) (dd
を使うこともできますが作成時間は長くなります)。例えば、512 MB のスワップファイルを作成するなら:
# fallocate -l 512M /swapfile
または:
# dd if=/dev/zero of=/swapfile bs=1M count=512
正しいパーミッションを設定します (スワップファイルを全てのユーザーが読めるようにすると深刻な脆弱性になります)
# chmod 600 /swapfile
正確なサイズのファイルを作成した後、ファイルをスワップにフォーマット:
# mkswap /swapfile
スワップファイルを有効に:
# swapon /swapfile
fstab を編集してスワップファイルのエントリを加えて下さい:
/etc/fstab
/swapfile none swap defaults 0 0
スワップファイルの削除
スワップファイルを削除するには、現在使っているスワップファイルを無効にしなければなりません。
root 権限で:
# swapoff -a
スワップファイルの削除:
# rm -f /swapfile
USB デバイスとスワップ
Linux によるモジュール性のおかげで、私達は他のデバイスにわたる複数のスワップパーティションを使うことができます。あなたがひとつの完全なハードディスクを持っている場合、USB デバイスを一時パーティションとして使うことができます。ただしこのメソッドにはいくつか欠点も存在します:
- USB デバイスはハードディスクより低速です。
- フラッシュメモリには書き込み回数の上限があります。スワップパーティションとして使うと急速に書き込み可能回数を消費します。
- 他のデバイスをコンピュータに接続したときに、スワップが使われません。
USB デバイスをスワップに加えるには、まず USB フラッシュをスワップパーティションとしてパーティショニングします。Gparted などのグラフィカルツールや fdisk などのコンソールツールが使えます。パーティションテーブルを書き込む前にパーティションをスワップとしてラベル付けすることを忘れないで下さい。
次に fstab
を編集します
# nano /etc/fstab
今のスワップエントリの下に、新しいエントリを加え、現在のスワップパーティションに新しい USB のパーティションを接収させます
UUID=... none swap defaults,pri=10 0 0
UUID は次のコマンドの出力から決めて下さい
ls -l /dev/disk/by-uuid/ | grep /dev/sdc1
sdc1 をあなたの新しい USB スワップパーティションに置き換えます。 sdb1
最後に、元のスワップエントリに
pri=0
を加え、fstab に USB がいっぱいの時はハードディスクのスワップのみ使うように知らせます。
このガイドは SD カードなどの他のメモリでも使うことができます。
スワップの暗号化
dm-crypt/スワップの暗号化を見て下さい。
パフォーマンスチューニング
スワップ値を変えることでパフォーマンスを向上できるかもしれません。
Swappiness
swappiness sysctl パラメータはカーネルのスワップ領域の優先(もしくは回避)を表しています。Swappiness は 0 から 100 の間の値にすることができます。デフォルトの値は60です。このパラメータを低い値に設定すると RAM からのスワッピングが減り、多くのシステムでレスポンスが向上することが知られています。
現在の swappiness 値をチェックするには:
$ cat /proc/sys/vm/swappiness
swappiness 値を一時的にセットするには:
# sysctl vm.swappiness=10
swappiness 値を永続的にセットするには、sysctl 設定ファイルを編集します:
/etc/sysctl.d/99-sysctl.conf
vm.swappiness=10
テストしたり、なぜこれが働くのか知るには、この記事 を見て下さい。
この Q&A には swappiness について多くの情報が載っています。
他にもスワップのパフォーマンスに影響する sysctl パラメータとして vm.vfs_cache_pressure
が存在します。このパラメータはカーネルがページキャッシュやスワップに対して VFS キャッシュに使用されているメモリを回収する傾向をコントロールします。この値を増やすことで VFS キャッシュの回収がされやすくなります [1]。詳しい情報は、Linux カーネルドキュメント を見て下さい。
Priority
複数のスワップファイルやスワップパーティションを使っている場合、priority 値 (0 から 32767) をそれぞれのスワップ領域に割り当てることを考えて下さい。システムは優先度が低いスワップ領域を使う前に高い優先度が付けられたスワップ領域を使います。例えば、もしあなたが高速なディスク (/dev/sda
) と低速なディスク (/dev/sdb
) を持っている場合、高速なデバイス上のスワップ領域に高い優先度をあててください。priority は fstab で pri
パラメータを使って設定できます:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
もしくは swapon の −p
(もしくは −−priority
) パラメータを使います:
# swapon -p 100 /dev/sda1
もし2つ以上の領域が同じ priority を持ち、それが一番高い priority の場合、その領域間ではラウンド・ロビン方式でページが配分されます。