Файловые системы Linux. Tmpfs и Zram.

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

Цикл статей о файловых системах Linux:


  1. Файловые системы Linux. Ext4.

  2. Файловые системы Linux. Btrfs.

  3. Файловые системы Linux. Tmpfs и Zram.

Tmpfs: используйте RAM как обычный каталог.

В Windows есть утилиты, которые создают диски в оперативке — так называемые Ramdisk'и. В Linux никаких утилит для этого не требуется, эта функциональность — часть ядра, и называется она tmpfs. Посмотрим, используется ли tmpfs в Linux Mint:

Как видно по первой строке, Udev держит файлы устройств именно в tmpfs. Также туда монтируются каталоги со служебными файлами. Такую же картину вы увидите практически во всех дистрибутивах. Вот, например, Arch Linux:

Здесь в tmpfs примонтирован ещё и каталог /tmp, в котором лежат временные файлы, кэши, и т. д. Вырисовывается смысл использования tmpfs — файлы, для которых нужна максимальная скорость доступа, и которые можно безболезненно потерять при отключении питания. Ведь оперативная память в тысячи раз быстрее самых быстрых SSD, но теряет содержимое при отключении.

Использовать tmpfs для своих целей не легко, а очень легко. Выбираете удобный путь в файловой системе и прописываете его в /etc/fstab (перед этим не забудьте создать соответствующий каталог):

В первом столбце должно быть указано устройство, в нашем случае это tmpfs. Второй столбец — каталог монтирования. В третьем обозначается тип ФС, у нас это снова tmpfs. Опция nodev отключает создание устройств в монтируемом каталоге, а nosuid запрещает повышение прав — всё это в целях безопасности. Если оттуда не планируется запускать программы, можно добавить ещё noexec. Наконец, опция size задаёт максимальный размер каталога tmpfs. Без этой опции он равен половине оперативной памяти.

После перезагрузки созданный «раздел» tmpfs отображается прямо на рабочем столе:

Для чего можно его использовать? Вариантов много:

  • держать на нём кэш браузера, временные системные файлы — например, монтировать в tmpfs каталог /tmp;
  • разместить обрабатываемые файлы типа исходников, фотографий, и т. д. — время обработки ощутимо сократится;
  • под хранение одноразовых секретных файлов — нажатие кнопки Reset уничтожит их без всяких следов;
  • вынести на него «тяжёлую» программу, чтобы ускорить её запуск — это может быть игра или IDE.

Zram: tmpfs + прозрачное сжатие.

С ростом мощности процессоров в чью-то голову неизбежно пришла мысль: а что если взять tmpfs и примотать к ней скотчем сжатие на лету? Так появилась технология compcache, которая эволюционировала в Zram.

Суть её проста: в оперативке создаётся полноценное блочное устройство с обычной файловой системой, но все данные перед записью на него автоматически сжимаются. Обычно используется алгоритм lz4, потому что он очень и очень быстрый, и при этом сжимает неплохо.

В Ubuntu и производных дистрибутивах нужно установить пакет zram-config:

sudo apt install zram-config

Перезагружаемся и видим, что утилита создала два накопителя Zram, а на них — разделы подкачки:

Что это даёт? Обратите внимание, что приоритет Zram-свопа выше приоритета обычного свопа. Это значит, что при исчерпании памяти будет сначала наполняться Zram. А так как оперативная память в тысячи раз быстрее HDD или SSD, то даже при активном свопинге система не будет адски тормозить!
При этом в Zram-устройство размером в 1 Гб может уместиться около 3 Гб данных, благодаря сжатию lz4. Так что, используя Zram, вы фактически увеличиваете размер оперативной памяти. Пример: у вас есть 4 Гб оперативки, половину из них вы отдаёте под Zram-своп. Благодаря сжатию, из 2 Гб Zram вы получаете около 6 Гб фактического места. И эти 6 Гб, хоть и являются свопом, но работают со скоростью оперативной памяти!

Алгоритм сжатия lz4 мало нагружает процессор — частоты в 1 ГГц уже достаточно, чтобы не ощущать затрат на сжатие. Поэтому Zram с большим эффектом используется в смартфонах: там часто стоят мощные процессоры, но не хватает оперативки. Впрочем, Zram актуален и на десктопах — мало кому нравятся рывки в работе ОС при исчерпании оперативной памяти.