mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-04 14:39:54 +00:00
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>
This commit is contained in:
@@ -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
|
||||
+19
@@ -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
|
||||
|
||||
+26
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
for i in $(grep '^/dev/zram' /proc/swaps | awk '{ print $1 }'); do
|
||||
swapoff "$i" && zramctl --reset "$i"
|
||||
done
|
||||
@@ -1,33 +0,0 @@
|
||||
SUMMARY = "Linux zram compressed in-memory swap"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
|
||||
|
||||
inherit update-rc.d systemd
|
||||
|
||||
RDEPENDS_${PN} = "util-linux-swaponoff kmod"
|
||||
RRECOMMENDS_${PN} = "kernel-module-zram"
|
||||
|
||||
PR = "r3"
|
||||
|
||||
SRC_URI = " \
|
||||
file://init \
|
||||
file://zram.service \
|
||||
"
|
||||
|
||||
do_install () {
|
||||
# Sysvinit
|
||||
install -d ${D}${sysconfdir}/init.d
|
||||
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/zram
|
||||
|
||||
install -d ${D}${systemd_unitdir}/system
|
||||
install -m 0644 ${WORKDIR}/zram.service ${D}${systemd_unitdir}/system
|
||||
}
|
||||
|
||||
FILES_${PN} = "${sysconfdir}"
|
||||
INITSCRIPT_NAME = "zram"
|
||||
INITSCRIPT_PARAMS = "start 05 2 3 4 5 . stop 22 0 1 6 ."
|
||||
|
||||
RPROVIDES_${PN} += "${PN}-systemd"
|
||||
RREPLACES_${PN} += "${PN}-systemd"
|
||||
RCONFLICTS_${PN} += "${PN}-systemd"
|
||||
SYSTEMD_SERVICE_${PN} = "zram.service"
|
||||
@@ -0,0 +1,50 @@
|
||||
SUMMARY = "Linux zram compressed in-memory swap"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
|
||||
|
||||
inherit update-rc.d systemd
|
||||
|
||||
RDEPENDS_${PN} = "kmod \
|
||||
${@bb.utils.contains('DISTRO_FEATURES','systemd','util-linux','util-linux-swaponoff',d)}"
|
||||
RRECOMMENDS_${PN} = "kernel-module-zram"
|
||||
|
||||
PR = "r3"
|
||||
|
||||
SRC_URI = " \
|
||||
file://init \
|
||||
file://zram-swap-init \
|
||||
file://zram-swap-deinit \
|
||||
file://zram-swap.service \
|
||||
file://dev-zram0.swap \
|
||||
"
|
||||
|
||||
do_install () {
|
||||
# Install systemd related configuration file
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
|
||||
install -d ${D}${sysconfdir}/init.d
|
||||
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/zram
|
||||
fi
|
||||
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||
install -d ${D}${libexecdir}
|
||||
install -m 0755 ${WORKDIR}/zram-swap-init ${D}${libexecdir}
|
||||
install -m 0755 ${WORKDIR}/zram-swap-deinit ${D}${libexecdir}
|
||||
install -d ${D}${systemd_unitdir}/system
|
||||
install -m 0644 ${WORKDIR}/zram-swap.service ${D}${systemd_unitdir}/system/zram-swap.service
|
||||
sed -i -e "s,@LIBEXECDIR@,${libexecdir},g" ${D}${systemd_unitdir}/system/zram-swap.service
|
||||
install -m 0644 ${WORKDIR}/dev-zram0.swap ${D}${systemd_unitdir}/system/dev-zram0.swap
|
||||
fi
|
||||
}
|
||||
|
||||
FILES_${PN} = " \
|
||||
${sysconfdir} \
|
||||
${systemd_unitdir} \
|
||||
${libexecdir} \
|
||||
"
|
||||
INITSCRIPT_NAME = "zram"
|
||||
INITSCRIPT_PARAMS = "start 05 2 3 4 5 . stop 22 0 1 6 ."
|
||||
|
||||
RPROVIDES_${PN} += "${PN}-systemd"
|
||||
RREPLACES_${PN} += "${PN}-systemd"
|
||||
RCONFLICTS_${PN} += "${PN}-systemd"
|
||||
SYSTEMD_SERVICE_${PN} = "dev-zram0.swap"
|
||||
Reference in New Issue
Block a user