Данная статья будет актуальна для владельцев нетбуков, компьютеров с малым количеством оперативки, людей, которые запускают много ресурсоёмких приложений, которые в свою очередь потребляют много памяти и так далее. В ядре Linux не так давно появились две замечательные технологии — zram и zswap. Опишу что это и для чего:ZRAM — модуль ядра Linux, ранее известный как compcache. До версии ядра 3.14 находился в эксперементальной ветке, с 3.14 перемещён в основную. Суть его в том, что в оперативной памяти создаётся сжатый раздел подкачки (swap). Создавая swap в ОЗУ, мы тем самым хоть и уменьшаем объем доступной оперативной памяти, но тем не менее информация в оперативной памяти всегда хранится в несжатом виде, а при использовании ZRAM происходит следующее: как только системе начинает не хватать оперативной памяти, она начинает активно занимать swap, а так как swap у нас в оперативной-же памяти, то по факту система начинает просто сжимать информацию из оперативки и помещать ее в оперативку же. Скорость работы ОЗУ всегда существенно выше чем дисковой подсистемы, а алгоритмы сжатия lzo и lz4 настолько быстры, что в итоге мы получаем существенное «увеличение» оперативной памяти за счет небольших процессорных издержек на архивацию. Таким образом, ZRAM позволяет разместить в оперативной памяти в несколько раз больше информации за счёт сжатия. Эта технология активно используется в Android, ТВ-приставках, ChromeOS, SteamOS и много где ещё. При использовании ZRAM, swap-раздел на диске необязателен. Это особенно полезно для SSD-накопителей, так как частые записи для них вредны.ZSWAP — модуль ядра Linux, доступный с версии 3.11. Отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные. Размер пула можно указать вручную, по умолчанию он динамический (то есть будет использовать всю доступную оперативку). Реализация такого подхода позволяет, при возникновении необходимости сброса памяти в раздел подкачки, сократить ввод-вывод и повысить скорость работы системы в целом, за счет того, что по возможности избегается использование медленного носителя. Ценой сокращения ввода/вывода является увеличение нагрузки на процессор, который тратит дополнительные ресурсы на сжатие и распаковку данных. По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит своппинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш. Можно считать ZSWAP продвинутым вариантом ZRAM.

Zram или Zswap?

Чтобы узнать что из этого лучше подойдёт вам, возьмём два примера: ноутбук с 4 гигами оперативки и медленным жёстким диском (представьте себе работу подкачки на таком) или с SSD-накопителем; компьютер с 8 гигами оперативки, на котором планируется запускать много виртуальных машин и других ресурсоёмких приложений. В первом случае, более подходящим будет ZRAM, так как ему не нужен swap-раздел на диске (это особенно вредно для SSD) и он позволит размещать все данные непосредственно в памяти. Однако раздел swap нужно обязательно создать если вы будете использовать на ноутбуке режим сна. На компьютере предпочтительнее будет ZSWAP, так как оперативка не будет занята виртуальными swap-файлами (а виртуалкам нужно много оперативки), а в оперативке будет хранится только сжатый кэш, что при нехватке памяти предотвратит своппинг, а в критической ситуации — быстренько скинет его на swap-раздел на диске.

Установка.

