Cara mengatur zram dan swap dengan benar

9

Saya mengkonfigurasi & mengkompilasi kernel 3.0 baru. Salah satu barang yang saya rencanakan untuk digunakan untuk beberapa waktu (dengan menambal) yang digabung menjadi 3.0 adalah zram.

Apakah mungkin untuk mengatur hdd swap dan zram swap sehingga zram digunakan terlebih dahulu dan hanya halaman yang tumpah yang dimasukkan ke dalam swap aktual?

Maciej Piechotka
sumber

Jawaban:

8

Sidenote: karena penguncian per-cpu, penting untuk memiliki sebanyak zram-swap seperti CPU (modprobe zram_num_devices = n zram) alih-alih yang besar. RTFM!

eMPee584
sumber
1
[rujukan?]? Saya tidak dapat menemukan rekomendasi dalam dokumentasi Linux atau Google.
Maciej Piechotka
Secara default max_comp_streamstampaknya 1sesuai dengan dokumentasi . Saya belum memeriksa apakah parameter itu ada pada 2011 tetapi tampaknya menjadi pilihan yang lebih baik daripada beberapa file swap.
Maciej Piechotka
1
Pengujian dengan paket di zram-configbawah Ubuntu (dan kemungkinan debian) Saya mencatat bahwa konfigurasi default ke 1 per core atau utas (2 pada E2140 dual core lama dan 4 pada i3-3220)
Penatua Geek
menarik, dan ini juga tampaknya cukup jelas untuk dipahami dengan membaca /etc/init/zram-config.conf
Aquarius Power
1
Sidenote ini sudah usang sejak kernel versi 3.15. Anda sekarang dapat memiliki beberapa utas kompresi untuk zram tunggal yang besar.
Perkins
6

swaponmemiliki -psaklar yang menetapkan prioritas. Saya dapat mengatur:

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 bermanfaat sebagai aturan udev:

KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Maciej Piechotka
sumber
1

Pilih berapa banyak perangkat zram yang Anda inginkan dengan melewati

zram.num_devices=4

ke parameter kernel atau langsung ke modul (tanpa zram.). Nilai standarnya adalah 1. zram akan dapat memanfaatkan CPU sebanyak jumlah perangkat yang Anda buat.

Siapkan perangkat zram0, atur ukuran ke 1GB.

echo 1000000000 > /sys/block/zram0/disksize

Atau Anda dapat melakukannya dengan aturan udev. Buat swap di zram0

mkswap /dev/zram0

dan mengaktifkannya dengan prioritas lebih tinggi daripada perangkat swap lainnya

swapon -p 32767 /dev/zram0
okias
sumber
Versi kernel dan distro apa yang Anda tulis di sini?
Cbhihe
Sebagai catatan, melanjutkan seperti yang Anda sarankan pada desktop Ubuntu 14.04.5, gagal. Secara khusus, ketika saya mencoba untuk mengatur prioritas zram0dan zram1nilai 10 pada kotak 2 inti Intel T9300, melempar saya dengan: swapon: /dev/zram0 or 1: swapon failed: Device or resource busy.
Cbhihe
1

Untuk beberapa alasan tampaknya ada banyak salah tafsir tentang https://www.kernel.org/doc/Documentation/blockdev/zram.txt

Ini dengan jelas menyatakan:

2) Mengatur 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 ketika beberapa CPU menjadi offline. Tidak ada mode aliran kompresi tunggal lagi, 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

Tetapi ada mitos urban yang umum dan persisten bahwa max stream adalah 1.

Jelas tidak benar.

Dua OS di mana zram telah membuktikan Chrome OS & Android yang efektif sebagai satu perangkat. Mereka juga men-tweak page-cluster:

page-clustermengontrol jumlah halaman hingga halaman berurutan dibaca dari swap dalam satu upaya. Ini adalah swap rekanan swap dari mitra ke halaman.
Consecutivity yang disebutkan bukan dalam hal alamat virtual / fisik, tetapi berturut-turut pada ruang swap - itu berarti mereka ditukar bersama.

Ini adalah nilai logaritmik - pengaturan ke nol berarti "1 halaman", pengaturan ke 1 berarti "2 halaman", pengaturan ke 2 berarti "4 halaman", dll. Nol menonaktifkan swap readahead sepenuhnya.

Nilai default adalah tiga (delapan halaman sekaligus). Mungkin ada beberapa manfaat kecil dalam menyetel ini ke nilai yang berbeda jika beban kerja Anda intensif untuk 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 mengikuti kesalahan jika mereka akan menjadi bagian dari halaman berturut-turut yang akan dibawa oleh readahead.

                - dari dokumentasi kernel untuk/proc/sys/vm/*

Jadi gunakan echo "0" > /proc/sys/vm/page-clusteruntuk memaksa satu halaman.

Banyak yang tampaknya berasal dari zram_config paket debian / ubuntu yang karena beberapa alasan tampaknya memiliki korelasi yang sangat sedikit dengan dokumen kernel untuk zram dan telah menghasilkan serangkaian bisikan Cina yang pada dasarnya bisa sepenuhnya salah.

Dengan swap file, apakah Anda membuat drive swap untuk setiap inti? Mungkin itu bisa menjawab pertanyaan Anda. Juga untuk mencadangkan ini Googles Chrome OS & Android yang berhasil menggunakan 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 memperlihatkan kreasi melalui disk_size dan abaikan mem_limit. disk_size = ukuran vm tidak terkompresi. mem_limit = batas jejak kaki aktual.

Ini semacam membuat pilihan disk_size membingungkan karena ukurannya max virtual tergantung pada rasio comp_alg dan overhead 0,1% dari ukuran disk ketika tidak digunakan dan benar-benar merupakan perkiraan angka dari mem_limit * (sekitar 2 - 4) dari frugal vs optimisme.

zram_config bahkan tidak memeriksa penggunaan layanan sebelumnya dan menimpa sementara pemeriksaan sederhana dari kelas sistem zram seperti kehendak 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
}
Stuart Naylor
sumber
0

Ketika Anda mengaktifkan zram, itu akan secara otomatis memiliki prioritas.

Untuk ubuntu 16.04: /usr/bin/init-zram-swapping

Anda dapat mengedit file itu (membuat cadangan 1), untuk menurunkan ram nyata yang digunakan, saya mengubah baris mem ke ini:

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