zram-swap: fix number of created zram devices for multicore CPU's
authorEmil Muratov <gpm@hotplug.ru>
Wed, 1 Aug 2018 21:50:00 +0000 (00:50 +0300)
committerJo-Philipp Wich <jo@mein.io>
Tue, 18 Dec 2018 16:22:05 +0000 (17:22 +0100)
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 814cae7362c3bd57e8fd9305d5d0b48ff219d4d0)

package/system/zram-swap/files/zram.init [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 1eba3f4..2db986f
@@ -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" ] || {
                logger -s -t zram_applicable -p daemon.crit "[ERROR] device '$zram_dev' not found"
                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()
 {
 
 zram_dev()
 {
-       local core="$1"
-
-       echo "/dev/zram${core:-0}"
+       local idx="$1"
+       echo "/dev/zram${idx:-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()
 {
        local dev="$1"
 zram_comp_algo()
 {
        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 {
-               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()
 }
 
 stop()