Примеры установки я покажу на дистрибутиве Ubuntu 14.04 и Debian 8. В остальных дистрибутивах различия будут не существенными (обратитесь к документации вашего дистрибутива). Начнём с ZRAM. Для Ubuntu всё просто:sudo apt install zram-config Всё. Этот скрипт определит количество оперативной памяти в вашей системе, а также количество ядер процессора и создаст swap-файла в памяти (блочные устройства /dev/zram) по количеству ядер. Это нужно потому что сжатие данных однопоточное (один поток==одно ядро). По умолчанию размер такого swap-файла равен 1/2 от общего количества оперативки. После перезагрузки, выполните в терминале команду swapon -s и вы увидите помимо реального swap-раздела, несколько разделов /dev/zram. Далее. Если вы изменяли значение vm.swappiness (для уменьшения порога включения подкачки), например выставили значение vm.swappiness = 10, то измените его на 40, дабы уже при исчерпании 60% оперативки, включался ZRAM. Если вы ничего не трогали, то можете либо оставить значение по умолчанию (60, то есть при исчерпании 40% оперативки), либо:sudo nano /etc/sysctl.conf Дописываем в конец строку:vm.swappiness = 40 сохраняем и выполняем:sudo sysctl -p либо перезагружаемся. Вот и всё. Для Debian всё немного сложнее. Но совсем чуть чуть 🙂 Открываем терминал, вводим:sudo nano /etc/init.d/zram Вставляем следующий скрипт: Сохраняем. Далее даём права на исполнение:sudo chmod +x /etc/init.d/zram и активируем:sudo insserv zram Перезагружаемся и всё. Теперь о ZSWAP. Здесь всё значительно проще. Нужно лишь передать ядру во время загрузки, параметр zswap.enabled=1. Для этого открываем файл /etc/default/grubsudo nano /etc/default/grub И в строку GRUB_CMDLINE_LINUX_DEFAULT дописываем этот параметр. Чтобы было вот так:GRUB_CMDLINE_LINUX_DEFAULT=»zswap.enabled=1 quiet» Далее:sudo update-grub и перезагрузка. После перезагрузки, можете убедиться в работе ZSWAP, введя команду  dmesg | grep zswap Если ответом будет значит всё сработало на отлично. Способ включения ZSWAP одинаков для большинства дистрибутивов. Если нужно ограничить объём пула для ZSWAP, то там же в параметрах указываем:zswap.max_pool_percent=x где x — процент отведённой памяти под ZSWAP. Вот так мы быстро и без лишних телодвижений, увеличили эффективность оперативной памяти, лишь незначительно увеличив нагрузку на процессор. Ссылки:Статья по ZRAM для пользователей ArchLinuxОбсуждение на HabrahabrZSWAP на Debian Forum 

В современных бюджетных смартфонах остро стоит проблема нехватки оперативной памяти. В последних версиях Android инженеры нашли решение этой проблемы в виде использования zRam — блока подкачки, создаваемого внутри оперативной памяти. Как работает такая технология и насколько она эффективна?

Что такое zRam?

Модуль zRam разработан с целью оптимизации системной памяти путем создания блочного устройства внутри ОЗУ. Таким образом, предотвращается подкачка страниц на диск и увеличивается производительность. За счет сжатия фоновых приложений внутри ОЗУ система способна выполнять большее количество операций подкачки.

Эта технология актуальна для современных бюджетных устройств, которые работают на нескольких ядрах, но имеют всего 512 Мб оперативной памяти. zRam условно увеличивает объем ОЗУ, улучшая работу системы. Но поддержка подобного модуля доступна далеко не всем устройствам.

Как активировать оптимизацию системы через zRAM?

Для начала потребуется запустить режим разработчика:

  1. В настройках зайдите во вкладку «О телефоне».
  2. Внутри раздела найдите пункт «Номер сборки».
  3. Нажмите на него 7 раз.

Включаем оптимизацию:

  • Теперь в дополнительных настройках смартфона появился новый пункт «Для разработчиков» — зайдите в него.
  • Найдите опцию «Оптимизация системной памяти». Если такого пункт там нет, значит, данная модель устройства не поддерживает zRam.
  • Активируйте оптимизацию системы.

В разделе «Swappiness» можно узнать, с какой частотой система обращается к zRam по умолчанию. Этот показатель можно изменить, установив значение от 1 до 100. Опция «Swappiness» находится по пути /proc/sys/vm/ через менеджер файлов. Исправность работы модуля проверяется посредством приложения Diskinfo. Если в самом низу меню программы присутствует пункт SWAP, значит, технология активна.

Заключение

Модуль zRam оптимизирует работу системной памяти, увеличивая производительность медленного устройства. Технология разработана для бюджетных многоядерных устройств с низким объемом оперативной памяти. Поддерживается функция только в последних версиях Android.

Данный способ хорошо поможет тем, у кого на компьютерах установлен небольшой объем оперативной памяти и возникают проблемы с производительностью и «отзывчивостью» операционной системы.

Начиная с версии ядра Linux 3.14 в стандартную поставку включен модуль zRam (ранее известный как compcache).

