swapon
tener -p
interruptor que establece la prioridad. Puedo configurar:
swapon -p 32767 /dev/zram0
swapon -p 0 /dev/my-lvm-volume/swap
O en /etc/fstab:
/dev/zram0 none swap sw,pri=32767 0 0
/dev/my-lvm-volume/swap none swap sw,pri=0 0 0
EDITAR: Solo para una solución completa, esta línea puede ser útil como regla udev:
KERNEL=="zram0", ACTION=="add", ATTR{disksize}="1073741824", RUN="/sbin/mkswap /$root/$name"
Nota al margen:debido al bloqueo por CPU, es importante tener tantos zram-swaps como CPU (modprobe zram_num_devices=n zram) en lugar de uno grande. ¡RTFM!
Por alguna razón, parece haber muchas interpretaciones erróneas de https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Dice claramente:
2) Establecer el número máximo de flujos de compresión
Independientemente del valor pasado a este atributo, ZRAM siempre asignará múltiples flujos de compresión, uno por CPU en línea, lo que permite varias operaciones de compresión simultáneas. El número de flujos de compresión asignados disminuye cuando algunas de las CPU se desconectan. Ya no existe el modo de transmisión de compresión única, a menos que esté ejecutando un sistema UP o solo tenga 1 CPU en línea.
Para saber cuántas transmisiones están disponibles actualmente:
cat /sys/block/zram0/max_comp_streams
Pero hay un mito urbano común y persistente de que el máximo de flujos es 1.
Claramente no es cierto.
Los dos sistemas operativos en los que zram ha demostrado su eficacia Chrome OS y Android son un solo dispositivo. También modifican page-cluster
:
page-cluster
controla el número de páginas hasta las que se leen páginas consecutivas desde el intercambio en un solo intento. Esta es la lectura anticipada de la memoria caché de la página de intercambio.
La consecutividad mencionada no es en términos de direcciones virtuales/físicas, sino consecutivas en el espacio de intercambio, lo que significa que se intercambiaron juntas.
Es un valor logarítmico:establecerlo en cero significa "1 página", establecerlo en 1 significa "2 páginas", establecerlo en 2 significa "4 páginas", etc. Cero desactiva completamente la lectura anticipada de intercambio.
El valor predeterminado es tres (ocho páginas a la vez). Puede haber algunos pequeños beneficios al ajustar esto a un valor diferente si su carga de trabajo es intensiva en intercambios.
Los valores más bajos significan latencias más bajas para las fallas iniciales, pero al mismo tiempo fallas adicionales y retrasos de E/S para las siguientes fallas si hubieran sido parte de la lectura anticipada de páginas consecutivas.
— de la documentación del kernel para /proc/sys/vm/*
Así que usa echo "0" > /proc/sys/vm/page-cluster
para forzar una sola página.
Mucho parece tener su origen en zram_config, el paquete debian/ubuntu que, por alguna razón, parece tener muy poca correlación con los documentos del kernel para zram y ha generado una serie de susurros chinos que, en esencia, podrían estar completamente equivocados.
Con el intercambio de archivos, ¿crea una unidad de intercambio para cada núcleo? Tal vez eso pueda responder a sus preguntas. También para respaldar esto, Google Chrome OS y Android, que se emplean con éxito con el grupo de páginas anterior, ya que no coincide con un disco, por lo que se puede mejorar la latencia, dispositivos individuales.
Además, para un administrador de sistemas, ¿qué es importante para el uso real de la memoria o el uso de la memoria virtual? La mayoría de los ejemplos muestran la creación a través de disk_size e ignoran por completo mem_limit.disk_size=tamaño de la máquina virtual sin comprimir.mem_limit=límite de espacio de memoria real.
Hace que la elección de disk_size sea confusa, ya que es un tamaño máximo virtual que depende de la relación comp_alg y la sobrecarga del 0,1% del tamaño del disco cuando no está en uso y realmente es una estimación aproximada de mem_limit * (aproximadamente 2 - 4) de frugal vs. optimismo.
zram_config ni siquiera verifica el uso anterior del servicio y lo sobrescribe, mientras que una simple verificación de la clase zram sys como la siguiente lo hará.
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
}