zram-swap: fix number of created zram devices for multicore CPU's

Use only one zram swap device of the specified $size instead of
[N x $size] devices for multicore CPUs Now zram module uses multiple
compression streams for each dev by default, so we do not need to create
several zram devs to utilize multicore CPUs.

Signed-off-by: Emil Muratov <gpm@hotplug.ru>
This commit is contained in:
Emil Muratov 2018-08-02 00:50:00 +03:00 committed by Hauke Mehrtens
parent 9edc1fe8ab
commit 814cae7362

74
package/system/zram-swap/files/zram.init Normal file → Executable file
View file

@ -26,11 +26,6 @@ zram_applicable()
{ {
local zram_dev="$1" local zram_dev="$1"
grep -sq ^"$zram_dev " /proc/swaps && {
logger -s -t zram_applicable -p daemon.notice "[OK] '$zram_dev' already active"
return 1
}
[ -e "$zram_dev" ] || { [ -e "$zram_dev" ] || {
logger -s -t zram_applicable -p daemon.crit "[ERROR] device '$zram_dev' not found" logger -s -t zram_applicable -p daemon.crit "[ERROR] device '$zram_dev' not found"
return 1 return 1
@ -54,9 +49,8 @@ zram_applicable()
zram_dev() zram_dev()
{ {
local core="$1" local idx="$1"
echo "/dev/zram${idx:-0}"
echo "/dev/zram${core:-0}"
} }
zram_reset() zram_reset()
@ -69,6 +63,19 @@ zram_reset()
echo "1" >"$proc_entry" echo "1" >"$proc_entry"
} }
zram_getdev()
{
#get unallocated zram dev
local zdev=$( zram_dev )
if [ "$(mount | grep $zdev)" ]; then
local idx=`cat /sys/class/zram-control/hot_add`
zdev="$( zram_dev $idx )"
fi
echo $zdev
}
zram_comp_algo() zram_comp_algo()
{ {
local dev="$1" local dev="$1"
@ -86,49 +93,26 @@ zram_comp_algo()
fi fi
} }
list_cpu_idx()
{
# Offset by 1 if /dev/zram0 is in use by /tmp
if mount | grep -q /dev/zram0; then
local line i=1
# Hot-add new ZRAM device (if necessary)
if [ ! -b /dev/zram1 ]; then
cat /sys/class/zram-control/hot_add
fi
else
local line i=0
fi
while read line; do {
case "$line" in
[Pp]rocessor*)
echo $i
i=$(( i + 1 ))
;;
esac
} done <"/proc/cpuinfo"
}
start() start()
{ {
# http://shmilyxbq-compcache.googlecode.com/hg/README
# if >1 cpu_core, reinit kmodule with e.g. num_devices=4
local zram_size="$( zram_size )" local zram_size="$( zram_size )"
local zram_dev core local zram_dev
for core in $( list_cpu_idx ); do { if [ $( grep -cs zram /proc/swaps ) -ne 0 ]; then
zram_dev="$( zram_dev "$core" )" logger -s -t zram_start -p daemon.notice "[OK] zram swap is already mounted"
zram_applicable "$zram_dev" || return 1 return 1
fi
logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)" zram_dev="$( zram_getdev )"
zram_applicable "$zram_dev" || return 1
zram_reset "$zram_dev" "enforcing defaults" logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)"
echo $(( zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
zram_comp_algo "$zram_dev" zram_reset "$zram_dev" "enforcing defaults"
mkswap "$zram_dev" zram_comp_algo "$zram_dev"
swapon "$zram_dev" echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
} done mkswap "$zram_dev"
swapon "$zram_dev"
} }
stop() stop()