Как говорится в Википедии:

….увеличивает производительность путем предотвращения подкачки страниц на диск, используя сжатое блочное устройство в оперативной памяти, пока не появится необходимость использовать файл подкачки на жёстком диске. Скорость обмена с оперативной памятью быстрее, чем с жёстким диском, следовательно zRam позволяет Linux производить большее число операций подкачки, особенно на старых компьютерах с малым объёмом оперативной памяти.

zRam активно используется на Ubuntu Nexus 7, Android-устройствах, проектами CyanogenMod. Компания Google кроме Android использует zRam в своей операционной системе ChromeOS.

Использование zRam рекомендуется для нетбуков, старых компьютеров, виртуальных систем (н.р. на VPS от Amazon или DigitalOcean и других) или в различных встраиваемых системах.

Вообще способов применения zRam не ограничиваются только сжатием и уменьшением сбрасываемых в swap данных. Вообще zRam создает блочные устройства (аналог жесткого диска в оперативной памяти) в оперативной памяти. При этом, все данные попадающие в данные блочные устройства сжимаются. В общем, что вы поместите в эти блочные устройства зависит только от вас. Но в большинстве случаев этот модуль и эту технологию применяют именно для swap.

Приступим к настройке.

Исходные данные:

ОС: Ubuntu 14.04 LTE

Для активизации zRam достаточно установить пакет zram-config:

sudo apt-get install zram-config  

После установки можно проверить работоспособность:

swapon -s

Если вы видите что-то похожее, то все нормально:

Так как разделы создаются в оперативной памяти, то я не советую вам изменять параметр vm.swappines (изменяется в файле /etc/sysctl.conf ), который часто рекомендуют выставить в значение 10 или вообще 0.

Swappines — это параметр, контролирующий тенденцию ядра перемещать процессы из физической памяти в swap-раздел. По умолчанию в Ubuntu выставлено значение 60, т.е. когда ваша система начинает задействовать более 40% оперативной памяти, то система начинает сбрасывать страницы в swap.

Другими словами. Если параметр vm.swappines выставлен в значение 0, то система не будет использовать swap до тех пор, пока не заполнится вся оперативная память. Если же значение выставлено в 100, то все процессы будут перемещаться в swap, что создаст сильную нагрузку на дисковую подсистему и будут проявляться явные задержки в работе самой ОС и приложений.

Как видно на скриншоте выше, при автоконфигурировании zRam система создала 4 раздела (столько сколько ядер в системе, т.к. операции в zRam однопоточные) и выделил на каждый раздел по 470 Мб (приблизительно), что составляет около 12% ОЗУ.

Если вас по каким-либо причинам не устраивает автоматическое создание zRam-разделов, то можно выполнить конфигурирование вручную.

/sbin/modprobe zram num_devices=4  echo 1073741824 > /sys/block/zram0/disksize  echo 1073741824 > /sys/block/zram1/disksize  echo 1073741824 > /sys/block/zram2/disksize  echo 1073741824 > /sys/block/zram3/disksize  /sbin/mkswap /dev/zram0  /sbin/mkswap /dev/zram1  /sbin/mkswap /dev/zram2  /sbin/mkswap /dev/zram3  /sbin/swapon /dev/zram0 -p 10  /sbin/swapon /dev/zram1 -p 10  /sbin/swapon /dev/zram2 -p 10  /sbin/swapon /dev/zram3 -p 10

Первая строка — определяем сколько разделов нужно создать. Обычно создают столько разделов, сколько ядер процессора. В моем случае это 4. Разделы нумеруются от 0. Поэтому номера создаваемых разделов: 0-3.

Строки 2-5, определяют какого размера (в байтах) должны быть zRam разделы. Я определи для всех равный объем (в данном случае 1Гб).

Строки 6-9, создают swap-раздел в созданных блочных устройствах.

Строки 10-11, активируют swap с приоритетом 10. Чем выше приоритет, тем раньше будет использоваться данный раздел. Для дискового swap желательно выставить приоритет значительно ниже чем у zRam разделов.

После всего этого проверяем результат с помощью команды swapon

swapon -s  

На этом все, настройка закончена.

