From 03eef509e4aa5aae05326410fb9f9fdfcf433f48 Mon Sep 17 00:00:00 2001 From: David-John Willis Date: Tue, 24 Apr 2012 13:56:05 +0100 Subject: rpi-zram-service: Add little systemd service to enable zram on the RPi. * Needs to move to something more generic in time. --- recipes-core/systemd/rpi-zram-service.bb | 30 ++++++++++++++++++ .../systemd/rpi-zram-service/rpi-load-zram.sh | 36 ++++++++++++++++++++++ .../systemd/rpi-zram-service/rpi-zram.service | 12 ++++++++ 3 files changed, 78 insertions(+) create mode 100644 recipes-core/systemd/rpi-zram-service.bb create mode 100644 recipes-core/systemd/rpi-zram-service/rpi-load-zram.sh create mode 100644 recipes-core/systemd/rpi-zram-service/rpi-zram.service diff --git a/recipes-core/systemd/rpi-zram-service.bb b/recipes-core/systemd/rpi-zram-service.bb new file mode 100644 index 0000000..f9e1e9c --- /dev/null +++ b/recipes-core/systemd/rpi-zram-service.bb @@ -0,0 +1,30 @@ +DESCRIPTION = "Linux zram compressed in-memory swap systemd service" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58" + +inherit allarch systemd + +PR = "r0" + +SRC_URI = "file://rpi-zram.service \ + file://rpi-load-zram.sh \ + " + +do_compile() { + : +} + + +do_install () { + install -d ${D}/${bindir} + + install -m 0755 ${WORKDIR}/rpi-load-zram.sh ${D}/${bindir} + + install -d ${D}/${base_libdir}/systemd/system + install -m 0644 ${WORKDIR}/rpi-zram.service ${D}/${base_libdir}/systemd/system/ +} + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "rpi-zram.service" + +FILES_${PN} += "${base_libdir}/systemd" diff --git a/recipes-core/systemd/rpi-zram-service/rpi-load-zram.sh b/recipes-core/systemd/rpi-zram-service/rpi-load-zram.sh new file mode 100644 index 0000000..984dcd1 --- /dev/null +++ b/recipes-core/systemd/rpi-zram-service/rpi-load-zram.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +num_cpus=$(grep -c processor /proc/cpuinfo) +[ "$num_cpus" != 0 ] || num_cpus=1 + +last_cpu=$((num_cpus - 1)) + +mem_by_cpu=$(awk -v cpus=$num_cpus '/MemTotal/ { print (($2 * 1024) / cpus) }' /proc/meminfo) + +if [ "$1" = "--load" ] ; then + echo zram: Trying to load kernel module. + + # Linux 3.2 workaround - value name changed :o. + # modprobe -q zram zram_num_devices=$num_cpus + + # Linux < 3.2. + modprobe -q zram num_devices=$num_cpus + + echo zram: Enable in-memory compressed swap of $mem_by_cpu bytes. + for i in $(seq 0 $last_cpu); do + echo $mem_by_cpu > /sys/block/zram$i/disksize + mkswap /dev/zram$i + swapon -p 100 /dev/zram$i + done +fi + +if [ "$1" = "--unload" ] ; then + echo zram: Disable in-memory compressed swap. + for i in $(seq 0 $last_cpu); do + grep -q "/dev/zram$i" /proc/swaps && swapoff /dev/zram$i + done + + sleep 1 + echo zram: Unload kernel module. + rmmod zram +fi diff --git a/recipes-core/systemd/rpi-zram-service/rpi-zram.service b/recipes-core/systemd/rpi-zram-service/rpi-zram.service new file mode 100644 index 0000000..007dfcc --- /dev/null +++ b/recipes-core/systemd/rpi-zram-service/rpi-zram.service @@ -0,0 +1,12 @@ +[Unit] +Description=Enable zram compressed in-memory swap. +After=multi-user.target + +[Service] +RemainAfterExit=yes +ExecStart=/usr/bin/rpi-load-zram.sh --load +ExecStop=/usr/bin/rpi-load-zram.sh --unload +Type=oneshot + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3-54-g00ecf