Por alguna razón, parece haber mucha mala interpretación de https://www.kernel.org/doc/Documentation/blockdev/zram.txt
Establece claramente:
2) Establecer el número máximo de secuencias de compresión
Independientemente del valor pasado a este atributo, ZRAM siempre asignará múltiples secuencias de compresión, una por CPU en línea, permitiendo así varias operaciones de compresión simultáneas. El número de secuencias de compresión asignadas disminuye cuando algunas de las CPU se desconectan. Ya no existe el modo de flujo 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 que dice que max streams es 1.
Claramente no es verdad.
Los dos sistemas operativos en los que zram ha demostrado ser eficaz con Chrome OS y Android en un solo dispositivo. También ajustan page-cluster
:
page-cluster
controla el número de páginas hasta las cuales se leen páginas consecutivas desde el intercambio en un solo intento. Esta es la contraparte de intercambio de lectura de caché de página.
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 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 requiere un intercambio intensivo.
Los valores más bajos significan latencias más bajas para las fallas iniciales, pero al mismo tiempo fallas adicionales y demoras de E / S para las fallas siguientes si hubieran sido parte de las páginas consecutivas que habría introducido la lectura anticipada.
- 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 originarse en zram_config, el paquete debian / ubuntu que, por alguna razón, parece tener muy poca correlación con los documentos del núcleo 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 emplean con éxito con el clúster de páginas anterior ya que no coinciden con un disco para que la latencia se pueda mejorar, dispositivos individuales.
También para un administrador de sistemas, ¿qué es el uso real de memoria real o el uso de memoria virtual? La mayoría de los ejemplos muestran la creación a través de disk_size e ignoran totalmente mem_limit. disk_size = tamaño de vm sin comprimir. mem_limit = límite real de huella mem.
Hace que la opción 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 se muestra a continuación.
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
}