comments powered by HyperComments

Android supports devices with 512 MB of RAM. This documentation is intended to help OEMs optimize and configure Android kernel 4.4 for low-memory devices. Several of these optimizations are generic enough that they can be applied to previous releases as well.

Android kernel 4.4 platform optimizations

Improved memory management

  • Validated memory-saving kernel configurations: Swap to zram.
  • Kill cached processes if about to be uncached and too large.
  • Don’t allow large services to put themselves back into the A Services classification (so they can’t cause the launcher to be killed).
  • Kill processes (even ordinarily unkillable ones such as the current IME) that get too large in idle maintenance.
  • Serialize the launch of background services.
  • Tune memory use of low-RAM devices: tighter out-of-memory (OOM) adjustment levels, smaller graphics caches.

Reduced system memory

  • Trimmed system_server and System UI processes (saved several megabytes).
  • Preload dex caches in Dalvik (saved several megabytes).
  • Validated JIT-off option (saves up to 1.5 MB per process).
  • Reduced per-process font cache overhead.
  • Introduced ArrayMap/ArraySet and used extensively in framework as a lighter-footprint replacement for HashMap/HashSet.

Procstats

Added a developer option to show memory state and app memory usage ranked by how often they run and the amount of memory consumed.

API

Added ActivityManager.isLowRamDevice() to allow apps to detect when running on low-memory devices and choose to disable large-RAM features.

Memory tracking

Added memtrack HAL to track graphics memory allocations, additional information in dumpsys meminfo, clarified summaries in meminfo (for example, reported free RAM includes RAM of cached processes, so that OEMs don’t try to optimize the wrong thing).

Build-time configuration

Low RAM Device flag

The ActivityManager.isLowRamDevice() flag determines if apps should turn off specific memory-intensive features that work poorly on low-memory devices.

For 512 MB devices, this flag is expected to return true. It can be enabled by the following system property in the device makefile.

 PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true 

Launcher Configs

The default wallpaper setup on launcher shouldn’t use live wallpaper. Low-memory devices shouldn’t pre-install any live wallpapers.

Kernel configuration

Tuning kernel/ActivityManager to reduce direct reclaim

Direct reclaim happens when a process or the kernel tries to allocate a page of memory (either directly or due to faulting in a new page) and the kernel has used all available free memory. This requires the kernel to block the allocation while it frees up a page. This in turn often requires disk I/O to flush out a dirty file-backed page or wait for lowmemorykiller to kill a process. This can result in extra I/O in any thread, including a UI thread.

To avoid direct reclaim, the kernel has watermarks that trigger kswapd or background reclaim. This is a thread that tries to free up pages so the next time a real thread allocates, it can succeed quickly.

The default threshold to trigger background reclaim is fairly low, around 2 MB on a 2 GB device and 636 KB on a 512 MB device. The kernel reclaims only a few megabytes of memory in background reclaim. This means any process that quickly allocates more than a few megabytes is going to quickly hit direct reclaim.

Support for a kernel tunable is added in the Android-3.4 kernel branch as patch 92189d47f66c67e5fd92eafaa287e153197a454f («add extra free kbytes tunable»). Cherry-picking this patch to a device’s kernel allows ActivityManager to tell the kernel to try to keep three full-screen 32 bpp buffers of memory free.

These thresholds can be configured with the config.xml framework.

-1

Tuning LowMemoryKiller

ActivityManager configures the thresholds of the LowMemoryKiller to match its expectation of the working set of file-backed pages (cached pages) required to run the processes in each priority level bucket. If a device has high requirements for the working set, for example if the vendor UI requires more memory or if more services have been added, the thresholds can be increased.

The thresholds can be reduced if too much memory is being reserved for file-backed pages, so that background processes are being killed long before disk thrashing would occur due to the cache getting too small.

-1

Swap to zram

zram swap can increase the amount of memory available in the system by compressing memory pages and putting them in a dynamically allocated swap area of memory. Since this is trading off CPU time for a small increase in memory, you should be careful about measuring the performance impact zram swap has on your system.

