新しい3.0カーネルを構成してコンパイルしています。3.0にマージされた、しばらくの間(パッチを適用することで)使用することを計画していた利点の1つはzramです。
hdd swapとzram swapの両方を設定して、zramが最初に使用され、スピルされたページのみが実際のスワップに入れられるようにすることは可能ですか?
新しい3.0カーネルを構成してコンパイルしています。3.0にマージされた、しばらくの間(パッチを適用することで)使用することを計画していた利点の1つはzramです。
hdd swapとzram swapの両方を設定して、zramが最初に使用され、スピルされたページのみが実際のスワップに入れられるようにすることは可能ですか?
回答:
補足:CPUごとのロックのため、1つの大きなCPUではなく、CPU(modprobe zram_num_devices = n zram)と同じ数のzram スワップを使用することが重要です。RTFM!
max_comp_streams
は、ドキュメントに1
よると思われます。そのパラメーターが2011年に存在するかどうかは確認していませんが、複数のスワップファイルよりも良いオプションのようです。
zram-config
Ubuntu(おそらくdebian)でのパッケージでのテスト構成は、デフォルトでコアまたはスレッドごとに1つ(古いE2140デュアルコアでは2つ、i3-3220では4つ)であることに気付きました
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"
渡すことで、必要な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
zram0
とzram1
、次のエラーが発生しますswapon: /dev/zram0 or 1: swapon failed: Device or resource busy
。
何らかの理由で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遅延が発生します。
したがって、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
}