summaryrefslogtreecommitdiffstats
path: root/external/meta-openembedded/meta-oe/recipes-extended/zram/zram
diff options
context:
space:
mode:
Diffstat (limited to 'external/meta-openembedded/meta-oe/recipes-extended/zram/zram')
-rw-r--r--external/meta-openembedded/meta-oe/recipes-extended/zram/zram/dev-zram0.swap10
-rwxr-xr-xexternal/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-deinit19
-rwxr-xr-xexternal/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-init26
-rw-r--r--external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap.service10
-rw-r--r--external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service12
-rw-r--r--external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zramstop5
6 files changed, 70 insertions, 12 deletions
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/dev-zram0.swap b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/dev-zram0.swap
new file mode 100644
index 00000000..05eae7ee
--- /dev/null
+++ b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/dev-zram0.swap
@@ -0,0 +1,10 @@
+[Unit]
+Description=Enable compressed swap in memory using zram
+Requires=zram-swap.service
+After=zram-swap.service
+
+[Swap]
+What=/dev/zram0
+
+[Install]
+WantedBy=swap.target
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-deinit b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-deinit
new file mode 100755
index 00000000..46248c40
--- /dev/null
+++ b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-deinit
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+
+device=$1
+if [ "$device" = "" ]; then
+ echo "Usage: zram-swap-deinit <device>"
+ exit 1
+fi
+
+sysblockdev=/sys/block/$(basename $device)
+if [ ! -d $sysblockdev ]; then
+ echo "Block device not found in sysfs"
+ exit 1
+fi
+
+# zramctl -r is not suitable as it also removes the actual device. Recreating
+# it is non-trivial, especially if not /dev/zram0 is used...
+echo 1 > ${sysblockdev}/reset
+
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-init b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-init
new file mode 100755
index 00000000..0643dbca
--- /dev/null
+++ b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap-init
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+device=$1
+if [ "$device" = "" ]; then
+ echo "Usage: zram-swap-init <device>"
+ exit 1
+fi
+
+# Allocate zram to be size of actual system memory
+# Note: zram is only allocated when used. When swapped pages compress with a
+# a 2:1 ratio zram will require 50% of system memory (while allowing to use
+# 150% memory).
+ZRAM_SIZE_PERCENT=100
+ZRAM_ALGORITHM=lz4
+
+[ -f /etc/default/zram ] && ./etc/default/zram || true
+
+memtotal=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ')
+memzram=$(($memtotal*${ZRAM_SIZE_PERCENT}/100))
+
+# Try loading zram module
+modprobe -q zram || true
+
+zramctl -a ${ZRAM_ALGORITHM} -s ${memzram}KB $device
+mkswap -L "zram-swap" $device
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap.service b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap.service
new file mode 100644
index 00000000..a4dc9514
--- /dev/null
+++ b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram-swap.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Create compressed swap in memory using zram
+DefaultDependencies=no
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+TimeoutStartSec=30sec
+ExecStart=@LIBEXECDIR@/zram-swap-init /dev/zram0
+ExecStop=@LIBEXECDIR@/zram-swap-deinit /dev/zram0
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service
deleted file mode 100644
index 4a19367d..00000000
--- a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zram.service
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=Enable zram compressed in-memory swap.
-After=multi-user.target
-
-[Service]
-RemainAfterExit=yes
-ExecStart=/usr/bin/zram-load.sh --load
-ExecStop=/usr/bin/zram-load.sh --unload
-Type=oneshot
-
-[Install]
-WantedBy=multi-user.target
diff --git a/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zramstop b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zramstop
new file mode 100644
index 00000000..07777978
--- /dev/null
+++ b/external/meta-openembedded/meta-oe/recipes-extended/zram/zram/zramstop
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+for i in $(grep '^/dev/zram' /proc/swaps | awk '{ print $1 }'); do
+ swapoff "$i" && zramctl --reset "$i"
+done