Home

Awesome

Zram-swap-config

Like zram-config-0.5

zram-config-0.5 is a broken package that for many reasons should not be used. Zram-swap-config is an interim package until zram-config-0.5 is fixed in deploy and operation

Usefull for IoT / maker projects for reducing SD, Nand and Emmc block wear via write operations. Check the Swapiness-load-balancer branch for dynamic swappiness control. Works well in conjunction with https://github.com/StuartIanNaylor/zramdrive and https://github.com/StuartIanNaylor/log2zram


Menu

  1. Install
  2. Upgrade
  3. Customize
  4. It is working ?
  5. Uninstall

Install

apt-get install git
git clone https://github.com/StuartIanNaylor/zram-swap-config
cd zram-swap-config
chmod +x install.sh && sudo ./install.sh
cd ..
rm -rf zram-swap-config

Upgrade

Run zram-swap-config-uninstall.sh from /usr/local/bin/ and start then start the new install.

Customize

variables :

In the file /etc/zram-swap-config.conf:

# Configuration file for zram-swap-config (https://github.com/StuartIanNaylor/zram-swap-config) under GNU General Public License v3.0 license.
# This configuration file is read by the zram-swap-config service

# MEM_FACTOR = Percentage of available ram to allocate to all zram swap devices which is divided equally by swap_devices number
MEM_FACTOR=50
# DRIVE_FACTOR = Virtual uncompressed zram drive size estimate approx alg compression ratio 
DRIVE_FACTOR=210
# COMP_ALG lz4 is faster than lzo but some distro's show compile and operation difference and in use lzo depending on binary may be faster
COMP_ALG=lz4
# SWAP_DEVICES = number of indivial drives sharing memeory provided by MEM_FACTOR each device support multiple streams 1 large drive is generally better
SWAP_DEVICES=1
# SWAP_PRI = swap_priority for each drive 75 is a hig order preference and should be well above other swap drives
SWAP_PRI=75
# PAGE_CLUSTER default page cluster is 3 which caches fetches in batches of 8 and helps with HDD paging, with zram mem 0 forces single page fetches
# This can help reduce latency and increase performance
PAGE_CLUSTER=0
# SWAPPINESS default swappiness is 60 but with increased performance of zram swap 80 garners overall performance gain without excessive load
# Because zram uses compression load is created and even if minimal at intense load periods such as boot any extra load is unwanted
# Unfortunately there is no dynamic load balancing of swappiness as with zram in general operation SWAPINESS=100 will garner performance benefit
# If the overall load is reasonable at high load it will cause load to accumulate. 
SWAPPINESS=80
# If you check my repo there will also be a simple dynamic load branch based SWAPPINESS governor that will get of the hurdle of a static compromise on swappiness

It is working?

You can now check the mount folder in ram with (You will see lines with zram if working)

# zramctl
…
NAME       ALGORITHM DISKSIZE  DATA  COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4         455.1M    4K    65B    4K       1 [SWAP]
/dev/zram1               140M 17.7M 432.4K  680K       1 /var/log
…

# swapon
…
NAME       TYPE        SIZE USED PRIO
/dev/zram0 partition 455.1M   0B   75
/var/swap  file        100M   0B   -2
…
# free -m
…
              total        used        free      shared  buff/cache   available
Mem:            433          31         329           3          72         351
Swap:           555           0         555
…
# cat /proc/sys/vm/swappiness
…
80
…
# cat /proc/sys/vm/page-cluster
…
0
…
# sudo apt-get install stress
# stress --vm 3 --vm-bytes 256M --timeout 60s
…
stress: info: [861] dispatching hogs: 0 cpu, 0 io, 3 vm, 0 hdd
stress: info: [861] successful run completed in 60s

Any comp alg can be used for zram, zramctl unfortunately only has the text strings for lzo/lz4 so blank space is displayed. zstd kernel inclusion seems to have some politics attached. Check /proc/crypto for available.

Compressor nameRatioCompressionDecompress.
zstd 1.3.4 -12.877470 MB/s1380 MB/s
zlib 1.2.11 -12.743110 MB/s400 MB/s
brotli 1.0.2 -02.701410 MB/s430 MB/s
quicklz 1.5.0 -12.238550 MB/s710 MB/s
lzo1x 2.09 -12.108650 MB/s830 MB/s
lz4 1.8.12.101750 MB/s3700 MB/s
snappy 1.1.42.091530 MB/s1800 MB/s
lzf 3.6 -12.077400 MB/s860 MB/s

You may wish to uninstall raspbian file swap services

sudo apt-get remove dphys-swapfile
or
disable
sudo systemctl disable dphys-swapfile

Uninstall

sudo chmod +x /usr/local/bin/zram-swap-config-uninstall.sh && sudo /usr/local/bin/zram-swap-config-uninstall.sh

Git Branches & Update

From the command line, enter cd <path_to_local_repo> so that you can enter commands for your repository. Enter git add --all at the command line to add the files or changes to the repository Enter git commit -m '<commit_message>' at the command line to commit new files/changes to the local repository. For the <commit_message> , you can enter anything that describes the changes you are committing. Enter git push at the command line to copy your files from your local repository to remote.