mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
Closes: Debian #805108. Primary motivation is to provide swap for FreedomBox machines. On all FreedomBox images, currently there is no swap configured. Swap on disk may not be good for SBCs most of which use SD card for storage. We wish for processes to not get killed when hard memory limit is reached. Zram seems like a good solution to the problem suitable not only for SBCs but also for desktops and bigger machines. Fedora is currently using Zram as its default swap solution configured by the installer. Zram creates a block device with a configured size. Writing blocks into the device compresses them and stores them in RAM. This block device can be configured as swap among other things. See: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/blockdev/zram.rst Set the size of the swap to be 50% of RAM. Expected compression is about 1:2. That means, in an average case, 25% of RAM is consumed to provide the swap device. This results in the system being able to consume about 125% of RAM capacity to run processes. This value is inspired by Fedora. https://fedoraproject.org/wiki/Changes/SwapOnZRAM . Zram based swap takes priority over disk based swap (due the priority being set to 100). This reduces IO and improves latency on machines that already have a swap device. On containers, zramswap.service fails to start as it will not be possible to insert the 'zram' kernel module from within the container. This should not cause any further problems. Since 'config' app is an essential app, zram-tools now becomes a hard dependency of freedombox package. For FreedomBox images, zram-tools will be pre-installed and pre-configured. So, it will work on first boot. For users installing FreedomBox via apt or those upgrading from an older version, zram-tools will be newly installed but configuration will not be picked up until the next reboot. Restarting zramswap.service is not done because it may not be a safe/successful operation. systemd-zram-generator is a project that essentially does what zram-tools. It appears to be a better implementation and we may migrate to it when it becomes available in Debian. Migration expected to be straight forward. Tests performed: - Running `sudo -u plinth ./run --list-dependencies` shows zram-tools as a dependency. - On a container, `systemctl status zramswap.service` shows as failed. - On a virtual machine, confirm that configuration is installed properly. Run `./setup.py install; systemctl daemon-reload; systemctl show zramswap.service | grep Environment`. - On a virtual machine, ensure that you have more than 512MiB or RAM. Then restart zramswap.service. This should create a swap space of 50% of RAM capacity. Confirm with `free` and `zramswap status`. - Restarting the VM retains the swap that has been setup. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>