ubuntuusers.de

ubuntuusers.deWikizRam

zRam

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Oxygen/media-flash.png Gerade auf Systemen mit wenig Arbeitsspeicher kommt es hin und wieder vor, dass dieser knapp wird und das System beginnt, den Swap-Speicher zu nutzen. Da sich dieser auf der Festplatte befindet, ist er im Vergleich zum RAM relativ langsam. Der Nutzer merkt das in Form von langsamen Programmen, springenden Mauszeigern oder einem komplett ausgelasteten System.

Abhilfe schafft eine im Linux-Kernel integrierte Technik: zRam {en} (Virtual Swap Compressed in RAM, früher als "compcache" bekannt). Nutzt man diese Technik, so wird ein komprimiertes Blockgerät direkt im Arbeitsspeicher des Computers erstellt. Auf diese Art können mehr Daten im Arbeitsspeicher gehalten werden. Dies führt dazu, dass das System nicht so schnell auf eine langsame Festplatte schreiben muss.

Für wen ist zRam geeignet?

Grundsätzlich für jeden. Jedoch macht es kaum bis wenig Sinn, es auf Computern mit 4 GiB oder mehr Arbeitsspeicher zu aktivieren. Diese Computer besitzen ausreichend Speicher und müssen deshalb sehr selten (oder gar nicht) in den Swap schreiben. Aber mit weniger Speicher ist zRam einen Versuch wert. Positive Berichte liegen für Systeme mit 512 MiB bis 2 GiB RAM vor. Wie der Swap-Speicher genutzt wird, kann man vorher mittels Swap überwachen herausbekommen.

Einzige Voraussetzung ist ein Kernel ab 2.6.37 oder neuer. Wer sich unsicher ist, welche Kernel-Version vorhanden ist, benutzt den Befehl [1]:

uname -r 

Installation

Die Installation kann auf zwei Wegen erfolgen: entweder man erstellt die benötigte Datei /etc/init/zramswap.conf selbst oder nutzt ein "Personal Package Archiv" (PPA).

Manuell

Das Team des Elementary OS {en} hat hierfür ein Upstart-Script erstellt, das zRam auf einfache Weise aktiviert. Man markiert den folgenden Textblock, kopiert ihn, öffnet einen Editor [2] mit Root-Rechten [3] und fügt ihn wieder ein:

description "Initializes zram swapping"

start on runlevel [2345]
stop on runlevel [!2345]

pre-start script

# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)
# if something goes wrong, assume we have 1
[ "$num_cpus" != 0 ] || num_cpus=1

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# get the amount of memory in the machine
mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+')
mem_total=$((mem_total_kb * 1024))

# load dependency modules
modprobe zram num_devices=$num_cpus

# initialize the devices
for i in $(seq 0 $decr_num_cpus); do
echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize
done

# Creating swap filesystems
for i in $(seq 0 $decr_num_cpus); do
mkswap /dev/zram$i
done

# Switch the swaps on
for i in $(seq 0 $decr_num_cpus); do
swapon -p 100 /dev/zram$i
done
end script

post-stop script

# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# Switching off swap
for i in $(seq 0 $decr_num_cpus); do
if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then
swapoff /dev/zram$i
fi
done

rmmod zram
end script

Ab Ubuntu 12.04 muss folgendes Skript verwendet werden:

description "Initializes zram swapping"

start on runlevel [2345]
stop on runlevel [!2345]

pre-start script

# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)
# if something goes wrong, assume we have 1
[ "$num_cpus" != 0 ] || num_cpus=1

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# get the amount of memory in the machine
mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+')
mem_total=$((mem_total_kb * 1024))

# load dependency modules
modprobe zram zram_num_devices=$num_cpus

# initialize the devices
for i in $(seq 0 $decr_num_cpus); do
echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize
done

# Creating swap filesystems
for i in $(seq 0 $decr_num_cpus); do
mkswap /dev/zram$i
done

# Switch the swaps on
for i in $(seq 0 $decr_num_cpus); do
swapon -p 100 /dev/zram$i
done
end script

post-stop script

# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# Switching off swap
for i in $(seq 0 $decr_num_cpus); do
if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then
swapoff /dev/zram$i
fi
done

rmmod zram
end script

Nun speichert man die Datei als /etc/init/zramswap.conf ab. Nach einem Neustart aktiviert es sich dann von selbst.

PPA

Ein Mitglied des Elementary OS-Teams bietet alternativ ein PPA für Ubuntu 11.04 oder neuer an. Dieses muss zuerst aktiviert werden [4].

Adresszeile zum Hinzufügen des PPAs:

  • ppa:shnatsel/zram

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Weitere Informationen bietet die Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung vom Benutzer/Team shnatsel.

Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.

Nach dem Aktualisieren der Paketquellen kann nun das folgende Paket installiert [5] werden:

  • zramswap-enabler (ppa)

Wiki/Vorlagen/Installbutton/button.png

Nach einem Neustart wird es automatisch genutzt.

Deinstallieren

Hat man es manuell installiert, braucht nur die Datei /etc/init/zramswap.conf mit Root-Rechten [3] gelöscht werden.

Nutzt man das PPA, so kann das Paket zramswap-enabler über die Paketverwaltung deinstalliert werden.

Problembehandlung

Grafikfehler

In einigen Artikeln wird gesagt, dass es mit manchen Grafikkarten (und -Treibern) zu Problemen kommen kann. Sollte dies der Fall sein, ist zRam wieder zu entfernen.

Doppelt so viel Swapspeicher nach Installation

Das ist ganz normal, da zRam sich als Swap hinzufügt. Den "alten" Swap sollte man jedoch nicht entfernen, da er z.B. für den Ruhezustand genutzt wird.

Diese Revision wurde am 29. April 2012 17:54 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Tuning, System

Passwort vergessen?