Использование zRam для увеличения количества доступной памяти под Linux
Уже 2 месяца использую на своих компьютерах модуль zRam и хочу поделиться результатами. На практике он позволил мне не используя раздел подкачки, и не получая видимого замедления работы компьютера увеличить размер оперативной памяти в 2.5-3 раза. На сервере виртуалок тот же подход позволил очень ощутимо увеличить отзывчивость при нехватке памяти.
Заинтересовавшихся прошу под кат.
zRam это экспериментальный модуль ядра Linux (ранее известный как «compcache»). Он увеличивает производительность путем предотвращения подкачки страниц на диск, используя сжатое блочное устройство в оперативной памяти, пока не появится необходимость использовать файл подкачки на жестком диске. Скорость обмена с оперативной памятью быстрее, чем с жестким диском, следовательно zRam позволяет Linux производить большее число операций подкачки, особенно на старых компьютерах с малым объемом оперативной памяти.
Для пользователя все выглядит так: для начала нужно загрузить модуль (предварительно скомпилировав если он отсутствует)
В num_devices задается количество сжатых блочных устройств, которое будет создано.
Для наиболее оптимального использования CPU стоит учесть: сжатие каждого устройства zram однопоточное. Потому я создаю их по количеству ядер.
При настройке модуля задается фиксированный размер НЕ сжатых данных в байтах
В итоге будет создано устройство /dev/zram0 заданного размера
Данные записанные на него будут прозрачно сжаты в памяти. Что делать с ним далее — уже ваш выбор, я на этих устройствах создаю разделы подкачки.
Далее уже ядро думает само какие данные туда складывать в зависимости от того как часто вы к ним обращаетесь и как много памяти свободно.
Мой опыт показывает, что степень сжатия обычно 1 к 3.
На практике это позволило на ноутбуке в 8Gb памяти вынести компиляцию libreoffice в tmpfs. (она требует 7 Гбайт временных файлов и примерно 1 Гбайт памяти потребляет каждый поток gcc при сборке).
Область применения такой идеи крайне широка:
- нетбуки: у девушки ноутбук в двух-ядерным Atom-мом. И всего лишь 2 гигабайта оперативной памяти (больше не вставить). В итоге одна «наглая рыжая морда» все время съедала всю память и посылала машину в swap. Подключил zRam и девушка довольна
- Сервера виртуализации: прозрачное сжатие памяти виртуальных машин может позволить выполнять большее число виртуальных машин одновременно: у нас есть сервер используемый для тестирования веб-приложения под различными конфигурациями клиентов (операционки, браузеры, версии плагинов к браузерам, настройки локалей и кодировок). Прохождение тестов на нем всегда было «задумчивым» процессом. Использование zRam позволило уменьшить время прохождение тестов с 30 минут до 18
Дополнение:
Изначально разработка велась под названием compcache, и первые рабочие версии были сделаны для ядра 2.6.26(Июль 2008)
Начиная с декабря 2009 года и ядра 2.6.33 оно доступно в ядре, в разделе Staging. Для более старый ядер патчи все еще доступны на вышеуказанном сайте.
В ядре 3.8 должно было быть вынесено из Staging, но это не произошло.
Источник
Нехватка оперативной памяти в Linux на рабочем ПК: оптимизация и действия при зависании
На любой операционной системе часто не хватает оперативной памяти. Рассмотрим, как и сэкономить на увеличении аппаратных ресурсов машины с Linux, и продолжить более-менее комфортно пользоваться компьютером с Linux в условиях нехватки памяти.
Типична такая ситуация: есть своп (swap, раздел подкачки), который начинает использоваться при нехватке оперативной памяти, и размещен он на HDD, то есть жестком диске с низкой скоростью чтения информации. В таких ситуациях операционная система начинает тормозить, подвисает курсор мыши, сложно переключиться в соседнюю tty и т.д. Почему? Потому что планировщик ядра Linux не может выполнить запрос на какое-то действие в запущенной программе, пока не получит доступ к ее оперативной памяти, выполнить следующее действие тоже не может, образовывается очередь из запросов на чтение с диска, и система «подвисает» именно потому, что обработка очереди происходит гораздо медленнее, чем этого хочет пользователь.
Если в такой момент запустить htop или uptime , то показатель Load Average (LA) будет очень высоким, несмотря на низкую загруженность ядер процессора. Сочетание высокого Load Average и низкой загрузки процессора говорят о забитой очереди процессора.
Часто в интернете советуют изменить параметр ядра Linux vm.swappiness . Узнать его текущее значение на вашей системе можно так:
Ответ будет 60 почти наверняка. Это значит, что ядро Linux начинает свопить редко используемые страницы оперативной памяти, когда использование свободной оперативной памяти достигает 100%-60%=40%. Часто встречаются рекомендации поставить, например, vm.swappiness=10, чтобы своп не начинал использоваться, пока загрузка ОЗу не достигнет 90%. На самом деле не нужно трогать vm.swappiness, вы не умнее разработчиков ядра Linux, которые не просто так поставили 60 по умолчанию. Почему?
Представьте, что у вас всего 4 ГБ оперативной памяти, из них прямо сейчас занято 3 ГБ, vm.swappiness=10, своп на жестком диске (HDD) занят на 0%, и вы открываете тяжелый сайт в браузере, для чего требуется больше, чем имеющийся свободный 1 ГБ, например, 2 ГБ. Операционная система начинает в экстренном порядке отправлять в своп как минимум 0.5 ГБ (а по факту больше), чтобы можно было выделить браузеру необходимое количество оперативной памяти. Эта процедура становится самой приоритетной задачей, и придется пожертвовать даже движениями курсора мыши, чтобы ее выполнить как можно быстрее. Вы ждете. Проходит 5 минут, и система развисает, потому что окончила процедуру 100% загрузки очереди доступа к медленному жесткому диску, на котором размещена оперативная память (своп). При дефолтном vm.swappiness=60 редко используемые страницы памяти сбрасываются в своп заблаговременно, и резкого зависания на 5-10 минут не происходит.
UPD. В комментарии подсказывают, что это не точное описание работы vm.swappiness.
zram и приоритеты свопов
Рекомендую включить zram — прозрачное сжатие содержимого оперативной памяти. В Ubuntu это автоматизировано, достаточно установить пакет:
sudo apt install zram-config
Здесь и далее для дистрибутивов Rosa, Fedora все то же самое, но вместо zram-config —
Сервис systemd zram-config на Ubuntu будет автоматически добавлен в автозагрузку при установке пакета и запущен при перезагрузке системы. Для запуска вручную:
sudo systemctl start zram-config
sudo systemctl stop zram-config
Удаления из автозапуска:
sudo systemctl disable zram-config
Добавление в автозапуск:
sudo systemctl enable zram-config
При запуске zram-config берет число, равное 50% всего объема оперативной памяти, далее делает по одному виртуальному устройству /dev/zramN, где N начинается с 0, для каждого ядра процессора, а объем каждого /dev/zramN равен 50% всей оперативной памяти, деленному на количество ядер процессора. Так делалается для распараллеливания сжатия содержимого оперативной памяти по ядрам процессора; насколько я знаю, на современных ядрах Linux достаточно одного устройства /dev/zramN, а распараллелится оно само, но меня полностью устраивает искоробочная работа zram-config, и предпочитаю не лезть в нее руками.
Команда swapon -s выведет список всех задействованных свопов с указанием их приоритета. Первым используется тот своп, у которого приоритет выше. Если у вас уже есть дисковый своп и включен zram, то в случае с описанным выше пакетом-автокофигуратором приоритеты из коробки будут правильными. Например, у дискового свопа будет -1, а все /dev/zramN — 5. Таким образом, сначала используется zram, и только потом — диск.
Кстати, zram часто применяется на смартфонах, какую-либо на глаз заметную нагрузку на процессор при дефолтном методе сжатия lz4 он не создает.
Также приоритет свопа можно указать в /etc/fstab . Покажу на примере, как это сделано на моем рабочем компьютере с 6 ГБ ОЗУ.
Опцией монтирования pri=X заданы приоритеты свопов. Если еще включить zram, то картинка будет такой:
В первую очередь будет свопиться в zram, то есть сжиматься внутри оперативной памяти без использования внешнего устройства для свопа, во вторую — использовать небольшой своп на SSD. Почти никогда не будет использоваться 6 ГБ свопа на HDD, однако они понадобятся, если я захочу отправить компьютер в спящий режим в условиях большой загрузки оперативной памяти. (На самом деле у меня отключен zram).
На офисных ПК с 4 ГБ ОЗУ (Xubuntu 16.04, 17.10) всегда ставлю пакет zram-config . Chromium, по наблюдениям, на глаз, очень хорошо сжимается в оперативной памяти, в результате чего zram позволяет сделать работу намного более комфортной без модернизации железа.
Быстро вырубить программу, перегружающую ОЗУ. Запас ОЗУ для SSH
Бывает такое, что даже при vm.swappiness=60 какому-то черту, как правило, браузеру, требуется очень много оперативной памяти, и система подвисает. Решается очень просто: сочетание клавиш Alt+SysRq(PrintScreen)+F заставляет oom_killer принудительно включиться и вырубить процесс, который на момент вызова занимает больше всего памяти. Строго 1 процесс на 1 вызов, и строго обязательно что-то будет убито. Если много раз подряд нажмете, то, скорее всего, перезапустится графическая сессия. Событие убиения процесса отражается в dmesg красным цветом.
Однако эта штука, называющаяся Magic SysRq, из коробки отключена в большинстве дистрибутивов, потому что непривилегированный пользователь может убить абсолютно любой процесс. За это отчечает параметр ядра kernel.sysrq , узнать его текущее значение можно так:
Для работы Alt+SysRq+F нужно kernel.sysrq=1. Для этого отредатируем параметры ядра, расположенные в файлах /etc/sysctl.conf (обычно симлинк на /etc/sysctl.d/99-sysctl.conf) и /etc/sysctl.d/*.conf. Лучше всего создать отдельный файл:
sudo nano /etc/sysctl.d/99-dumalogiya.conf
Нажмем Ctrl+O, Enter для сохранения.
В случае с браузером Chromium Alt+SysRq(PrintScreen)+F будет вырубать по одной вкладке, не закрывая сам браузер, что очень удобно.
Сочетания клавиш Magic SysRq перехватываются напрямую ядром Linux, поэтому работают даже когда из-за очереди процессора подвисает X-сервер.
Источник
Zram linux что это
Если вы не знаете, почему SWAP нужен даже если вам хватает объёма RAM, настоятельно рекомендую прочитать эту статю:
https://habrahabr.ru/company/flant/blog/348324 (https://vk.com/multi_linux_community?w=wall-114916478..).
И так, мы выяснили, почему SWAP нужен всем, но это не отменят того, что HDD работают медленнее всех прочих видов памяти, поэтому плохо подходят для таких целей, а SSD имеют ограниченный ресурс перезаписей, поэтому использование SWAP на них будет приводить к ускоренному их износу.
Поэтому если у вас достаточно большой объём RAM, вы можете разместить ваш SWAP в RAM. Тогда это уже будет называться ZRAM. Это даст вам наивысшую скорость работы подкачки, потому что RAM является самым быстрым видом памяти в компьютере и отсутствие необходимости для SWAP использовать SSD и/или HDD.
Модуль ядра zram (ранее называемый compcache) обеспечивает сжатое блочное устройство в ОЗУ. Если вы используете его в качестве устройства подкачки, оперативная память сможет вмещать в себе гораздо больше информации, поскольку эта информация будет сживаться на лету, но из-за этого нагрузка на CPU станет больше, чем обычно. Тем не менее, это намного быстрее, чем использование жесткого диска в качестве SWAP. Если система часто обращается к подкачке (SWAP), это может улучшить отзывчивость. Использование ZRAM также является хорошим способом сокращения количества циклов чтения/записи на диск из-за обмена данными со SWAP на SSD, либо на HDD.
Аналогичные преимущества (при одинаковых затратах) могут быть достигнуты с использованием zswap, а не zram. Эти двое, как правило, схожи в своём предназначении, но работают они несколько по-разному: zswap работает как сжатый кеш RAM, но они оба не требуют (и не позволяют) расширенной конфигурации пользовательского пространства. Кроме того, zswap работает только в паре со swap на диске, а zram работает только с оперативной памятью.
Пример настройки. Чтобы настроить одно сжатое zram-устройство lz4 с емкостью 32 ГБ и приоритетом выше обычного (только для текущего сеанса):
# modprobe zram
# echo lz4 > /sys/block/zram0/comp_algorithm
# echo 32G > /sys/block/zram0/disksize
# mkswap —label zram0 /dev/zram0
# swapon —priority 100 /dev/zram0
Чтобы снова отключить его, перезагрузитесь или выполните:
Источник
Zram linux что это
Linux отлично управляется с оперативной памятью — если посмотреть в диспетчере задач, можно увидеть, что почти вся оперативка занята под файловый кэш. Но нет предела совершенству — свободную оперативную память можно взять под свой контроль, значительно ускорив работу системы и отдельных программ.
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:
Перезагружаемся и видим, что утилита создала два накопителя Zram, а на них — разделы подкачки:
Что это даёт? Обратите внимание, что приоритет Zram-свопа выше приоритета обычного свопа. Это значит, что при исчерпании памяти будет сначала наполняться Zram. А так как оперативная память в тысячи раз быстрее HDD или SSD, то даже при активном свопинге система не будет адски тормозить!
При этом в Zram-устройство размером в 1 Гб может уместиться около 3 Гб данных, благодаря сжатию lz4. Так что, используя Zram, вы фактически увеличиваете размер оперативной памяти. Пример: у вас есть 4 Гб оперативки, половину из них вы отдаёте под Zram-своп. Благодаря сжатию, из 2 Гб Zram вы получаете около 6 Гб фактического места. И эти 6 Гб, хоть и являются свопом, но работают со скоростью оперативной памяти!
Алгоритм сжатия lz4 мало нагружает процессор — частоты в 1 ГГц уже достаточно, чтобы не ощущать затрат на сжатие. Поэтому Zram с большим эффектом используется в смартфонах: там часто стоят мощные процессоры, но не хватает оперативки. Впрочем, Zram актуален и на десктопах — мало кому нравятся рывки в работе ОС при исчерпании оперативной памяти.
Источник