Raspberry PI

Unter Linux ist es möglich zram als swap Speicher einzuschalten.

Der Vorteil ist dabei, dass kein Swapfile mehr auf die SD Karte zugreift und somit die Lebenszeit dieser Karte verkürzt.

 

Mit folgendem Befehl kann das zram eingeschaltet werden:

modprobe zram

 

Mit folgendem Befehl kann überprüft werden ob das Modul erfolgrei geladen werden konnte:

lsmod | grep zram

 


Die Ausgabe sieht dann z.B. so aus:

zram                    9338  1
zsmalloc                8107  1 zram
lzo_compress            2179  1 zram
lzo_decompress          2372  1 zram

Zum Starten währendes Bootvorgangs benötigt man noch ein init Skript

 

/etc/init.d/zram:

#!/bin/bash
### BEGIN INIT INFO
# Provides: zram
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)
# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram
### END INIT INFO

start() {
    # 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))

    sleep 2
    # 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
    modprobe zram

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

stop() {
    # 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
    sleep 1
    fi
    done

    sleep 1
    rmmod zram
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        RETVAL=1
esac



Das Skript wir nun noch in die entsprechenden runlevel eingetragen und nach einem Neustart läuft das ZRAM Modul.

sudo update-rc.d zram enable

Schaltet das Zram beim booten ein.

 

Nun sollte noch das Swapfile abgeschlaten werden.

Dies geht mit folgendem Befehl:

sudo update-rc.d dphys-swapfile disable

 

 

 

Zum überprüfen ob alles geklappt hat, kann man folgendes eingeben:

#swapon -s
Ausgabe:
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       383748  0       100



Zurück