zramとswapを適切に設定する方法


9

新しい3.0カーネルを構成してコンパイルしています。3.0にマージされた、しばらくの間(パッチを適用することで)使用することを計画していた利点の1つはzramです。

hdd swapとzram swapの両方を設定して、zramが最初に使用され、スピルされたページのみが実際のスワップに入れられるようにすることは可能ですか?

回答:


8

補足:CPUごとのロックのため、1つの大きなCPUではなく、CPU(modprobe zram_num_devices = n zram)と同じ数のzram スワップを使用することが重要です。RTFM!


1
[引用が必要]?LinuxのドキュメントやGoogleで推奨事項が見つかりません。
Maciej Piechotka

デフォルトでmax_comp_streamsは、ドキュメント1よると思われます。そのパラメーターが2011年に存在するかどうかは確認していませんが、複数のスワップファイルよりも良いオプションのようです。
Maciej Piechotka

1
zram-configUbuntu(おそらくdebian)でのパッケージでのテスト構成は、デフォルトでコアまたはスレッドごとに1つ(古いE2140デュアルコアでは2つ、i3-3220では4つ)であることに気付きました
Elder Geek

興味深いことに、これは/etc/init/zram-config.conf
Aquarius Power

1
この付記は、カーネルバージョン3.15で廃止されました。1つの大きなzramに複数の圧縮スレッドを使用できるようになりました。
Perkins

6

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"

1

渡すことで、必要なzramデバイスの数を選択します

zram.num_devices=4

カーネルパラメータまたは直接モジュール(zramなし)に。デフォルト値は1です。zramは、作成したデバイスの数と同じ数のCPUを利用できます。

zram0デバイスを準備し、サイズを1GBに設定します。

echo 1000000000 > /sys/block/zram0/disksize

あるいは、udevルールで行うこともできます。zram0にスワップを作成する

mkswap /dev/zram0

他のスワップデバイスよりも高い優先度でそれを有効にします

swapon -p 32767 /dev/zram0

ここではどのカーネルとディストリビューションのバージョンを書いていますか?
Cbhihe

ちなみに、14.04.5デスクトップUbuntuでアドバイスどおりに進めると失敗します。特に、2つのニュークリアスIntel T9300ボックスで優先度を10に設定しようとするzram0zram1、次のエラーが発生しますswapon: /dev/zram0 or 1: swapon failed: Device or resource busy
Cbhihe

1

何らかの理由で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が効果的なChrome OSとAndroidを単一のデバイスとして証明した2つのOS。また、彼らは微調整しました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_configのdebian / ubuntuパッケージに由来しているようです。何らかの理由で、zramのカーネルドキュメントとの相関がほとんどなく、本質的に完全に間違っている可能性がある一連の中国語の囁きが生まれました。

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

また、sys-adminの場合、実際のmemの使用法またはvm memの使用法は何ですか?ほとんどの例では、disk_sizeによる作成を示し、mem_limitを完全に無視しています。disk_size =非圧縮vmサイズ。mem_limit =実際のメモリフットプリント制限。

それは一種のdisk_size選択を混乱させます。仮想最大サイズはcomp_alg比率と使用されていないときのディスクのサイズの0.1%のオーバーヘッドに依存し、実際にはmem_limit *(約2-4)の質素なvsの推定です楽観。

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
}

0

zramを有効にすると、自動的に優先されます。

ubuntu 16.04の場合: /usr/bin/init-zram-swapping

そのファイルを編集して(最初にバックアップを作成)、使用されている実際のRAMを下げることができます。mem行を次のように変更しました。

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.