zramを設定して正しくスワップする方法

zramを設定して正しくスワップする方法

私は新しい3.0カーネルを設定してコンパイルしています。私がしばらく(パッチ経由で)使用し、3.0にマージする予定の素晴らしい機能の1つはzramです。

hddスワップとzramスワップを同時に設定してzramを最初に使用し、オーバーフローしたページのみを実際のスワップに入れることができますか?

答え1

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"

答え2

注意:各CPUがロックされているので、次のことが重要です。CPU数分zramスワップ可能(modprobe zram_num_devices = n zram)大きなものの代わりに。リアルタイムFM!

答え3

なんだか誤解が多いようだ。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オペレーティングシステムの両方が単一のデバイスで動作することを証明しました。彼らはまた、以下を調整しましたpage-cluster

page-cluster1回の試行でスワップ領域から読み取られる連続ページ数を制御します。これはページキャッシュ先読みのスワップ対応です。
言及された連続性は、仮想/物理アドレスではなく、スワップ空間の連続性を意味します。つまり、互いにスワップアウトされるという意味です。

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

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

値が小さいほど初期エラーの待ち時間は短くなりますが、先読み連続ページの一部である場合は、追加エラーと後続エラーのI / Oレイテンシが犠牲になります。

                - からカーネル文書/proc/sys/vm/*

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

これらの多くはdebian / ubuntuパッケージのzram_configに由来し、何らかの理由でzramのカーネル文書とほとんど関係がないように見え、本質的に完全に偽である可能性がある一連の中国の噂を生み出しました。

ファイルスワップを使用すると、コアあたりのスワップドライブを作成できますか?おそらくこれはあなたの質問に対する答えです。また、これをサポートするために、GoogleのChrome OSとAndroidは上記のページクラスタリングとうまく機能し、ディスクと一致しないため、単一のデバイスのレイテンシを向上させます。

さらに、システム管理者にとって、物理メモリ使用量または仮想マシンメモリ使用量はどのくらい重要ですか?ほとんどの例は、disk_sizeによる生成とmem_limitを完全に無視することを示しています。 disk_size =圧縮されていない仮想マシンサイズ。 mem_limit=実際のメモリ使用量の制限です。

仮想最大サイズは、comp_algの比率と使用しない場合のディスクサイズの0.1%オーバーヘッドに依存し、実際にはmem_limit *(約2 - 4)を楽観的に推測するため、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
}

答え4

zramを有効にすると、自動的に優先順位が与えられます。

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

ファイルを編集して(最初にバックアップを作成する)、使用されている物理メモリを減らすことができます。 mem 行を次のように変更しました。

mem=$(((totalmem / 4 / ${NRDEVICES}) * 1024))

関連情報