Wie kann ein komprimierter RAM-Austausch dauerhaft aktiviert werden? Welche Version soll verwendet werden?

11

EDIT: Genau das gibt es jetzt zram-config. Es ist ein Anfängerjob, der bis zur Hälfte Ihres RAMs komprimiert, verteilt auf $ (Anzahl der CPU-Kerne) Swap-Geräte. Es hat nicht immer beim Booten angefangen, sondern sudo service zram-config startfunktioniert.

Ich habe compcache = "256 M" /etc/initramfs-tools/initramfs.confwie hier beschrieben aktiviert (von mir: P). Dies - glaube ich - schafft, /dev/ramzswap0aber es wird nie als Tausch aktiviert. Es funktioniert nur nach mkswap&& swapon.

Dann gibt es das Modul zram, das erstellt /dev/zram. Ist es etwas anderes? Es funktioniert genauso, wird aber /dev/ramzswapaus dem Modul ramzswap erstellt.

Am Ende des Tages möchte ich einen komprimierten RAM-Tausch haben und den besseren der beiden verwenden, und dafür muss ich wissen, wie ich ihn dauerhaft auf nicht hackige Weise aktivieren kann. Wie wird das gemacht?

Ich habe hier in Lucid über Ramzswap geschrieben , aber in Natty haben sich die Dinge geändert. Sie können ramzswap weiterhin in initramfs.conf aktivieren, es wird jedoch nicht aktiviert.

PS: Ich habe alle udev-Regeln in / lib und / etc gescannt, aber nichts Interessantes gefunden.

Turbo
quelle

Antworten:

2

Es gibt jetzt eine PPA, die ein geeignetes Upstart-Skript installiert, um zram beim Booten zu aktivieren. Es wählt die richtige Größe und Anzahl der komprimierten Swap-Geräte für Ihr System.

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

Ryan C. Thompson
quelle
2
es gibt jetzt auch zram-config genau.
Turbo
Warum wurde es aus Raring 13.04 entfernt?
NoBugs
Die PPA wurde wahrscheinlich nicht aktualisiert.
Ryan C. Thompson
2

Ich hatte mit dem gleichen Problem zu kämpfen.

Heute habe ich einen ausgezeichneten Blog-Beitrag darüber gefunden. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Obwohl "sudo start zramswap" nicht funktionierte, löste es mein Problem perfekt, als ich meinen PC neu startete.

Versuch es.

Shunsuke Watanabe
quelle
Das ist eigentlich das erste Mal, dass ich überhaupt bemerkt habe, dass es / etc / init / gibt. Normalerweise benutze ich /etc/init.d/, um Sachen beim Booten zu starten. Faszinierend ...
Turbo
/etc/init/Hier leben Upstart-Init-Skripte. Die in /etc/init.dsind meistens nur Kompatibilitäts-Wrapper, die die in aufrufen /etc/init.
Ryan C. Thompson
1

Hier ist die billige Lösung. Fügen Sie die folgende Zeile hinzu /etc/rc.local, bevor das exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Ryan C. Thompson
quelle
for i in /dev/ramzswap*;do ...wäre die bessere lösung denke ich. Immer noch ein bisschen zu hackig in meinem Buch.
Turbo
Wie wäre es find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Es wird das Problem des seltsamen Dateinamens mit Zeilenumbruch vermeiden.
Cbhihe
@turbo: altes Zeug hier, aber ich glaube, dass Ryans Antwort oben unter dem Gesichtspunkt der Skripterstellung allgemeiner und sicherer ist als das, was Sie in Ihrem Kommentar vorschlagen. Im Allgemeinen kann yr for loop Probleme mit Dateinamen mit Leerzeichen und / oder Sonderzeichen verursachen. Dies bedeutet, dass Sie Ihrem System einen Prozess ersparen.
Cbhihe
1

Direkt aus dem Debian-Wiki. Für mich ist das am einfachsten.

Kopieren Sie zunächst diesen Code und fügen Sie ihn in /etc/init.d/zram ein

### 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

Führen Sie als Nächstes diese beiden Befehle aus:

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

Zum Schluss, um zram beim Start hinzuzufügen:

sudo update-rc.d zram defaults

Erledigt.

mchid
quelle