Estoy usando zram en mi computadora como un intercambio comprimido respaldado por RAM. Cuando el sistema necesita intercambiar algo, cambiarlo a un archivo de intercambio respaldado por zram es más o menos equivalente a comprimir esos datos en la memoria para liberar espacio. Esto hace que el intercambio sea muy rápido la mayor parte del tiempo, en relación con el intercambio respaldado por disco. Debido a esto, me pregunto si se puede obtener algún rendimiento al alentar al sistema a cambiar las cosas no utilizadas de manera más agresiva, ya que puede hacerlo sin golpear realmente el disco.
Entonces, ¿alguien ha jugado con, digamos, establecer vm.swappiness
100 mientras usa zram? ¿Sería esto deseable?
sysctl -w vm.swappiness=100
Respuestas:
Realmente no recomendaría poner el intercambio más alto. Un mecanismo común en el núcleo es que colocará páginas (trozos de memoria) en el intercambio para liberar algo de memoria para otras tareas en ejecución.
Primer "problema" cuando el núcleo quiere que se liberen n páginas, m (con m <n, m es el número de páginas comprimidas requeridas para contener n) se crean nuevamente en la RAM, no estoy seguro de si eso puede perturbar el núcleo o no.
De todos modos, cuando tenga páginas en el intercambio, es posible que use la aplicación más adelante con algunas de sus páginas en el intercambio. Lo que hace el kernel es recuperar esas páginas en la memoria física, pero no las elimina del intercambio (que con el intercambio estándar puede verse como almacenamiento en caché , por lo que cuando la aplicación vuelve en segundo plano, el kernel no tiene que volver a escribir esas páginas en el intercambio lento). Sin embargo, con zram quizás no sea un truco sabio, ¡porque entonces tienes en memoria las m páginas en zram + las n páginas que están de vuelta en la memoria!
El núcleo tiene normalmente una "memoria total" que puede usar para hacer sus negocios. Cuando agrega zram, solo cuenta en la memoria de "intercambio", como lo haría con cualquier intercambio basado en disco, pero reduce la "memoria total" real y eso no es esperado / anticipado por el núcleo. ¡A veces puedes tener un comportamiento extraño y no deseado debido a esto!
Con zram, sería bueno que el núcleo no cambie demasiado a esta área cuando está bajo presión de memoria. ¡Y siempre debe tener una partición de intercambio de disco duro real más grande que al menos el tamaño máximo de su zram, de modo que el sistema no obtenga OOM mientras que al mismo tiempo verá mucho espacio libre según lo informado por
free
!fuente
Respuesta corta:
vm.swappiness=100
es el valor apropiado para zram (al menos en Debian Stretch con Linux 4.9, creo que es el mejor valor)Ya lo pruebo
vm.swappiness=100
por mí.Creo que puede hacer una prueba simple para asegurarse de qué valor es mejor para usted.
También hice otro programa simple para probar esta pregunta. x En mi máquina, un
vm.swappiness
valor muy bajo (comovm.swappiness=1
) causará un problema obvio de respuesta.Sobre
SwapCached
en/proc/meminfo
:Primero, intente
vm.page-cluster=0
, esto tal vez pueda reducir algunos inútilesSwapCached
del intercambio.SwapCached puede acelerar zram igual que el dispositivo de intercambio no zram
SwapCached
Se puede reutilizar (gratis) cuando sea necesario:fuente
Las páginas deben intercambiarse (en el disco) cuando la memoria está llena. Si está utilizando la memoria para crear el lugar para intercambiar páginas cuando la memoria está llena, uno pensaría que supera el propósito, excepto si la compresión marca la diferencia (y luego sería natural comprimir la memoria directamente en lugar de pasar por intercambiar). Supongo que uno tendría que comparar esto, ya que las computadoras son cada vez más rápidas en la compresión y descompresión en comparación con la velocidad de la memoria.
fuente
vm.swappiness
valor está ajustado para el intercambio respaldado por disco y si debería cambiarlo si usaré principalmente el intercambio respaldado por zram.