GNU/Linux >> Linux の 問題 >  >> Linux

zram と swap を正しくセットアップする方法

swapon -p を持っている 優先度を設定するスイッチ。設定できます:

swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap

または /etc/fstab:

/dev/zram0              none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0     0 0

編集: 完全な解決策として - このような行は udev ルールとして役立つ場合があります:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"

補足:CPU ごとのロックのため、CPU と同じ数の zram-swap を持つことが重要です (modprobe zram_num_devices=n zram) 単一の大きなものの代わりに。 RTFM!


なぜかhttps://www.kernel.org/doc/Documentation/blockdev/zram.txtの誤解が多いようです

明確に述べています:

<ブロック引用>

2) 圧縮ストリームの最大数を設定する
この属性に渡される値に関係なく、ZRAM は常に複数の圧縮ストリームを割り当てます (オンライン CPU ごとに 1 つ)。したがって、複数の同時圧縮操作が可能になります。一部の CPU がオフラインになると、割り当てられた圧縮ストリームの数が減少します。 UP システムを実行しているか、オンラインの CPU が 1 つしかない場合を除き、シングル圧縮ストリーム モードはもうありません。

現在利用可能なストリームの数を確認するには:

cat /sys/block/zram0/max_comp_streams

しかし、最大ストリーム数が 1 であるという一般的で持続的な都市伝説があります。

明らかにそうではありません。

zram が効果的であることが証明された 2 つの OS Chrome OS と Android を 1 つのデバイスで利用できます。また、page-cluster を微調整します :

<ブロック引用>

page-cluster 連続したページが 1 回の試行でスワップから読み込まれるまでのページ数を制御します。これは、ページ キャッシュの先読みに対応するスワップです。
前述の連続性は、仮想/物理アドレスに関するものではなく、スワップ空間での連続性です。つまり、それらが一緒にスワップアウトされたことを意味します。

これは対数値です。ゼロに設定すると「1 ページ」を意味し、1 に設定すると「2 ページ」を意味し、2 に設定すると「4 ページ」を意味します。ゼロはスワップ先読みを完全に無効にします。

デフォルト値は 3 (一度に 8 ページ) です。ワークロードがスワップ集約型である場合、これを別の値に調整すると、いくつかの小さな利点が得られる可能性があります。

値が小さいほど、最初の障害の待ち時間が短くなりますが、同時に追加の障害と次の障害の I/O 遅延が、連続するページの先読みがもたらす一部であった場合に発生します。

/proc/sys/vm/* のカーネルドキュメントから

echo "0" > /proc/sys/vm/page-cluster を使用してください 単一ページを強制します。

多くは、何らかの理由で zram のカーネル ドキュメントとの相関関係がほとんどないように思われる debian/ubuntu パッケージの zram_config に由来するようであり、本質的に完全に間違っている可能性がある一連の中国語のささやきを生み出しました。

ファイル スワップでは、コアごとにスワップ ドライブを作成しますか?多分それはあなたの質問に答えるかもしれません.また、これをバックアップするために、上記のページクラスターをディスクと一致しないため、遅延を改善できる単一のデバイスとして正常に採用されている Google の Chrome OS と Android.

また、システム管理者にとって重要な実際のメモリ使用量または vm メモリ使用量は何ですか?ほとんどの例は、disk_size による作成を示しており、mem_limit.disk_size=uncompressed vm size.mem_limit=実際のメモリ フットプリント制限を完全に無視しています。

仮想最大サイズは comp_alg 比率に依存し、使用していないときのディスク サイズの 0.1% のオーバーヘッドがあるため、disk_size の選択がややこしくなります。楽観主義。

zram_config は、以下のような zram sys クラスの単純なチェックが行われる一方で、以前のサービスの使用状況と上書きをチェックすることさえしません。

createZramSwaps () {
        totalmem=$(free|awk '/^Mem:/{print $2}')
        mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))

        # Check Zram Class created
        ZRAM_SYS_DIR='/sys/class/zram-control'
        if [ ! -d "${ZRAM_SYS_DIR}" ]; then
                modprobe zram
                RAM_DEV='0'
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        else
                RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                mkswap /dev/zram${RAM_DEV}
                swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
        fi

        if [ "$BIG_CORES" -gt 1 ];then
                for i in $(seq $((BIG_CORES - 1))); do
                        RAM_DEV=$(cat /sys/class/zram-control/hot_add)
                        echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
                        echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
                        mkswap /dev/zram${RAM_DEV}
                        swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
                done
        fi
}

Linux
  1. Linuxで静的IPアドレスを設定してネットワークを構成する方法

  2. Ubuntu20.04にmysql8をインストールしてセットアップする方法

  3. Linux で暗号化されたスワップ ファイルを設定するにはどうすればよいですか?

  1. きれいなホスト名とは何ですか、それを設定する方法

  2. KubernetesでKafkaを設定して実行する方法

  3. Ubuntu20.04および21.04でタイムゾーンを設定または変更する方法

  1. AlmaLinuxで日付と時刻を設定する方法

  2. Ubuntu18.04にDockerをインストールしてセットアップする方法

  3. Linuxで環境変数を設定および一覧表示する方法