Swap

このページでは、GNU/Linuxでのスワップスペースとページングの紹介を提供します。 これは、スワップパーティションとスワップファイルの作成と活性化をカバーしています。Linuxのスワップスペースについてのすべてから:

Linuxはその物理RAM(ランダムアクセスメモリ)をページと呼ばれるメモリのチャンクに分割します。 スワップとは、メモリのページを、スワップ領域と呼ばれるハードディスク上の事前に構成された領域にコピーして、そのページのメモリを解放するプロセス 物理メモリとスワップ領域の合計サイズは、使用可能な仮想メモリの量です。 swapのサポートは、linuxカーネルとutil-linuxパッケージのユーザー空間ユーティリティによって提供されます。

スワップ領域

スワップ領域は、ディスクパーティションまたはファイルの形式を取ることができます。 ユーザーは、インストール中に、または後で必要に応じてスワップ領域を作成できます。 スワップ領域は、インストールされている物理メモリ(RAM)を超えて仮想メモリを拡張するために、また、ディスクへのサスペンドサポートのために、二つの目的のために使用することができます。

スワップで仮想メモリを拡張することが有益な場合は、インストールされている物理メモリの量に依存します。 物理メモリの量が、すべての目的のプログラムを実行するために必要なメモリの量よりも少ない場合は、swapを有効にすることが有益である可能性が これにより、LinuxカーネルのOOMキラーメカニズムがプロセスを強制終了することによって自動的にメモリを解放しようとするメモリ 仮想メモリの量を必要な量に増やすには、スワップ領域として必要な差(またはそれ以上)を追加します。

スワップを有効にする最大の欠点は、パフォーマンスが低いことです。#Performance節を参照してください。 したがって、スワップを有効にすることは個人的な好みの問題です: いくつかは、スワップを有効にするよりも強制終了するプログラムを好み、他の人は、物理メモリが使い果たされたときにスワップと遅いシステ

注:スワップパーティションと連続したスワップファイルの使用にはパフォーマンスの違いはありません。

スワップステータスを確認するには、次のように使用します。

$ swapon --show

または物理メモリとスワップ使用量を表示します。

$ free -h

Swap partition

タンゴ-不正確です。pngタンゴ-不正確です。png

理由:82MBRのスワップパーティションタイプですが、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)を参照のこと。
警告: Mdadmを使用してRAID設定で破棄を有効にすると、swaponを使用している場合、起動時および実行時にシステムがロックアップします。

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)である場合に特に望ましいかもしれません。

警告:BtrfsはLinuxカーネルバージョン5.0以降の制限付きスワップファイルをサポートしています。 詳細については、Btrfs#Swapファイルを参照してください。

手動で

スワップファイルの作成

注:Btrfsを使用する場合は、まずbtrfs#Swap fileで説明されている手順に従ってスワップファイルを初期化します。ddを使用して、選択したサイズのスワップファイルを作成します。 たとえば、512MiBのスワップファイルを作成します。

# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
注:ddを使用してスワップファイルを割り当てるのが最も移植性の高いソリ

適切な権限を設定します(世界で読めるスワップファイルは巨大なローカルの脆弱性です):

# 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

メモ: 著者は現在、コミット頻度が低く、ほとんどのユーザーのニーズをカバーするzramのために、代わりにzram-generatorを使用することを推奨しています。

systemd-swapは、zramスワップ、スワップファイル、スワップパーティションからハイブリッドスワップスペースを作成するためのスクリプトです。 それはsystemdプロジェクトと提携していません。

systemd-swapパッケージをインストールします。 コメントを解除し、swapfc_enabled=1/etc/systemd/swap.confsystemd-swapサービスを開始/有効にします。

詳細と推奨設定の設定については、authors GitHubページを参照してください。注意:

  • ジャーナルに次の警告が表示され続ける場合systemd-swap: WARN: swapFC: ENOSPCswapfc_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を参照してください。

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です