Я использую zram на своем компьютере в качестве сжатой подкачки, поддерживаемой RAM. Когда системе необходимо что-то поменять, замена ее на файл подкачки с поддержкой zram более или менее эквивалентна сжатию этих данных в памяти для освобождения места. Это делает замену в большинстве случаев очень быстрой по сравнению с заменой на диске. Из-за этого мне интересно, можно ли добиться какой-то производительности, побуждая систему более агрессивно выменять неиспользуемые ресурсы, поскольку она может сделать это, не попав на диск?
Так кто-нибудь возился с, скажем, установкой vm.swappiness
100 при использовании zram? Было бы это желательно?
sysctl -w vm.swappiness=100
Ответы:
Я действительно не рекомендовал бы ставить swappiness выше. Общий механизм в ядре состоит в том, что он помещает страницы (кусок памяти) в раздел подкачки, чтобы освободить часть памяти для других запущенных задач.
Первая «проблема», когда ядро хочет, чтобы n страниц было освобождено, m (при m <n, m - это количество сжатых страниц, необходимых для хранения n), вновь создаются в ОЗУ, я не уверен, может ли это нарушить работу ядра или не.
В любом случае, если у вас есть страницы в разделе подкачки, возможно, вы позже используете приложение с некоторыми из его страниц в разделе подкачки. Ядро возвращает эти страницы в физическую память, но не удаляет их из свопинга (что при стандартном свопе можно рассматривать как кеширование , поэтому, когда приложение возвращается в фоновый режим, ядру не нужно записывать эти страницы обратно). в медленный своп). Однако с zram это, возможно, не мудрый трюк, потому что тогда у вас в памяти есть m страниц в zram + n страниц, которые вернулись в память!
Ядро обычно имеет «общую память», которую оно может использовать для своей работы. Когда вы добавляете zram, он учитывается только в памяти «swap», как это было бы с любым дисковым обменом, но это уменьшало фактическую «общую память», а ядро этого не ожидает / не ожидает. Иногда вы можете иметь странное и нежеланное поведение из-за этого!
С zram было бы хорошо, чтобы ядро не слишком сильно менялось в этой области, когда оно находится под давлением памяти. И у вас всегда должен быть реальный раздел подкачки жесткого диска, по крайней мере, больше, чем ваш максимальный размер zram, чтобы система не получала OOM, тогда как в то же время вы увидите много свободного места, о чем сообщает
free
!источник
Краткий ответ:
vm.swappiness=100
это подходящее значение для zram (по крайней мере, в Debian Stretch с Linux 4.9, я считаю, что это лучшее значение)Я уже проверил
vm.swappiness=100
для меня.Я думаю, что вы можете сделать несколько простых тестов, чтобы убедиться, какое значение лучше для вас.
Также я сделал еще одну простую программу для проверки этого вопроса. x На моей машине очень низкое
vm.swappiness
значение (например,vm.swappiness=1
) вызовет очевидную проблему с отзывчивостью.О
SwapCached
в/proc/meminfo
:Во-первых, попробуйте
vm.page-cluster=0
, это может уменьшить бесполезностьSwapCached
подкачки.SwapCached может ускорить zram так же, как устройство подкачки без zram
SwapCached
может повторно использовать (бесплатно) при необходимости:источник
Страницы должны быть выгружены (на диск), когда память заполнена. Если вы используете память, чтобы создать место для замены страниц, когда память заполнена, можно подумать, что это лучше, чем если бы сжатие имело значение (и тогда было бы естественно сжать память напрямую, а не проходить через нее). обмен). Думаю, нужно было бы это сравнить, поскольку компьютеры все быстрее сжимают и распаковывают по сравнению со скоростью памяти.
источник
vm.swappiness
настроено ли значение для свопа на диске и стоит ли его менять, если я в основном буду использовать своп на zram.