Android handles swap to zram at several levels:

  • First, the following kernel options must be enabled to use zram swap effectively:
    • CONFIG_SWAP
    • CONFIG_CGROUP_MEM_RES_CTLR
    • CONFIG_CGROUP_MEM_RES_CTLR_SWAP
    • CONFIG_ZRAM
  • Then, you should add a line that looks like this to your fstab:
     /dev/block/zram0 none swap defaults zramsize=,swapprio=
    • zramsize is mandatory and indicates how much uncompressed memory you want the zram area to hold. Compression ratios in the 30-50% range are usually observed.
    • swapprio is only needed if you don't have more than one swap area.

    Label the associated block device as a swap_block_device in the device-specific sepolicy/file_contexts so that it's treated properly by SELinux.

     /dev/block/zram0 u:object_r:swap_block_device:s0 
  • By default, the Linux kernel swaps in eight pages of memory at a time. When using zram, the incremental cost of reading one page at a time is negligible and may help if the device is under extreme memory pressure. To read only one page at a time, add the following to your init.rc:
     write /proc/sys/vm/page-cluster 0 
  • In your init.rc after the mount_all /fstab.X line, add:
     swapon_all /fstab.X 
  • The memory cgroups are automatically configured at boot time if the feature is enabled in the kernel.
  • If memory cgroups are available, ActivityManager marks lower-priority threads as being more swappable than other threads. If memory is needed, the Android kernel starts migrating memory pages to zram swap, giving a higher priority to the memory pages that have been marked by ActivityManager.

Carveouts, Ion, and contiguous memory allocation (CMA)

On low-memory devices, it's important to be mindful about carveouts, especially those that aren't fully used, such as a carveout for secure video playback. There are several solutions to minimize the impact of your carveout regions that depend on the exact requirements of your hardware.

If hardware permits discontiguous memory allocations, the Ion system heap allows memory allocations from system memory, eliminating the need for a carveout. Ion also attempts to make large allocations to eliminate translation lookaside buffer (TLB) pressure on peripherals. If memory regions must be contiguous or confined to a specific address range, the CMA can be used.

This creates a carveout that the system can also use for movable pages. When the region is needed, movable pages are migrated out of it, allowing the system to use a large carveout for other purposes when it's free. You can use CMA directly with the Ion CMA heap.

App optimization tips

  • Review Manage your app's memory and these blog posts:
  • Remove any unused assets from preinstalled apps using development/tools/findunused (this should help make the app smaller).
  • Use the PNG format for assets, especially when they have transparent areas.
  • If writing native code, use calloc() rather than malloc/memset.
  • Don't enable code that writes Parcel data to disk and reads it later.

Understand the various process states in Android

State Meaning Details
SERVICESERVICE_RESTARTING Apps that run in the background for app-related reasons. SERVICESERVICE_RESTARTING are the most common problems apps have when they run in the background too much. Use %duration * pss or %duration as a "badness" metric. Ideally, these apps shouldn't be running at all.
IMPORTANT_FOREGROUNDRECEIVER Apps running in the background (not directly interacting with the user). These add memory load to the system. Use the (%duration * pss) "badness" value to order these processes. However, many of these apps run for good reasons. The size of pss is an important part of their memory load.
PERSISTENT Persistent system process. Track pss to watch for these processes getting too large.
TOP The process the user is currently interacting with. pss is the important metric here, showing how much memory load the app creates while in use.
HOMECACHED_EMPTY The processes the system is keeping around in case they are needed again. These processes can be freely killed at any time and recreated if needed. The memory state (normal, moderate, low, critical) is computed based on how many of these processes the system is running. The key metric for these processes is the pss. In this state, these processes should decrease their memory footprint as much as possible to allow for the maximum total number of processes to be kept around. In this state, a well behaved app generally has a significantly smaller pss footprint than it does in the TOP state.
CACHED_ACTIVITYCACHED_ACTIVITY_CLIENT When compared with TOP, these show how well an app releases memory into the background. Excluding CACHED_EMPTY state makes this data better, because it removes situations when the process has started for some reasons besides interacting with the user. This eliminates dealing with the UI overhead CACHED_EMPTY gets when user-related activities.

Analysis

Analyzing app startup time

