Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # vim:ts=4:sw=4:et
- NRDEVICES=$(grep -w ^processor /proc/cpuinfo | wc -l) # Creates a zram swap for each processor
- MEMSIZE_KB=$(sed -n '/^MemTotal:/s/.*\<\([[:digit:]]\+\)\>.*/\1/p' /proc/meminfo) # Detect total RAM
- SWAPSIZE_B=$(((MEMSIZE_KB / ${NRDEVICES}) * 1024 / 2)) # Max memory to use for zram is half of real RAM
- ALGO=zstd # lzo lzo-rle lz4 lz4hc 842 [zstd] # Default compression algorithm
- set -o errexit -o nounset -o pipefail
- trap -- 'errno=$? ; echo "error ${errno} on line ${LINENO}" >&2 ; exit ${errno}' ERR
- [ "$(id -u)" == "0" ] || exec sudo /bin/bash -e "${BASH_SOURCE[0]}" "$@" # Use sudo superpowers
- if test "${1:-}" = "start" ; then
- if grep -qw 'zram[0-9]\+' /proc/swaps; then
- echo "ERROR: There is already zRAM swaps configured. Exiting." >&2
- exit 1
- fi
- if ! test -f /etc/sysctl.d/99-vm-zram-parameters.conf ; then
- echo "INFO: Adding sysctl parameters for tuning swappiness" >&2
- echo "vm.swappiness = 180
- vm.watermark_boost_factor = 0
- vm.watermark_scale_factor = 125
- vm.page-cluster = 0" | \
- sed 's/^[[:blank:]]*//' > /etc/sysctl.d/99-vm-zram-parameters.conf
- sysctl -p /etc/sysctl.d/99-vm-zram-parameters.conf
- fi
- echo "INFO: Total mem: $((MEMSIZE_KB/1024)) MiB - Adding ${NRDEVICES} zRAM swap devices with $((SWAPSIZE_B/1024/1024)) MiB each." >&2
- if ! modprobe zram num_devices=${NRDEVICES} ; then
- echo "You do not appear to have the zram kernel module installed. Maybe: apt install linux-modules-extra-\$(uname -r)" >&2
- exit 2
- fi
- for DEVNUMBER in $(grep -w ^processor /proc/cpuinfo | awk '{print $3}'); do
- echo "${ALGO}" >"/sys/block/zram${DEVNUMBER}/comp_algorithm"
- echo "${SWAPSIZE_B}" >"/sys/block/zram${DEVNUMBER}/disksize"
- mkswap -L "zram${DEVNUMBER}" "/dev/zram${DEVNUMBER}"
- swapon -p 5 "/dev/zram${DEVNUMBER}"
- done
- elif test "${1:-}" = "stop" ; then
- DEVNAMES=$(grep -w --only-matching '^/dev/zram[0-9]\+' /proc/swaps || true)
- for DEVNAME in ${DEVNAMES} ; do swapoff "${DEVNAME}" ; done
- rmmod zram
- else
- echo "Usage: $0 [start|stop]" >&2
- exit 1
- fi
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment