mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-08-11 01:13:10 +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:
parent
2582668a34
commit
501df47c33
10
meta-oe/recipes-extended/zram/zram/dev-zram0.swap
Normal file
10
meta-oe/recipes-extended/zram/zram/dev-zram0.swap
Normal file
@ -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
meta-oe/recipes-extended/zram/zram/zram-swap-deinit
Executable file
19
meta-oe/recipes-extended/zram/zram/zram-swap-deinit
Executable file
@ -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
meta-oe/recipes-extended/zram/zram/zram-swap-init
Executable file
26
meta-oe/recipes-extended/zram/zram/zram-swap-init
Executable file
@ -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
|
||||
10
meta-oe/recipes-extended/zram/zram/zram-swap.service
Normal file
10
meta-oe/recipes-extended/zram/zram/zram-swap.service
Normal file
@ -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
|
||||
5
meta-oe/recipes-extended/zram/zram/zramstop
Normal file
5
meta-oe/recipes-extended/zram/zram/zramstop
Normal file
@ -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"
|
||||
50
meta-oe/recipes-extended/zram/zram_0.2.bb
Normal file
50
meta-oe/recipes-extended/zram/zram_0.2.bb
Normal file
@ -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"
|
||||
Loading…
x
Reference in New Issue
Block a user