summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2019-10-06 23:00:32 +0200
committerKhem Raj <raj.khem@gmail.com>2019-10-06 18:44:20 -0700
commit501df47c331e851925f1965b547e4d888a89555d (patch)
treebb0ffab1f5b10aa3c3713a55f64203c27ca51497
parent2582668a348b6fcd1377b762ca26a05fb6d14b9d (diff)
downloadmeta-openembedded-501df47c331e851925f1965b547e4d888a89555d.tar.gz
zram: properly implement systemd service
The systemd service points ot a script which is not installed by zram or any of its dependencies. It seems that the service got migrated without the necessary script. The sysvinit script seems rather dated and initializes multiple zram instances to support multiprocessor systems. This is no longer necessary with modern implementations as newer kernel version support multiple streams by default. Create a modern implementation based on Fedoras zram package. Make use of systemd swap unit files instead of enabling swap directly. This removes the need for util-linux-swaponoff (since swap is now handled by systemd, which presumably depends on swaponoff). However, it adds the dependency to util-linux for zramctl. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-oe/recipes-extended/zram/zram/dev-zram0.swap10
-rwxr-xr-xmeta-oe/recipes-extended/zram/zram/zram-swap-deinit19
-rwxr-xr-xmeta-oe/recipes-extended/zram/zram/zram-swap-init26
-rw-r--r--meta-oe/recipes-extended/zram/zram/zram-swap.service10
-rw-r--r--meta-oe/recipes-extended/zram/zram/zram.service12
-rw-r--r--meta-oe/recipes-extended/zram/zram/zramstop5
-rw-r--r--meta-oe/recipes-extended/zram/zram_0.1.bb33
-rw-r--r--meta-oe/recipes-extended/zram/zram_0.2.bb50
8 files changed, 120 insertions, 45 deletions
diff --git a/meta-oe/recipes-extended/zram/zram/dev-zram0.swap b/meta-oe/recipes-extended/zram/zram/dev-zram0.swap
new file mode 100644
index 000000000..05eae7eed
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram/dev-zram0.swap
@@ -0,0 +1,10 @@
1[Unit]
2Description=Enable compressed swap in memory using zram
3Requires=zram-swap.service
4After=zram-swap.service
5
6[Swap]
7What=/dev/zram0
8
9[Install]
10WantedBy=swap.target
diff --git a/meta-oe/recipes-extended/zram/zram/zram-swap-deinit b/meta-oe/recipes-extended/zram/zram/zram-swap-deinit
new file mode 100755
index 000000000..46248c401
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram/zram-swap-deinit
@@ -0,0 +1,19 @@
1#!/bin/sh
2set -e
3
4device=$1
5if [ "$device" = "" ]; then
6 echo "Usage: zram-swap-deinit <device>"
7 exit 1
8fi
9
10sysblockdev=/sys/block/$(basename $device)
11if [ ! -d $sysblockdev ]; then
12 echo "Block device not found in sysfs"
13 exit 1
14fi
15
16# zramctl -r is not suitable as it also removes the actual device. Recreating
17# it is non-trivial, especially if not /dev/zram0 is used...
18echo 1 > ${sysblockdev}/reset
19
diff --git a/meta-oe/recipes-extended/zram/zram/zram-swap-init b/meta-oe/recipes-extended/zram/zram/zram-swap-init
new file mode 100755
index 000000000..0643dbca2
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram/zram-swap-init
@@ -0,0 +1,26 @@
1#!/bin/sh
2set -e
3
4device=$1
5if [ "$device" = "" ]; then
6 echo "Usage: zram-swap-init <device>"
7 exit 1
8fi
9
10# Allocate zram to be size of actual system memory
11# Note: zram is only allocated when used. When swapped pages compress with a
12# a 2:1 ratio zram will require 50% of system memory (while allowing to use
13# 150% memory).
14ZRAM_SIZE_PERCENT=100
15ZRAM_ALGORITHM=lz4
16
17[ -f /etc/default/zram ] && ./etc/default/zram || true
18
19memtotal=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ')
20memzram=$(($memtotal*${ZRAM_SIZE_PERCENT}/100))
21
22# Try loading zram module
23modprobe -q zram || true
24
25zramctl -a ${ZRAM_ALGORITHM} -s ${memzram}KB $device
26mkswap -L "zram-swap" $device
diff --git a/meta-oe/recipes-extended/zram/zram/zram-swap.service b/meta-oe/recipes-extended/zram/zram/zram-swap.service
new file mode 100644
index 000000000..a4dc9514e
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram/zram-swap.service
@@ -0,0 +1,10 @@
1[Unit]
2Description=Create compressed swap in memory using zram
3DefaultDependencies=no
4
5[Service]
6Type=oneshot
7RemainAfterExit=yes
8TimeoutStartSec=30sec
9ExecStart=@LIBEXECDIR@/zram-swap-init /dev/zram0
10ExecStop=@LIBEXECDIR@/zram-swap-deinit /dev/zram0
diff --git a/meta-oe/recipes-extended/zram/zram/zram.service b/meta-oe/recipes-extended/zram/zram/zram.service
deleted file mode 100644
index 4a19367d9..000000000
--- a/meta-oe/recipes-extended/zram/zram/zram.service
+++ /dev/null
@@ -1,12 +0,0 @@
1[Unit]
2Description=Enable zram compressed in-memory swap.
3After=multi-user.target
4
5[Service]
6RemainAfterExit=yes
7ExecStart=/usr/bin/zram-load.sh --load
8ExecStop=/usr/bin/zram-load.sh --unload
9Type=oneshot
10
11[Install]
12WantedBy=multi-user.target
diff --git a/meta-oe/recipes-extended/zram/zram/zramstop b/meta-oe/recipes-extended/zram/zram/zramstop
new file mode 100644
index 000000000..07777978e
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram/zramstop
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3for i in $(grep '^/dev/zram' /proc/swaps | awk '{ print $1 }'); do
4 swapoff "$i" && zramctl --reset "$i"
5done
diff --git a/meta-oe/recipes-extended/zram/zram_0.1.bb b/meta-oe/recipes-extended/zram/zram_0.1.bb
deleted file mode 100644
index dfd75e71c..000000000
--- a/meta-oe/recipes-extended/zram/zram_0.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
1SUMMARY = "Linux zram compressed in-memory swap"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
4
5inherit update-rc.d systemd
6
7RDEPENDS_${PN} = "util-linux-swaponoff kmod"
8RRECOMMENDS_${PN} = "kernel-module-zram"
9
10PR = "r3"
11
12SRC_URI = " \
13 file://init \
14 file://zram.service \
15"
16
17do_install () {
18 # Sysvinit
19 install -d ${D}${sysconfdir}/init.d
20 install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/zram
21
22 install -d ${D}${systemd_unitdir}/system
23 install -m 0644 ${WORKDIR}/zram.service ${D}${systemd_unitdir}/system
24}
25
26FILES_${PN} = "${sysconfdir}"
27INITSCRIPT_NAME = "zram"
28INITSCRIPT_PARAMS = "start 05 2 3 4 5 . stop 22 0 1 6 ."
29
30RPROVIDES_${PN} += "${PN}-systemd"
31RREPLACES_${PN} += "${PN}-systemd"
32RCONFLICTS_${PN} += "${PN}-systemd"
33SYSTEMD_SERVICE_${PN} = "zram.service"
diff --git a/meta-oe/recipes-extended/zram/zram_0.2.bb b/meta-oe/recipes-extended/zram/zram_0.2.bb
new file mode 100644
index 000000000..98c47af7a
--- /dev/null
+++ b/meta-oe/recipes-extended/zram/zram_0.2.bb
@@ -0,0 +1,50 @@
1SUMMARY = "Linux zram compressed in-memory swap"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
4
5inherit update-rc.d systemd
6
7RDEPENDS_${PN} = "kmod \
8 ${@bb.utils.contains('DISTRO_FEATURES','systemd','util-linux','util-linux-swaponoff',d)}"
9RRECOMMENDS_${PN} = "kernel-module-zram"
10
11PR = "r3"
12
13SRC_URI = " \
14 file://init \
15 file://zram-swap-init \
16 file://zram-swap-deinit \
17 file://zram-swap.service \
18 file://dev-zram0.swap \
19"
20
21do_install () {
22 # Install systemd related configuration file
23 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
24 install -d ${D}${sysconfdir}/init.d
25 install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/zram
26 fi
27
28 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
29 install -d ${D}${libexecdir}
30 install -m 0755 ${WORKDIR}/zram-swap-init ${D}${libexecdir}
31 install -m 0755 ${WORKDIR}/zram-swap-deinit ${D}${libexecdir}
32 install -d ${D}${systemd_unitdir}/system
33 install -m 0644 ${WORKDIR}/zram-swap.service ${D}${systemd_unitdir}/system/zram-swap.service
34 sed -i -e "s,@LIBEXECDIR@,${libexecdir},g" ${D}${systemd_unitdir}/system/zram-swap.service
35 install -m 0644 ${WORKDIR}/dev-zram0.swap ${D}${systemd_unitdir}/system/dev-zram0.swap
36 fi
37}
38
39FILES_${PN} = " \
40 ${sysconfdir} \
41 ${systemd_unitdir} \
42 ${libexecdir} \
43"
44INITSCRIPT_NAME = "zram"
45INITSCRIPT_PARAMS = "start 05 2 3 4 5 . stop 22 0 1 6 ."
46
47RPROVIDES_${PN} += "${PN}-systemd"
48RREPLACES_${PN} += "${PN}-systemd"
49RCONFLICTS_${PN} += "${PN}-systemd"
50SYSTEMD_SERVICE_${PN} = "dev-zram0.swap"