Bagaimana cara mengaktifkan swap ram terkompresi secara permanen? Versi apa yang digunakan?

11

EDIT: Tepatnya ada sekarang zram-config. Ini adalah pekerjaan pemula yang mengkompresi hingga setengah dari ram Anda yang tersebar di perangkat swap $ (jumlah core CPU). Itu tidak selalu dimulai saat boot tetapi mengeluarkan sudo service zram-config startkarya.

Saya mengaktifkan compcache = "256 M" /etc/initramfs-tools/initramfs.confseperti yang dijelaskan di sini (oleh saya: P). Ini - saya percaya - menciptakan /dev/ramzswap0tetapi tidak pernah diaktifkan sebagai swap. Ini hanya berfungsi setelah mkswap&& swapon.

Lalu ada modul zram yang membuat /dev/zram. Apakah ini sesuatu yang lain? Ini bekerja dengan cara yang sama tetapi /dev/ramzswapdibuat dari modul ramzswap.

Pada akhir hari saya ingin memiliki swap terkompresi dalam ram dan menggunakan yang lebih baik dari keduanya dan untuk itu saya perlu tahu bagaimana mengaktifkannya secara permanen dengan cara yang tidak hack. Bagaimana ini dilakukan?

Saya menulis tentang ramzswap di Lucid di sini tetapi banyak hal telah berubah di Natty. Anda masih dapat mengaktifkan ramzswap di initramfs.conf tetapi itu tidak bisa diaktifkan.

PS: Saya memindai semua aturan udev di / lib dan / etc tetapi tidak menemukan sesuatu yang menarik.

turbo
sumber

Jawaban:

2

Sekarang ada PPA yang menginstal skrip pemula yang tepat untuk mengaktifkan zram saat boot. Itu memilih ukuran dan jumlah yang benar dari perangkat swap terkompresi untuk sistem Anda.

https://launchpad.net/~shnatsel/+archive/zram

Ryan C. Thompson
sumber
2
ada juga konfigurasi zram yang tepat sekarang.
turbo
Mengapa dihapus dari Raring 13.04?
NoBugs
PPA mungkin belum diperbarui.
Ryan C. Thompson
2

Saya berjuang dengan masalah yang sama.

Hari ini saya menemukan posting blog yang bagus tentang itu. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Meskipun "sudo start zramswap" tidak berfungsi, ketika saya me-restart PC saya itu menyelesaikan masalah saya dengan sempurna.

Cobalah.

Shunsuke Watanabe
sumber
Itu sebenarnya pertama kali saya perhatikan ada / etc / init /. Biasanya saya menggunakan /etc/init.d/ untuk memulai hal-hal saat boot. Menarik ...
turbo
/etc/init/adalah tempat skrip init pemula tinggal. Yang di /etc/init.dsebagian besar hanya pembungkus kompatibilitas yang memanggil orang-orang di /etc/init.
Ryan C. Thompson
1

Inilah solusi murahnya. Tambahkan baris berikut ke /etc/rc.local, sebelum exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Ryan C. Thompson
sumber
for i in /dev/ramzswap*;do ...akan solusi yang lebih baik saya pikir. Masih sedikit terlalu nakal di buku saya.
turbo
Bagaimana dengan find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Ini akan menyingkirkan masalah nama file aneh dengan baris baru di dalamnya.
Cbhihe
@turbo: barang lama di sini, tapi saya yakin jawaban Ryan di atas sebenarnya lebih umum dan lebih aman dari sudut pandang penulisan skrip daripada apa yang Anda usulkan dalam komentar Anda. Secara umum, tahun untuk loop dapat menyebabkan masalah untuk nama file dengan spasi dan atau karakter khusus. Dikatakan bahwa Anda memang mengampuni sistem Anda dari suatu proses.
Cbhihe
1

Langsung dari wiki Debian. Bagi saya, ini yang paling mudah.

Pertama, salin dan tempel kode ini ke /etc/init.d/zram

### BEGIN INIT INFO
# Provides:          zram
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:      0 1 6
# Short-Description: Use compressed RAM as in-memory swap
# Description:       Use compressed RAM as in-memory swap
### END INIT INFO

# Author: Antonio Galea <[email protected]>
# Thanks to Przemysław Tomczyk for suggesting swapoff parallelization

FRACTION=75

MEMORY=`perl -ne'/^MemTotal:\s+(\d+)/ && print $1*1024;' < /proc/meminfo`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$(( MEMORY * FRACTION / 100 / CPUS ))

case "$1" in
  "start")
    param=`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '`
    modprobe zram $param=$CPUS
    for n in `seq $CPUS`; do
      i=$((n - 1))
      echo $SIZE > /sys/block/zram$i/disksize
      mkswap /dev/zram$i
      swapon /dev/zram$i -p 10
    done
    ;;
  "stop")
    for n in `seq $CPUS`; do
      i=$((n - 1))
      swapoff /dev/zram$i && echo "disabled disk $n of $CPUS" &
    done
    wait
    sleep .5
    modprobe -r zram
    ;;
  *)
    echo "Usage: `basename $0` (start | stop)"
    exit 1
    ;;
esac

Selanjutnya, jalankan dua perintah ini:

sudo chmod +x /etc/init.d/zram
sudo /etc/init.d/zram start

Akhirnya, untuk menambahkan zram saat startup:

sudo update-rc.d zram defaults

Selesai

mchid
sumber