To analyze your app's startup time, run $ adb shell am start -P or --start-profiler and start your app. The profiler starts after the process is forked from the zygote and before any code is loaded into the fork.

Analyzing using bug reports

Bug reports contain several services, including batterystats, netstats, procstats, and usagestats, which can be used for debugging. Reports can include lines like this:

 ------ CHECKIN BATTERYSTATS (dumpsys batterystats --checkin) ------ 7,0,h,-2558644,97,1946288161,3,2,0,340,4183 7,0,h,-2553041,97,1946288161,3,2,0,340,4183 

Checking for any persistent processes

To check for any persistent processes, reboot the device and check the processes. Then, run the device for a few hours and check the processes again. There shouldn't be any long-running processes between the two checks.

Running longevity tests

To run longevity tests, run the device for longer durations and track the memory of the processes to determine if it increases or stays constant. Then create canonical use cases and run longevity tests on these scenarios.

Zram или compcache - экспериментальный модуль ядра Linux позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз. Работает это так: zram создает сжатое блочное устройство в ОЗУ которое чаще всего используется как swap или монтируется в tmp. При этом степень сжатия данных получается в среднем 3:1. Это означает что на 1 гигабайт подкачки будет использовано в 333 мегабайт физической памяти.

Активация zram

Поскольку это экспериментальный модуль, нужно его включить и пересобрать ядро. Модуль включается здесь:

Device Drivers ---> [*] Block devices ---> Compressed RAM block device support

Когда завершите с ядром нужно установить параметр загрузки ядра zram.num_devices который указывает максимальное количество сжатых устройств. Как добавить параметры ядра в Grub посмотрите в моей статье.

Настройка сжатия памяти Zram

Нам необходимо загрузить модуль ядра, создать блочные устройства, и подключить их куда следует. Есть несколько способов сделать это.

способ 1 с помощью скрипта

Для настройки и запуска модуля создадим скрипт zram.start и добавим его в автозагрузку. Например если мы хотим создать 4 сжатых устройства размером 1526 мегабайт и подключить их как swap скрипт будет выглядеть так:

!/bin/bash

modprobe zram num_devices=4

SIZE=1536 echo $(($SIZE*1024*1024)) > /sys/block/zram0/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram1/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram2/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram3/disksize

mkswap /dev/zram0 mkswap /dev/zram1 mkswap /dev/zram2 mkswap /dev/zram3

swapon /dev/zram0 -p 10 swapon /dev/zram1 -p 10 swapon /dev/zram2 -p 10 swapon /dev/zram3 -p 10

И соответственно скрипт для отключения - zram.stop:

!/bin/bash

swapoff /dev/zram0 swapoff /dev/zram1 swapoff /dev/zram2 swapoff /dev/zram3

echo 1 > /sys/block/zram0/reset echo 1 > /sys/block/zram1/reset echo 1 > /sys/block/zram2/reset echo 1 > /sys/block/zram3/reset

modprobe -r zram

Автозагрузка скриптов отличается в каждой системе инициализации, в systemd можно написать юнит, в upstart - добавить в rc.local, а в openrc есть директория /etc/local.d/. Ну в общем вы знаете как это делается в вашей системе.

Способ 2 без скриптов

В этом примере создадим три устройства, 2 из них подключим в swap, а одно смонтируем в tmp.

Загрузим модуль ядра используя /etc/modprobe.d/:

options zram num_devices=3

Создадим диски с помощью правил udev:

KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" KERNEL=="zram1", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" KERNEL=="zram2", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkfs.ext4 $env{DEVNAME}"

Если вы хотите использовать сжатие lz4 и ext4 без журналирования строчка будет выглядеть вот так:

KERNEL=="zram2", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{initstate}=="0", ATTR{comp_algorithm}="lz4", ATTR{disksize}="512M", RUN+="/sbin/mkfs.ext4 -O ^has_journal -L $name $env{DEVNAME}"

И наконец подключим их в /etc/fstab:

/dev/zram0 swap swap pri=16383 0 0 /dev/zram1 swap swap pri=16383 0 0 /dev/zram2 /tmp ext4 defaults 0 0

ОСТАВЬТЕ ОТВЕТ

Please enter your name here
Please enter your comment!