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>
(backported from 814cae7362)
This commit is contained in:
Emil Muratov 2018-08-02 00:50:00 +03:00 committed by Jo-Philipp Wich
parent 9a5509736a
commit 2d4b52707d

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

@ -26,11 +26,6 @@ zram_applicable()
{
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" ] || {
logger -s -t zram_applicable -p daemon.crit "[ERROR] device '$zram_dev' not found"
return 1
@ -54,9 +49,8 @@ zram_applicable()
zram_dev()
{
local core="$1"
echo "/dev/zram${core:-0}"
local idx="$1"
echo "/dev/zram${idx:-0}"
}
zram_reset()
@ -69,6 +63,19 @@ zram_reset()
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()
{
local dev="$1"
@ -86,49 +93,26 @@ zram_comp_algo()
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()
{
# 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_dev core
local zram_dev
for core in $( list_cpu_idx ); do {
zram_dev="$( zram_dev "$core" )"
zram_applicable "$zram_dev" || return 1
if [ $( grep -cs zram /proc/swaps ) -ne 0 ]; then
logger -s -t zram_start -p daemon.notice "[OK] zram swap is already mounted"
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"
echo $(( zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
zram_comp_algo "$zram_dev"
mkswap "$zram_dev"
swapon "$zram_dev"
} done
logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)"
zram_reset "$zram_dev" "enforcing defaults"
zram_comp_algo "$zram_dev"
echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
mkswap "$zram_dev"
swapon "$zram_dev"
}
stop()