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:
parent
9edc1fe8ab
commit
814cae7362
1 changed files with 29 additions and 45 deletions
62
package/system/zram-swap/files/zram.init
Normal file → Executable file
62
package/system/zram-swap/files/zram.init
Normal file → Executable 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" )"
|
||||
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
|
||||
|
||||
zram_dev="$( zram_getdev )"
|
||||
zram_applicable "$zram_dev" || return 1
|
||||
|
||||
logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)"
|
||||
|
||||
zram_reset "$zram_dev" "enforcing defaults"
|
||||
echo $(( zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
|
||||
zram_comp_algo "$zram_dev"
|
||||
echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize"
|
||||
mkswap "$zram_dev"
|
||||
swapon "$zram_dev"
|
||||
} done
|
||||
}
|
||||
|
||||
stop()
|
||||
|
|
Loading…
Reference in a new issue