swapon
memiliki -p
sakelar yang menetapkan prioritas. Saya dapat menyiapkan:
swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
Atau di /etc/fstab:
/dev/zram0 none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0 0 0
EDIT: Hanya untuk solusi lengkap - baris seperti itu mungkin berguna sebagai aturan udev:
KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Sidenote:karena penguncian per-cpu, penting untuk memiliki swap-zram sebanyak CPU (modprobe zram_num_devices=n zram) alih-alih satu yang besar. RTFM!
Untuk beberapa alasan tampaknya ada banyak salah tafsir dari https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Ini dengan jelas menyatakan:
2) Tetapkan jumlah maksimum aliran kompresi
Terlepas dari nilai yang diteruskan ke atribut ini, ZRAM akan selalu mengalokasikan beberapa aliran kompresi - satu per CPU online - sehingga memungkinkan beberapa operasi kompresi bersamaan. Jumlah aliran kompresi yang dialokasikan turun saat beberapa CPU menjadi offline. Tidak ada lagi mode aliran kompresi tunggal, kecuali jika Anda menjalankan sistem UP atau hanya memiliki 1 CPU online.Untuk mengetahui berapa banyak aliran yang tersedia saat ini:
cat /sys/block/zram0/max_comp_streams
Namun, ada mitos urban umum yang terus ada bahwa aliran maksimum adalah 1.
Itu jelas tidak benar.
Dua OS di mana zram telah terbukti efektif Chrome OS &AndroidAnda satu perangkat. Mereka juga men-tweak page-cluster
:
page-cluster
mengontrol jumlah halaman hingga halaman berurutan dibaca dari swap dalam satu upaya. Ini adalah swap rekanan untuk membaca cache halaman di depan.
Konsekutivitas yang disebutkan bukan dalam hal alamat virtual/fisik, tetapi berturut-turut pada ruang swap – artinya mereka ditukar bersama.Ini adalah nilai logaritmik – menyetelnya ke nol berarti "1 halaman", menyetelnya ke 1 berarti "2 halaman", menyetelnya ke 2 berarti "4 halaman", dll.Zero menonaktifkan pembacaan swap sepenuhnya.
Nilai defaultnya adalah tiga (delapan halaman sekaligus). Mungkin ada sedikit keuntungan dalam menyesuaikan ini ke nilai yang berbeda jika beban kerja Anda intensif-swap.
Nilai yang lebih rendah berarti latensi yang lebih rendah untuk kesalahan awal, tetapi pada saat yang sama kesalahan tambahan dan penundaan I/O untuk kesalahan berikutnya jika mereka menjadi bagian dari halaman berurutan yang akan dibawa ke depan.
— dari dokumentasi kernel untuk /proc/sys/vm/*
Jadi gunakan echo "0" > /proc/sys/vm/page-cluster
untuk memaksa satu halaman.
Banyak yang tampaknya berasal dari zram_config paket debian/ubuntu yang karena beberapa alasan tampaknya memiliki korelasi yang sangat kecil dengan dokumen kernel untuk zram dan telah menghasilkan serangkaian bisikan berbahasa Mandarin yang pada intinya bisa saja salah sepenuhnya.
Dengan pertukaran file, apakah Anda membuat drive swap untuk setiap inti? Mungkin itu bisa menjawab pertanyaan Anda.Juga untuk mencadangkan ini Google Chrome OS &Android yang berhasil digunakan dengan cluster halaman di atas karena tidak cocok dengan disk sehingga latensi dapat ditingkatkan, satu perangkat.
Juga untuk sys-admin apa yang penting penggunaan mem aktual atau penggunaan mem vm? Sebagian besar contoh menunjukkan pembuatan melalui disk_size dan benar-benar mengabaikan mem_limit.disk_size=ukuran vm tidak terkompresi.mem_limit=batas jejak kaki aktual mem.
Ini semacam membuat pilihan disk_size membingungkan karena ukuran maksimum virtualnya bergantung pada rasio comp_alg dan overhead 0,1% dari ukuran disk saat tidak digunakan dan benar-benar perkiraan mem_limit * (sekitar 2 - 4) dari hemat vs optimisme.
zram_config bahkan tidak memeriksa penggunaan layanan sebelumnya dan menimpa sementara pemeriksaan sederhana dari kelas zram sys seperti di bawah ini.
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
}