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
}