このページでは、GNU/Linuxでのスワップスペースとページングの紹介を提供します。 これは、スワップパーティションとスワップファイルの作成と活性化をカバーしています。Linuxのスワップスペースについてのすべてから:
Linuxはその物理RAM(ランダムアクセスメモリ)をページと呼ばれるメモリのチャンクに分割します。 スワップとは、メモリのページを、スワップ領域と呼ばれるハードディスク上の事前に構成された領域にコピーして、そのページのメモリを解放するプロセス 物理メモリとスワップ領域の合計サイズは、使用可能な仮想メモリの量です。 swapのサポートは、linuxカーネルとutil-linuxパッケージのユーザー空間ユーティリティによって提供されます。
スワップ領域
スワップ領域は、ディスクパーティションまたはファイルの形式を取ることができます。 ユーザーは、インストール中に、または後で必要に応じてスワップ領域を作成できます。 スワップ領域は、インストールされている物理メモリ(RAM)を超えて仮想メモリを拡張するために、また、ディスクへのサスペンドサポートのために、二つの目的のために使用することができます。
スワップで仮想メモリを拡張することが有益な場合は、インストールされている物理メモリの量に依存します。 物理メモリの量が、すべての目的のプログラムを実行するために必要なメモリの量よりも少ない場合は、swapを有効にすることが有益である可能性が これにより、LinuxカーネルのOOMキラーメカニズムがプロセスを強制終了することによって自動的にメモリを解放しようとするメモリ 仮想メモリの量を必要な量に増やすには、スワップ領域として必要な差(またはそれ以上)を追加します。
スワップを有効にする最大の欠点は、パフォーマンスが低いことです。#Performance節を参照してください。 したがって、スワップを有効にすることは個人的な好みの問題です: いくつかは、スワップを有効にするよりも強制終了するプログラムを好み、他の人は、物理メモリが使い果たされたときにスワップと遅いシステ
スワップステータスを確認するには、次のように使用します。
$ swapon --show
または物理メモリとスワップ使用量を表示します。
$ free -h
Swap partition
82
MBRのスワップパーティションタイプですが、MBRにスワップパーティションタイプの自動検出はありません。 Swapパーティション上の/TRIMコマンドは、Fedora Deployment Guidesを参照してサポートされている場合、カーネルによって自動的に発行されるようです。 (Discuss in Talk:Swap#Clarify swap discovery)swapパーティションは、ほとんどのGNU/Linuxパーティショニングツールで作成できます。 スワップパーティションは、通常、タイプ82
として指定されます。 任意のパーティションタイプをswapとして使用することは可能ですが、systemdが自動的にそれを検出してマウントするため、ほとんどの場合type82
を使用することをお勧めします(下記参照)。linuxスワップ領域としてパーティションを設定するには、mkswap(8)コマンドを使用します。 たとえば、次のようにします。
# mkswap /dev/sdxy
デバイスのページングを有効にするには:
# swapon /dev/sdxy
ブート時にこのスワップパーティションを有効にするには、/etc/fstab
:p>
UUID=device_UUID none swap defaults 0 0
ここで、device_UUID
はスワップスペースのUUIDです。ファイルの構文についてはfstabを参照してください。
ファイルの構文についてはfstabを参照してください。
- SWAPパーティションがGPTを使用しているデバイス上にある場合、fstabエントリはオプションです。 次のサブセクションを参照してください。TRIMをサポートしているSSDを使用する場合は、fstabのswap行で
discard
を使用することを検討してください。 Swaponで手動でスワップを有効にする場合、-d
--discard
パラメータを使用すると同じことが達成されます。 詳細はswapon(8)を参照のこと。
Systemdによるアクティブ化
systemdは、二つの異なるメカニズムに基づいてスワップパーティションをアクティ どちらも/usr/lib/systemd/system-generators
の実行可能ファイルです。 ジェネレータは起動時に実行され、マウント用のネイティブsystemdユニットを作成します。 最初のsystemd-fstab-generator
は、fstabを読み取り、swap用の単位を含む単位を生成します。 第二に、systemd-gpt-auto-generator
はルートディスクを検査してユニットを生成します。 これはGPTディスク上でのみ動作し、そのタイプGUIDによってスワップパーティションを識別できます。
スワップを無効にする
特定のスワップスペースを無効にするには:
# swapoff /dev/sdxy
または、-a
スイッチを使用して、すべてのス
swapはsystemdによって管理されているため、次回のシステム起動時に再び有効になります。 検出されたスワップ領域の自動アクティブ化を永続的に無効にするには、systemctl --type swap
を実行して責任者を見つけます。ユニットを交換し、それをマスクします。
Swap file
パーティション全体を作成する代わりに、スワップファイルはその場でサイズを変更する機能を提供し、より簡単に完全に削除されます。 これは、ディスク領域がプレミアム(例えば、適度なサイズのSSD)である場合に特に望ましいかもしれません。
手動で
スワップファイルの作成
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
適切な権限を設定します(世界で読めるスワップファイルは巨大なローカルの脆弱性です):
# chmod 600 /swapfile
適切なサイズのファイルを作成した後、swap:最後に、fstab設定を編集して、スワップファイルのエントリを追加します。
/etc/fstab
/swapfile noneスワップデフォルト0 0
詳細については、fstab#Usageを参照してください…..注:
- スワップファイルは、UUIDやラベルではなく、ファイルシステム上の場所で指定する必要があります。
- Btrfsを使用する場合は、作成したサブボリュームもリストに追加し、
discard,autodefrag
と圧縮オプションを削除することを忘れないでください。
スワップファイルを削除
スワップファイルを削除するには、最初にオフにしてから削除する必要があります。
# swapoff /swapfile# rm -f /swapfile
最後に/etc/fstab
から関連するエントリを削除します。
自動化
zram-generator
このツールの目的は、zramデバイスの作成です。 これはRustで書かれており、systemdのGitHubにあります。 Zram-generatorAURパッケージでインストールできます。設定は簡単で、READMEで説明されています。
systemd-swap
systemd-swapは、zramスワップ、スワップファイル、スワップパーティションからハイブリッドスワップスペースを作成するためのスクリプトです。 それはsystemdプロジェクトと提携していません。
systemd-swapパッケージをインストールします。 コメントを解除し、swapfc_enabled=1
/etc/systemd/swap.conf
systemd-swap
サービスを開始/有効にします。
詳細と推奨設定の設定については、authors GitHubページを参照してください。注意:
- ジャーナルに次の警告が表示され続ける場合
systemd-swap: WARN: swapFC: ENOSPC
swapfc_force_preallocated=1
/etc/systemd/swap.conf
に設定する必要があります。 - systemd-swapによって作成されたスワップファイルは、休止状態に簡単に使用することはできません。 Systemd-swap issue85を参照してください。
スワップ暗号化
dm-crypt/スワップ暗号化を参照してください。
パフォーマンス
スワップ操作は、通常、RAM内のデータに直接アクセスするよりも大幅に遅くなります。 パフォーマンスを向上させるためにスワップを完全に無効にすると、VFSキャッシュで使用可能なメモリが減少し、ディスクI/Oがより頻繁でコストが スワップの値は0~200(Linux<5.8の場合は最大100)で、デフォルト値は60です。 値が低いとカーネルはスワップを回避し、値が高いとカーネルはスワップ領域を使用しようとし、値が100の場合はIOコストが等しいと仮定されます。 十分なメモリに低い値を使用すると、多くのシステムで応答性が向上することが知られています。または、生の整数値を取得するために/sys/fs/cgroup/memory/memory.swappiness
/proc/sys/vm/swappiness
ファイルを読み取ることができます。
/proc
/sys
を使用することをお勧めします。一時的にswappiness値を設定するには:
# sysctl -w vm.swappiness=10
swappiness値を永続的に設定するには、sysctlを作成します。d(5)設定ファイル。 たとえば、次のようにします。
/etc/sysctl。d/99-スワップ。conf
vm.swappiness=10
これがなぜ機能するのかをテストするには、この記事を見てください。
VFS cache pressure
スワップパフォーマンスに影響を与えるもう一つのsysctlパラメータはvm.vfs_cache_pressure
であり、vfsキャッシュのキャッシュに使用されるメモリを再利用するカーネルの傾向を制御します。 この値を大きくすると、VFSキャッシュが再利用される速度が増加します。 詳細については、Linuxカーネルのドキュメントを参照してください。
Priority
複数のスワップファイルまたはスワップパーティションがある場合は、スワップ領域ごとに優先度の値(0から32767)を割り当てることを検討す 優先度の高いスワップ領域を使用する前に、優先度の低いスワップ領域を使用します。 たとえば、高速なディスク(/dev/sda
/dev/sdb
)がある場合は、最も高速なデバイスにあるスワップ領域に高い優先 優先順位は、fstabでpri
パラメータ:
/dev/sda1 none swap defaults,pri=100 0 0/dev/sdb2 none swap defaults,pri=10 0 0
またはswaponの--priority
パラメータを介して割り当てることができます:
# swapon --priority 100 /dev/sda1
二つ以上の領域が同じ優先度を持ち、それが利用可能な最も高い優先度である場合、ページはそれらの間でラウンドロビン方式で割り当
Zswapまたはzramの使用
Zswapは、スワップされたページの圧縮されたライトバックキャッシュを提供するLinuxカーネル機能です。 これにより、パフォーマンスが向上し、IO操作が減少します。 ZRAMは、ディスク上のswapfileの代わりに、仮想圧縮されたスワップファイルをメモリに作成します。
ストライピング
スワップパフォーマンス上の理由からRAIDを使用する必要はありません。 カーネル自体は、/etc/fstab
ファイルで同じ優先順位を与えるだけで、複数のデバイスでストライプスワップすることができます。 詳細については、ソフトウェア-RAID HOWTOを参照してください。