51 lines
1.1 KiB
Bash
Executable file
51 lines
1.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
|
|
start() {
|
|
exec awk -v ZRAM_SIZE=$ZRAM_SIZE -v ZRAM_PARM="$(modinfo zram | grep -E -o '(num_devices|zram_num_devices)')" '
|
|
|
|
FILENAME == "/proc/cpuinfo" && ($1 == "processor" || $1 == "Processor") {
|
|
cpucount++
|
|
next
|
|
}
|
|
|
|
FILENAME == "/proc/meminfo" && $1 == "MemTotal:" {
|
|
if (ZRAM_SIZE == "")
|
|
ZRAM_SIZE = 20
|
|
mem_total = int( (0 + $2) * 1024 * ( ZRAM_SIZE/100 ) )
|
|
next
|
|
}
|
|
|
|
END {
|
|
mem_per_cpu = int(mem_total / cpucount)
|
|
|
|
system("modprobe zram "ZRAM_PARM"=" cpucount)
|
|
|
|
for (i = 0; i < cpucount; i++) {
|
|
print mem_per_cpu > "/sys/block/zram" i "/disksize"
|
|
print "lz4" > "/sys/block/zram" i "/comp_algorithm"
|
|
system("mkswap /dev/zram" i " -L zram" i)
|
|
swapdevs = swapdevs " /dev/zram" i
|
|
}
|
|
|
|
system("swapon -p 100" swapdevs)
|
|
}
|
|
' /proc/cpuinfo /proc/meminfo
|
|
}
|
|
|
|
stop() {
|
|
exec awk '
|
|
FNR > 1 && $1 ~ /^\/dev\/zram[0-9]+$/ {
|
|
activeswaps = activeswaps " " $1
|
|
}
|
|
|
|
END {
|
|
system("swapoff" activeswaps)
|
|
system("rmmod zram")
|
|
}
|
|
' /proc/swaps
|
|
}
|
|
|
|
case $1 in
|
|
start|stop) "$1" ;;
|
|
esac
|