GNU/Linux >> Belajar Linux >  >> Linux

Cara mengatur zram dan swap dengan benar

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
}

Linux
  1. Cara Mengatur Alamat IP Statis dan Konfigurasi Jaringan di Linux

  2. Cara Menginstal dan Mengatur mysql 8 di Ubuntu 20.04

  3. Bagaimana cara mengatur file swap terenkripsi di Linux?

  1. Apa Itu Nama Inang Cantik dan Cara Mengaturnya

  2. Cara Mengatur dan Menjalankan Kafka di Kubernetes

  3. Cara Mengatur atau Mengubah Zona Waktu di Ubuntu 20.04 dan 21.04

  1. Cara menyetel tanggal dan waktu di AlmaLinux

  2. Cara Menginstal dan Mengatur Docker di Ubuntu 18.04

  3. Cara Mengatur dan Mendaftar Variabel Lingkungan di Linux