¿Cuál es el valor apropiado de vm.swappiness cuando se usa zram?

¿Cuál es el valor apropiado de vm.swappiness cuando se usa zram?

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 comparación con el intercambio respaldado en disco. Debido a esto, me pregunto si se puede ganar algo de rendimiento al alentar al sistema a intercambiar cosas no utilizadas de manera más agresiva, ya que puede hacerlo sin tocar el disco.

Entonces, ¿alguien ha jugado con, digamos, establecer vm.swappiness100 mientras usaba zram? ¿Sería esto deseable?

sysctl -w vm.swappiness=100

Respuesta1

Respuesta corta: vm.swappiness=100esvalor apropiadopara zram (al menos en Debian Stretch con Linux 4.9, creo que es la mejor relación calidad-precio)

Ya hice la prueba vm.swappiness=100por mi.

creo que puedes haceralguna prueba sencillapara asegurarse de qué valor es mejor para usted.

También hiceotro programa sencillopara probar esta pregunta. x En mi máquina, un vm.swappinessvalor muy bajo (como vm.swappiness=1) causará un problema obvio de capacidad de respuesta.

Acerca SwapCachedde en /proc/meminfo:

Primero, prueba vm.page-cluster=0esto.tal vez pueda reducir algunas cosas inútiles SwapCacheddel intercambio.

SwapCached puede acelerar zram igual que un dispositivo de intercambio que no es zram

SwapCachedSe puede reutilizar (gratis) cuando sea necesario:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

Respuesta2

Realmente no recomendaría aumentar el swappiness. Un mecanismo común en el kernel es que colocará páginas (fragmentos de memoria) en el intercambio para liberar algo de memoria para otras tareas en ejecución.

El primer "problema" cuando el kernel quiere liberar n páginas, m (con m < n, m es el número de páginas comprimidas necesarias para contener n) se crean recientemente en la RAM, no estoy seguro si eso puede alterar el kernel o no.

Entonces de todos modos, cuando tengas páginas en el swap, es posible que uses la aplicación más adelante con algunas de sus páginas en el swap. Lo que hace el kernel es devolver esas páginas a la memoria física pero no las elimina del intercambio (lo que con el intercambio estándar puede verse comoalmacenamiento en caché, de modo que cuando la aplicación vuelve a estar 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 inteligente, porque entonces tienes en la memoria las m páginas en zram + las n páginas que están de nuevo en la memoria.

El núcleo normalmente tiene una "memoria total" que puede utilizar para realizar sus tareas. Cuando agrega zram, cuenta solo en la memoria de "intercambio", como sucedería con cualquier intercambio basado en disco, pero reduce la "memoria total" real y eso no es lo que el kernel espera/anticipa. ¡A veces puedes tener un comportamiento extraño y no deseado debido a esto!

Con zram, sería bueno que el kernel 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 al menos que el tamaño máximo de su zram, para que el sistema no obtenga OOM y, al mismo tiempo, vea mucho espacio libre, según lo informado por free!

Respuesta3

https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram

Estos valores sonqué usa Pop!_OS. Esa solicitud de extracción de Pop!_OS GitHub también enlaza conalgunas pruebas realizadas por usuarios en r/Fedora, lo que determinó que vm.page-cluster = 0 es ideal. También encontraron que un valor alto de intercambio era ideal, lo que coincide con lo sugerido porlos documentos del núcleo:

El valor predeterminado es 60. Para el intercambio en memoria, como zram o zswap, así como para configuraciones híbridas que tienen intercambio en dispositivos más rápidos que el sistema de archivos, se pueden considerar valores superiores a 100. Por ejemplo, si la IO aleatoria contra el dispositivo de intercambio es en promedio 2 veces más rápida que la IO del sistema de archivos, la capacidad de intercambio debe ser 133 (x + 2x = 200, 2x = 133,33).

Respuesta4

Las páginas deben intercambiarse (al 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 entonces sería natural comprimir la memoria directamente en lugar de pasar por intercambio). Supongo que habría que comparar esto, ya que las computadoras son cada vez más rápidas a la hora de comprimir y descomprimir en comparación con la velocidad de la memoria.

información relacionada