Jak na stałe włączyć skompresowaną zamianę pamięci RAM? Jakiej wersji użyć?

11

EDYCJA: Dokładnie teraz jest zram-config. To kompromisowe zadanie polegające na kompresji nawet połowy pamięci RAM w urządzeniach wymiany ($ rdzeni procesora). Nie zawsze zaczynało się od rozruchu, ale wydawanie sudo service zram-config startdziała.

Włączyłem compcache = "256 M" w /etc/initramfs-tools/initramfs.confsposób opisany tutaj (przeze mnie: P). To - wierzę - tworzy, /dev/ramzswap0ale nigdy nie jest włączone jako zamiana. Działa tylko po mkswap&& swapon.

Następnie jest moduł zram, który tworzy /dev/zram. Czy to coś innego? Działa tak samo, ale /dev/ramzswapjest tworzony z modułu ramzswap.

Na koniec dnia chcę mieć skompresowaną zamianę pamięci RAM i skorzystać z lepszej z nich dwóch i do tego muszę wiedzieć, jak włączyć ją na stałe w niehackerski sposób. Jak to się robi?

Pisałem o ramzswap w Lucid tutaj, ale rzeczy się zmieniły u Natty. Nadal możesz włączyć ramzswap w initramfs.conf, ale nie zostanie aktywowany.

PS: Przeskanowałem wszystkie reguły udev w / lib i / etc, ale nie znalazłem niczego interesującego.

turbo
źródło

Odpowiedzi:

2

Jest teraz PPA, który instaluje odpowiedni skrypt Upstart do włączania zram podczas rozruchu. Wybiera odpowiedni rozmiar i liczbę skompresowanych urządzeń wymiany dla twojego systemu.

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

Ryan C. Thompson
źródło
2
istnieje też teraz dokładnie zram-config.
turbo
Dlaczego został usunięty z Raring 13.04?
NoBugs
Umowa PPA prawdopodobnie nie została zaktualizowana.
Ryan C. Thompson,
2

Walczyłem z tym samym problemem.

Dzisiaj znalazłem świetny wpis na blogu na ten temat. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Chociaż „sudo start zramswap” nie działało, kiedy ponownie uruchomiłem komputer, rozwiązało to mój problem.

Spróbuj.

Shunsuke Watanabe
źródło
To właściwie pierwszy raz, kiedy zauważyłem, że jest / etc / init /. Zwykle używam /etc/init.d/ do uruchamiania rzeczy podczas rozruchu. Fascynujące ...
turbo
/etc/init/to tam, gdzie mieszkają skrypty inicjujące Upstart. Te w /etc/init.dsą przeważnie tylko opakowaniami kompatybilności, które wywołują te w /etc/init.
Ryan C. Thompson
1

Oto tanie rozwiązanie. Dodaj następujący wiersz /etc/rc.localprzed exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Ryan C. Thompson
źródło
for i in /dev/ramzswap*;do ...myślę, że byłoby to lepsze rozwiązanie. W mojej książce wciąż jest odrobinę zbyt hackerska.
turbo
Jak o find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Pozwoli to uniknąć problemu z dziwną nazwą pliku z nową linią.
Cbhihe
@turbo: stare rzeczy tutaj, ale uważam, że powyższa odpowiedź Ryana jest w rzeczywistości bardziej ogólna i bezpieczniejsza z punktu widzenia skryptów niż to, co proponujesz w komentarzu. Mówiąc ogólnie, yr for loop może powodować problemy z nazwami plików ze spacją i / lub znakami specjalnymi. Mówi się, że oszczędzasz systemowi proces.
Cbhihe
1

Prosto z wiki Debiana. Dla mnie to jest najłatwiejsze.

Najpierw skopiuj i wklej ten kod do /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

Następnie wykonaj te dwa polecenia:

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

Na koniec, aby dodać zram podczas uruchamiania:

sudo update-rc.d zram defaults

Gotowe.

mchid
źródło