#!/bin/sh
start() {
cpus=$(ls -ld /sys/devices/system/cpu/cpu[0-9]* 2>/dev/null| grep -cEw 'cpu[0-9]+')
exec awk -v cpus=$cpus '
FILENAME == "/proc/cpuinfo" && $1 == "processor" {
cpucount++
next
}
FILENAME == "/proc/meminfo" && $1 == "MemTotal:" {
mem_total = (0 + $2) * 1024
next
}
END {
if (cpucount == 0){
if (cpus == 0) {
cpus = 1;
print "Warning no CPUs detected, defaulting to 1 CPU"
}
cpucount = cpus
}
mem_per_cpu = sprintf("%d", mem_total / cpucount)
system("modprobe zram num_devices=" cpucount)
for (i = 0; i < cpucount; i++) {
print mem_per_cpu > "/sys/block/zram" i "/disksize"
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