GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar correctamente zram y swap

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
}

Linux
  1. ¿Qué es un nombre de host bonito y cómo configurarlo?

  2. Cómo establecer una dirección IP estática y configurar la red en Linux

  3. Cómo instalar y configurar mysql 8 en Ubuntu 20.04

  4. Cómo configurar o cambiar la zona horaria en Ubuntu 20.04 y 21.04

  5. ¿Cómo configuro un archivo de intercambio cifrado en Linux?

Cómo crear y usar un archivo de intercambio en Linux

Cómo instalar y configurar Jenkins en Fedora 35

Cómo instalar y configurar Jenkins en Debian 11

Cómo configurar la fecha y la hora en Linux

Cómo configurar y desactivar variables de entorno en Linux

Cómo instalar y configurar WordPress con Ansible