---
title: 'Setting up RAM compression with ZSwap'
url: 'https://ra1ahq.blog/en/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap'
markdown: 'https://ra1ahq.blog/en/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap.md'
lang: en
date: '2020-09-10'
description: 'When the RAM runs out, the computer becomes very slow as it accesses the swap file on the hard drive. To solve this problem, the zswap module was invented. By default, it is disabled in the Linux operating system, but you can enable it. Why di'
taxonomy:
  category:
    - blog
  tag:
    - Linux
  archives_month:
    - sep_2020
  archives_year:
    - '2020'
---

# Setting up RAM compression with ZSwap

10 

 September 

 2020 

 16:39

### Setting up RAM compression with ZSwap

 [Linux](https://ra1ahq.blog/en/tag:Linux) 

10 September 2020 16:39

When the RAM runs out, the computer becomes very slow as it accesses the swap file on the hard drive. To solve this problem, the zswap module was invented. By default, it is disabled in the Linux operating system, but you can enable it.

Why did I need to use "zswap" RAM compression? There are 2 2 GB sticks installed, but the motherboard physically supports only 3 GB - this is a limitation of a motherboard based on the Intel 82945 chipset. On another computer, also running Linux, 1 GB and 2 GB RAM sticks are installed (3 GB in total), they are usually enough for working on the Internet. But sometimes when opening large PDF files or images, RAM may run out...

### Choice: zram or zswap

zram is used for permanent page compression - a swap section is allocated in memory, into which compressed memory pages are unloaded as into a regular page file, but in fast RAM.

zswap does not allocate a partition in memory - only a dynamic volume (pool) in RAM, which includes only those pages that are candidates for getting into the physical swap file. Pages are also compressed before they are put into the pool.

Since the memory size is large enough, I don't need to constantly compress the RAM like zram does. It is required to ensure that there is no swapping to disk when the RAM is close to full.

### Solution:

1. In the GRUB bootloader line, which is responsible for passing kernel parameters, I indicate a call to the ZSwap module:

    `<pre>sudo nano /etc/default/grub</pre>`

corrected the GRUB\_CMDLINE\_LINUX\_DEFAULT line to the following:

**`GRUB_CMDLINE_LINUX_DEFAULT="noresume zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 zswap.max_pool_percent=35"`**

**`GRUB_CMDLINE_LINUX=""`**

2. Updated GRUB configuration:

    `<pre>sudo update-grub</pre>`
3. Allowed loading of modules for advanced compression

    `<pre>sudo nano /etc/initramfs-tools/modules</pre>`

added the lines:

`lz4`
`lz4_compress`
`z3fold`

and saved the changes.

4. I started updating the initrd file (which contains iniramfs - the initial file system for loading into RAM at the time the OS boots; the second part of the kernel is the static file vmlinuz, which is not changed by this command and contains the kernel itself):

    `<pre>sudo update-initramfs -u</pre>`
5. Reboot the system

    `<pre>sudo reboot</pre>`
6. Check.

- There was no RAM before setting up the compression module.

    `<pre>dmesg | grep zswap</pre>`
- After the first startup without the lz4, lz4compress modules, the dmesg command output
    \[ 2.690663\] zswap: loaded using pool lzo/zbud
- After the final configuration with the inclusion of the lz4, lz4compress and z3fold module, the output of the dmesg command is as follows:
    \[ 2.734842\] zswap: loaded using pool lz4/z3fold

---

**Notes:**

1. The difference between lzo and lz4 compression methods is in the compression/decompression speed - lz4 has the highest compression and decompression speed among all.
2. On systems with a small amount of RAM, instead of zswap.zpool=z3fold, it is better to try zswap.zpool=zsmalloc (compression level up to 7).
3. The maximum pool size for compressed cache pages is 50%, since according to free -h on a computer with 3 GB of RAM, the cache size is 600 MB and 1.1 GB is free (1.7 GB is approximately 50% of the 3GB RAM). On systems with a small amount of RAM, the zswap.max\_pool\_percent limit should be reduced to 10-15%, so that it is 200-300 MB. The size of the pool (compressed cache) of pages is dynamic.

    **Update dated June 10, 2021**: after increasing in the configuration file **/etc/default/grub** parameter **zswap.max\_pool\_percent** from 50 to 70 and executing the command `sudo update-grub` the size of free RAM (free) increased from 213 to 500 MB, apparently due to compression of RAM. In my opinion, the optimal size **max\_pool\_percent** for maximum RAM savings lies in the range from 70 to 90%. With the parameter **max\_pool\_percent** at the 90% level, I did not notice any slowdown in the operation of the program or the operating system as a whole. After increasing zswap.max\_pool\_percent to 90, the size of free RAM when the Mozilla Firefox browser is running is in the range of 908...937 MB. The speed of the FireFox browser has also increased.

Addition from 10/21/2021: with max\_pool\_percent=90, I observed strong swapping on the State Services website when submitting a completed form for the Russian Federation Census. Reduced max\_pool\_percent=35 (about 1 GB of RAM), executed `sudo update-grub` and rebooted the PC. Apparently, an excessive increase in the max\_pool\_percent parameter, above 50%, is undesirable.

### Addition 2023. Output of zswap operation statistics

Displaying current ZSwap settings

```
grep -R . /sys/module/zswap
```

ZSwap performance statistics (debugging):

```
sudo grep -R . /sys/kernel/debug/zswap/
```

If zswap is enabled, but there are *no* compressed pages in the statistics (/sys/kernel/debug/zswap/stored\_pages:0), this means that the operating system has enough RAM. In this case, zswap debugging will produce zeros, because There are no memory pages waiting to be loaded into swap.

**Sources:**

- <https://www.kernel.org/doc/html/latest/vm/zswap.html>
- <https://askubuntu.com/questions/991953/apply-z3fold-to-zswap>
- <https://unix.stackexchange.com/questions/406925/prevent-zram-lru-inversion-with-zswap-and-max-pool-percent-100>
- <https://unix.stackexchange.com/questions/406936/get-current-zswap-memory-usage-and-statistics>

### Related publications

 [ ![](https://ra1ahq.blog/images/f/3/a/2/c/f3a2c07ef5b32c0308ab703405a5a5ca87b75283-archer-ac600-728.webp) Установка драйвера ядра для Wi-Fi адаптера TP-Link после обновления ОС Debian ](https://ra1ahq.blog/en/ustanovka-draivera-yadra-dlya-wi-fi-adaptera-tp-link-posle-obnovleniya-os-debian) 

 [ ![](https://ra1ahq.blog/images/d/2/5/c/7/d25c7282750b398f71041fb8b90640b692e7e4b8-decibelfmtitle.png) Linux Cinnamon Desktop Applets for Listening to Internet Radio Stations ](https://ra1ahq.blog/en/applety-dlya-rabochego-stola-linux-cinnamon-dlya-proslushivaniya-internet-radiostancii) 

 [ ![No picture](https://ra1ahq.blog/user/themes/mytheme/images/no-image.png) Passing a parameter to a Linux module/driver ](https://ra1ahq.blog/en/peredacha-parametra-modulyu-draiveru-linux) 

 [ ![](https://ra1ahq.blog/images/5/c/4/e/a/5c4ea9c8c3f0b4dd890116d8fe7cbadfdb9814ba-archer-ac600.webp) Installing the TP-Link Archer T600U Nano Wi-Fi adapter driver in Debian 13 "Trixie" ](https://ra1ahq.blog/en/ustanovka-draivera-wi-fi-adaptera-tp-link-archer-t600u-nano-v-debian-13-trixie) 

 [ ![](https://ra1ahq.blog/images/b/f/f/0/f/bff0f99f5897e0420fac9a6eef7254247f39c29d-pulseaudio-equalizer.png) Installing the audio equalizer pulseaudio-equalizer-ladspa on Linux ](https://ra1ahq.blog/en/ustanovka-v-linux-ekvalaizera-zvuka-pulseaudio-equalizer-ladspa) 

[ Backward](https://ra1ahq.blog/en/ne-zapuskaetsya-sluzhba-apparmor-posle-ustanovki-mysql-reshenie-problemy "Previuous page")

[ Forward ](https://ra1ahq.blog/en/gora-kirkhgof "Next page")

## Languages

- [Русский](https://ra1ahq.blog/posts/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap)
- [English](https://ra1ahq.blog/en/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap)
- [Deutsch](https://ra1ahq.blog/de/posts/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap)
- [Français](https://ra1ahq.blog/fr/posts/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap)
- [中文 (简体) (cn)](https://ra1ahq.blog/zh-cn/posts/nastroika-szhatiya-operativnoi-pamyati-s-pomoshyu-zswap)

## Theme

## RSS feeds

 [ Atom 1.0](https://ra1ahq.blog/en/.atom) [ RSS](https://ra1ahq.blog/en/.rss) 

## Popular tags

 [APRS](https://ra1ahq.blog/en/tag:APRS) [CW](https://ra1ahq.blog/en/tag:CW) [DX](https://ra1ahq.blog/en/tag:DX) [FM](https://ra1ahq.blog/en/tag:FM) [Linux](https://ra1ahq.blog/en/tag:Linux) [VHF](https://ra1ahq.blog/en/tag:VHF) [antennas](https://ra1ahq.blog/en/tag:antennas) [firefox](https://ra1ahq.blog/en/tag:firefox) [morse](https://ra1ahq.blog/en/tag:morse) [soundtrack](https://ra1ahq.blog/en/tag:soundtrack) [video](https://ra1ahq.blog/en/tag:video) [windows](https://ra1ahq.blog/en/tag:windows) [youtube](https://ra1ahq.blog/en/tag:youtube) [КВ](https://ra1ahq.blog/en/tag:%D0%9A%D0%92) [ТВ](https://ra1ahq.blog/en/tag:%D0%A2%D0%92) [УКВ](https://ra1ahq.blog/en/tag:%D0%A3%D0%9A%D0%92) [антенны](https://ra1ahq.blog/en/tag:%D0%B0%D0%BD%D1%82%D0%B5%D0%BD%D0%BD%D1%8B) [безопасность](https://ra1ahq.blog/en/tag:%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C) [длинные волны](https://ra1ahq.blog/en/tag:%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B2%D0%BE%D0%BB%D0%BD%D1%8B) [путешествия](https://ra1ahq.blog/en/tag:%D0%BF%D1%83%D1%82%D0%B5%D1%88%D0%B5%D1%81%D1%82%D0%B2%D0%B8%D1%8F) [религия](https://ra1ahq.blog/en/tag:%D1%80%D0%B5%D0%BB%D0%B8%D0%B3%D0%B8%D1%8F) [соревнования](https://ra1ahq.blog/en/tag:%D1%81%D0%BE%D1%80%D0%B5%D0%B2%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) [спутники](https://ra1ahq.blog/en/tag:%D1%81%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA%D0%B8) [средние волны](https://ra1ahq.blog/en/tag:%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5%20%D0%B2%D0%BE%D0%BB%D0%BD%D1%8B) [схемы](https://ra1ahq.blog/en/tag:%D1%81%D1%85%D0%B5%D0%BC%D1%8B) [тесты](https://ra1ahq.blog/en/tag:%D1%82%D0%B5%D1%81%D1%82%D1%8B) [трансивер](https://ra1ahq.blog/en/tag:%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%B8%D0%B2%D0%B5%D1%80) [управление](https://ra1ahq.blog/en/tag:%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5) [фотографии](https://ra1ahq.blog/en/tag:%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8) 

## Random post

 [ I'll be lucky!](https://ra1ahq.blog/en/random) 

## Archive of posts

- [ October 2026 ✒ 4 ](https://ra1ahq.blog/en/archives_month:oct_2026)
- [ September 2026 ✒ 9 ](https://ra1ahq.blog/en/archives_month:sep_2026)
- [ August 2026 ✒ 6 ](https://ra1ahq.blog/en/archives_month:aug_2026)
- [ July 2026 ✒ 13 ](https://ra1ahq.blog/en/archives_month:jul_2026)
- [ June 2026 ✒ 8 ](https://ra1ahq.blog/en/archives_month:jun_2026)
- [ May 2026 ✒ 2 ](https://ra1ahq.blog/en/archives_month:may_2026)
- [ April 2026 ✒ 6 ](https://ra1ahq.blog/en/archives_month:apr_2026)
- [ March 2026 ✒ 3 ](https://ra1ahq.blog/en/archives_month:mar_2026)
- [ February 2026 ✒ 7 ](https://ra1ahq.blog/en/archives_month:feb_2026)
- [ January 2026 ✒ 8 ](https://ra1ahq.blog/en/archives_month:jan_2026)
- [ December 2025 ✒ 12 ](https://ra1ahq.blog/en/archives_month:dec_2025)
- [ November 2025 ✒ 9 ](https://ra1ahq.blog/en/archives_month:nov_2025)
- [ October 2025 ✒ 8 ](https://ra1ahq.blog/en/archives_month:oct_2025)
- [ September 2025 ✒ 5 ](https://ra1ahq.blog/en/archives_month:sep_2025)
- [ August 2025 ✒ 8 ](https://ra1ahq.blog/en/archives_month:aug_2025)
- [ July 2025 ✒ 6 ](https://ra1ahq.blog/en/archives_month:jul_2025)
- [ June 2025 ✒ 10 ](https://ra1ahq.blog/en/archives_month:jun_2025)
- [ May 2025 ✒ 4 ](https://ra1ahq.blog/en/archives_month:may_2025)
- [ April 2025 ✒ 4 ](https://ra1ahq.blog/en/archives_month:apr_2025)
- [ March 2025 ✒ 4 ](https://ra1ahq.blog/en/archives_month:mar_2025)
- [ February 2025 ✒ 11 ](https://ra1ahq.blog/en/archives_month:feb_2025)
- [ December 2024 ✒ 8 ](https://ra1ahq.blog/en/archives_month:dec_2024)
- [ November 2024 ✒ 2 ](https://ra1ahq.blog/en/archives_month:nov_2024)
- [ October 2024 ✒ 8 ](https://ra1ahq.blog/en/archives_month:oct_2024)
- [ September 2024 ✒ 3 ](https://ra1ahq.blog/en/archives_month:sep_2024)
- [ August 2024 ✒ 5 ](https://ra1ahq.blog/en/archives_month:aug_2024)
- [ July 2024 ✒ 9 ](https://ra1ahq.blog/en/archives_month:jul_2024)
- [ June 2024 ✒ 6 ](https://ra1ahq.blog/en/archives_month:jun_2024)
- [ May 2024 ✒ 7 ](https://ra1ahq.blog/en/archives_month:may_2024)
- [ April 2024 ✒ 5 ](https://ra1ahq.blog/en/archives_month:apr_2024)
- [ March 2024 ✒ 5 ](https://ra1ahq.blog/en/archives_month:mar_2024)
- [ February 2024 ✒ 5 ](https://ra1ahq.blog/en/archives_month:feb_2024)
- [ January 2024 ✒ 6 ](https://ra1ahq.blog/en/archives_month:jan_2024)
- [ December 2023 ✒ 7 ](https://ra1ahq.blog/en/archives_month:dec_2023)
- [ November 2023 ✒ 4 ](https://ra1ahq.blog/en/archives_month:nov_2023)
- [ October 2023 ✒ 8 ](https://ra1ahq.blog/en/archives_month:oct_2023)
- [ September 2023 ✒ 7 ](https://ra1ahq.blog/en/archives_month:sep_2023)
- [ August 2023 ✒ 4 ](https://ra1ahq.blog/en/archives_month:aug_2023)
- [ July 2023 ✒ 7 ](https://ra1ahq.blog/en/archives_month:jul_2023)
- [ June 2023 ✒ 7 ](https://ra1ahq.blog/en/archives_month:jun_2023)
- [ May 2023 ✒ 5 ](https://ra1ahq.blog/en/archives_month:may_2023)
- [ April 2023 ✒ 6 ](https://ra1ahq.blog/en/archives_month:apr_2023)
- [ March 2023 ✒ 5 ](https://ra1ahq.blog/en/archives_month:mar_2023)
- [ February 2023 ✒ 2 ](https://ra1ahq.blog/en/archives_month:feb_2023)
- [ January 2023 ✒ 5 ](https://ra1ahq.blog/en/archives_month:jan_2023)
- [ December 2022 ✒ 7 ](https://ra1ahq.blog/en/archives_month:dec_2022)
- [ November 2022 ✒ 8 ](https://ra1ahq.blog/en/archives_month:nov_2022)
- [ October 2022 ✒ 6 ](https://ra1ahq.blog/en/archives_month:oct_2022)
- [ September 2022 ✒ 9 ](https://ra1ahq.blog/en/archives_month:sep_2022)
- [ August 2022 ✒ 8 ](https://ra1ahq.blog/en/archives_month:aug_2022)
- [ July 2022 ✒ 4 ](https://ra1ahq.blog/en/archives_month:jul_2022)
- [ June 2022 ✒ 9 ](https://ra1ahq.blog/en/archives_month:jun_2022)
- [ May 2022 ✒ 7 ](https://ra1ahq.blog/en/archives_month:may_2022)
- [ April 2022 ✒ 3 ](https://ra1ahq.blog/en/archives_month:apr_2022)
- [ March 2022 ✒ 4 ](https://ra1ahq.blog/en/archives_month:mar_2022)
- [ February 2022 ✒ 6 ](https://ra1ahq.blog/en/archives_month:feb_2022)
- [ January 2022 ✒ 7 ](https://ra1ahq.blog/en/archives_month:jan_2022)
- [ December 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:dec_2021)
- [ November 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:nov_2021)
- [ October 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:oct_2021)
- [ September 2021 ✒ 10 ](https://ra1ahq.blog/en/archives_month:sep_2021)
- [ August 2021 ✒ 6 ](https://ra1ahq.blog/en/archives_month:aug_2021)
- [ July 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:jul_2021)
- [ June 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:jun_2021)
- [ May 2021 ✒ 7 ](https://ra1ahq.blog/en/archives_month:may_2021)
- [ April 2021 ✒ 4 ](https://ra1ahq.blog/en/archives_month:apr_2021)
- [ March 2021 ✒ 4 ](https://ra1ahq.blog/en/archives_month:mar_2021)
- [ February 2021 ✒ 3 ](https://ra1ahq.blog/en/archives_month:feb_2021)
- [ January 2021 ✒ 4 ](https://ra1ahq.blog/en/archives_month:jan_2021)
- [ December 2020 ✒ 8 ](https://ra1ahq.blog/en/archives_month:dec_2020)
- [ November 2020 ✒ 2 ](https://ra1ahq.blog/en/archives_month:nov_2020)
- [ October 2020 ✒ 3 ](https://ra1ahq.blog/en/archives_month:oct_2020)
- [ September 2020 ✒ 3 ](https://ra1ahq.blog/en/archives_month:sep_2020)
- [ August 2020 ✒ 5 ](https://ra1ahq.blog/en/archives_month:aug_2020)
- [ July 2020 ✒ 5 ](https://ra1ahq.blog/en/archives_month:jul_2020)
- [ June 2020 ✒ 8 ](https://ra1ahq.blog/en/archives_month:jun_2020)
- [ May 2020 ✒ 10 ](https://ra1ahq.blog/en/archives_month:may_2020)
- [ April 2020 ✒ 4 ](https://ra1ahq.blog/en/archives_month:apr_2020)
- [ March 2020 ✒ 2 ](https://ra1ahq.blog/en/archives_month:mar_2020)
- [ January 2020 ✒ 1 ](https://ra1ahq.blog/en/archives_month:jan_2020)
- [ December 2019 ✒ 2 ](https://ra1ahq.blog/en/archives_month:dec_2019)

## Search

## Weather forecast

[На 14 дней](https://world-weather.ru/pogoda/russia/saint_petersburg/14days/)
[world-weather.ru](https://world-weather.ru/)

---

## Navigation

- Parent: [RA1AHQ](https://ra1ahq.blog/en/index.md)
- Previous: [Mount Kirchhof](https://ra1ahq.blog/en/gora-kirkhgof.md)
- Next: [AppArmor service does not start after installing MySQL - problem solution](https://ra1ahq.blog/en/ne-zapuskaetsya-sluzhba-apparmor-posle-ustanovki-mysql-reshenie-problemy.md)
