По некоторым причинам, по-видимому, существует много неверных толкований https://www.kernel.org/doc/Documentation/blockdev/zram.txt.
В нем четко говорится:
2) Установить максимальное количество потоков сжатия.
Независимо от значения, переданного этому атрибуту, ZRAM всегда будет выделять несколько потоков сжатия - по одному на онлайн-процессоры - таким образом, разрешая несколько одновременных операций сжатия. Количество выделенных потоков сжатия уменьшается, когда некоторые из процессоров отключаются. Больше нет режима единого потока сжатия, если только вы не используете систему UP или не имеете только 1 ЦП в сети.
Чтобы узнать, сколько потоков доступно в данный момент:
cat /sys/block/zram0/max_comp_streams
Но существует распространенный, постоянный городской миф о том, что максимальное количество потоков равно 1.
Это явно не правда.
Две ОС, где Zram доказала свою эффективность, Chrome OS и Android - это одно устройство. Также они настраивают page-cluster
:
page-cluster
управляет количеством страниц, до которых последовательные страницы считываются из свопа за одну попытку. Это аналог подкачки для чтения кеша страниц.
Упомянутая последовательность не в терминах виртуальных / физических адресов, а в последовательности подкачки - это означает, что они были заменены вместе.
Это логарифмическое значение - установка его в ноль означает «1 страница», установка в 1 означает «2 страницы», установка в 2 означает «4 страницы» и т. Д. Ноль полностью отключает чтение подкачки.
Значение по умолчанию - три (восемь страниц за раз). Может быть несколько небольших преимуществ при настройке этого значения на другое, если ваша рабочая нагрузка требует интенсивного обмена.
Более низкие значения означают более низкие задержки для начальных неисправностей, но в то же время дополнительные неисправности и задержки ввода-вывода для следующих неисправностей, если бы они были частью этих последовательных страниц, которые могли бы привести к чтению.
- из документации ядра для/proc/sys/vm/*
Так что используйте, echo "0" > /proc/sys/vm/page-cluster
чтобы заставить одну страницу.
Похоже, многое происходит из zram_config пакета debian / ubuntu, который по некоторым причинам, похоже, очень мало коррелирует с документами ядра для zram и породил серию китайских шепотов, которые по сути могут быть совершенно неверными.
С помощью файла подкачки вы создаете диск подкачки для каждого ядра? Может быть, это может ответить на ваши вопросы. Также, чтобы поддержать это, Googles Chrome OS & Android, которые успешно работают с вышеуказанным кластером страниц, поскольку он не соответствует диску, так что задержка может быть улучшена для отдельных устройств.
Также для системного администратора, что важно фактическое использование памяти или использование памяти? Большинство примеров показывают создание через disk_size и полностью игнорируют mem_limit. disk_size = несжатый размер виртуальной машины. mem_limit = фактический предел памяти.
Это как-то делает выбор параметра disk_size запутанным, поскольку его виртуальный максимальный размер зависит от соотношения comp_alg и накладных расходов 0,1% от размера диска, когда он не используется, и действительно является приблизительным значением mem_limit * (приблизительно 2 - 4) относительно экономичного оптимизм.
zram_config даже не проверяет предыдущее использование сервиса и перезаписывает, в то время как простая проверка класса zram sys, как показано ниже.
createZramSwaps () {
totalmem=$(free|awk '/^Mem:/{print $2}')
mem=$((( totalmem * MEM_FACTOR / 100 / BIG_CORES ) * 1024))
# Check Zram Class created
ZRAM_SYS_DIR='/sys/class/zram-control'
if [ ! -d "${ZRAM_SYS_DIR}" ]; then
modprobe zram
RAM_DEV='0'
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
else
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
fi
if [ "$BIG_CORES" -gt 1 ];then
for i in $(seq $((BIG_CORES - 1))); do
RAM_DEV=$(cat /sys/class/zram-control/hot_add)
echo ${COMP_ALG_SWAP} > /sys/block/zram${RAM_DEV}/comp_algorithm
echo ${mem} > /sys/block/zram${RAM_DEV}/disksize
mkswap /dev/zram${RAM_DEV}
swapon -p ${SWAP_PRI} /dev/zram${RAM_DEV}
done
fi
}