ZRAM/ZSWAP: различия между версиями
Дым (обсуждение | вклад) (→ZRAM) |
Дым (обсуждение | вклад) (→ZRAM) |
||
Строка 105: | Строка 105: | ||
Модуль ядра Linux, ранее известный как compcache. Создаёт в оперативной памяти сжатое блочное устройство (другими словами, RAM-диск со сжатием данных «на лету»), которое может использоваться, например, как устройство подкачки страниц, хранения временных файлов ({{path|/tmp}}) или же просто как RAM-диск общего назначения. | Модуль ядра Linux, ранее известный как compcache. Создаёт в оперативной памяти сжатое блочное устройство (другими словами, RAM-диск со сжатием данных «на лету»), которое может использоваться, например, как устройство подкачки страниц, хранения временных файлов ({{path|/tmp}}) или же просто как RAM-диск общего назначения. | ||
Хотя стоимость оперативной памяти сейчас относительно низкая, zRam всё же позволяет получить преимущества на компьютерах с малым количеством оперативной памяти, при виртуализации и во встраиваемых системах, использующих флеш-память, которая имеет ограниченное количество циклов перезаписи.[1] Скорость обмена с оперативной памятью выше, чем с жёстким диском, поэтому | Хотя стоимость оперативной памяти сейчас относительно низкая, zRam всё же позволяет получить преимущества на компьютерах с малым количеством оперативной памяти, при виртуализации и во встраиваемых системах, использующих флеш-память, которая имеет ограниченное количество циклов перезаписи.[1] Скорость обмена с оперативной памятью выше, чем с жёстким диском, поэтому ZRAM, с учётом сжатия, как правило, позволяет Linux'у повысить производительность. При этом использование алгоритмов сжатия увеличивает нагрузку на центральный процессор, но освобождает значительное количество оперативной памяти по сравнению с использованием обычного RAM-диска. | ||
Использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API — чаще всего LZO или LZ4. | Использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API — чаще всего LZO или LZ4. | ||
ZRAM часто путают со сходным модулем zswap, который сжимает данные, перехватывая попытки записи страниц памяти в swap-раздел на диске. Но в отличие от zswap, до версии ядра 4.14 использовавшееся в качестве раздела подкачки страниц памяти zram-устройство не имело возможности выгружать страницы памяти в какое-либо резервное хранилище. | |||
Начиная с версии ядра 4.14 пользователь имеет возможность указать для zram-устройства любое другое блочное устройство в качестве резервного хранилища, в которое могут выгружаться несжимаемые/неиспользуемые страницы памяти. При этом выгрузка страниц в резервное хранилище происходит в несжатом виде и, в отличие от ZSWAP, только по команде администратора системы | |||
==Недостатки zram как раздела подкачки== | ==Недостатки zram как раздела подкачки== | ||
При наличии в системе нескольких разделов подкачки zram-устройство, использующееся в качестве раздела подкачки страниц памяти, будет иметь более высокий приоритет, таким образом все выгружаемые страницы попадут в первую очередь в zram-устройство. При переполнении этого раздела вновь выгружаемые страницы будут попадать в следующие, более медленные, swap-разделы, в результате чего растёт вероятность возникновения LRU-инверсии. | |||
При наличии в системе нескольких разделов подкачки zram-устройство, использующееся в качестве раздела подкачки страниц памяти, будет иметь более высокий приоритет, таким образом все выгружаемые страницы попадут в первую очередь в zram-устройство. При переполнении этого раздела вновь выгружаемые страницы будут попадать в следующие, более медленные, swap-разделы, в результате чего | |||
Таким образом, использование zram-устройства в качестве раздела подкачки страниц имеет смысл при отсутствии в системе разделов подкачки других типов. | Таким образом, использование zram-устройства в качестве раздела подкачки страниц имеет смысл при отсутствии в системе разделов подкачки других типов. | ||
==Настройка== | |||
== Настройка == | |||
{{Примечание|Для этой технологии своп-раздел не обязателен, но если таковой наличествует, то по заполнению сжатого свопа в памяти всё остальное начнёт свопиться уже на накопитель.}} | {{Примечание|Для этой технологии своп-раздел не обязателен, но если таковой наличествует, то по заполнению сжатого свопа в памяти всё остальное начнёт свопиться уже на накопитель.}} | ||
Версия от 11:00, 15 июля 2023
ZSWAP
Модуль ядра Linux, который сжимает данные, перехватывая попытки записи страниц памяти в swap-раздел на диске. Интегрирован в поставку ядра начиная с версии 3.11. Использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API.
Увеличивает скорость подкачки страниц памяти в системе путём предотвращения выгрузки их на физический носитель, сжимая страницы и размещая их в оперативке до тех пор, пока не появится необходимость использовать реальный файл подкачки на накопителе. Фактически выступает кэшем страниц между памятью и разделом подкачки. Страницы, выгружаемые в реальный раздел не сжимаются. За счет того, что сжатая страница кэшируется в памяти и даже может быть никогда не выгружена в реальный раздел подкачки, уменьшается количество операций ввода-вывода, а следовательно, уменьшается износ физических носителей, что особенно актуально для SSD.
Включить её можно, конечно, параметром ядра, но вовсе не обязательно — достаточно отправить правильную букву в нужный файл:
# echo Y >/sys/module/zswap/parameters/enabled
Юнит запуска/перезапуска/остановки:
развернуть/lib/systemd/system/zswap.service |
---|
Посмотреть текущие настройки и статистику можно скриптом, разместив его по доступному для рута пути, соответствующему значению в юните:
развернуть/usr/bin/zswap |
---|
развернутьПример вывода скрипта |
---|
ZRAM
Модуль ядра Linux, ранее известный как compcache. Создаёт в оперативной памяти сжатое блочное устройство (другими словами, RAM-диск со сжатием данных «на лету»), которое может использоваться, например, как устройство подкачки страниц, хранения временных файлов (/tmp) или же просто как RAM-диск общего назначения.
Хотя стоимость оперативной памяти сейчас относительно низкая, zRam всё же позволяет получить преимущества на компьютерах с малым количеством оперативной памяти, при виртуализации и во встраиваемых системах, использующих флеш-память, которая имеет ограниченное количество циклов перезаписи.[1] Скорость обмена с оперативной памятью выше, чем с жёстким диском, поэтому ZRAM, с учётом сжатия, как правило, позволяет Linux'у повысить производительность. При этом использование алгоритмов сжатия увеличивает нагрузку на центральный процессор, но освобождает значительное количество оперативной памяти по сравнению с использованием обычного RAM-диска.
Использует алгоритмы сжатия, предоставляемые модулем Linux Crypto API — чаще всего LZO или LZ4.
ZRAM часто путают со сходным модулем zswap, который сжимает данные, перехватывая попытки записи страниц памяти в swap-раздел на диске. Но в отличие от zswap, до версии ядра 4.14 использовавшееся в качестве раздела подкачки страниц памяти zram-устройство не имело возможности выгружать страницы памяти в какое-либо резервное хранилище.
Начиная с версии ядра 4.14 пользователь имеет возможность указать для zram-устройства любое другое блочное устройство в качестве резервного хранилища, в которое могут выгружаться несжимаемые/неиспользуемые страницы памяти. При этом выгрузка страниц в резервное хранилище происходит в несжатом виде и, в отличие от ZSWAP, только по команде администратора системы
Недостатки zram как раздела подкачки
При наличии в системе нескольких разделов подкачки zram-устройство, использующееся в качестве раздела подкачки страниц памяти, будет иметь более высокий приоритет, таким образом все выгружаемые страницы попадут в первую очередь в zram-устройство. При переполнении этого раздела вновь выгружаемые страницы будут попадать в следующие, более медленные, swap-разделы, в результате чего растёт вероятность возникновения LRU-инверсии.
Таким образом, использование zram-устройства в качестве раздела подкачки страниц имеет смысл при отсутствии в системе разделов подкачки других типов.
Настройка
В дистрибутиве уже есть пакет по фамилии alterator-zram-swap
для работы этого типа оптимизации памяти, но он:
- несколько выморочно высчитывает желаемый размер сжатого свопа;
- не учитывает уже, возможно, задействованной и несовместимой с ним технологии
zswap
(см. п. выше); - обременён двумя отдельными скриптами запуска и останова службы, когда достаточно одного на всё про всё.
Пакет, в общем-то, и не нужен: достаточно всего пары файлов — юнита и скрипта к нему. Ниже приведён мой вариант обоих, не из пакета.
Юнит:
развернуть/lib/systemd/system/zram-swap.service |
---|
Скрипт:
развернуть/usr/bin/zram-swap |
---|