¿Cómo puedo modificar el kernel para un intercambio total?

¿Cómo puedo modificar el kernel para un intercambio total?

Me gustaría implementar la siguiente política de intercambio:

  • Por defecto, todas las páginas en la memoria también deberían estar en el espacio de intercambio.
  • Cuando se cambia una página en la memoria (es decir, se ensucia), la página debe escribirse lo antes posible, pero con menor prioridad que otros procesos.
  • Si se alcanza una determinada marca de agua configurable (digamos que el 80% de las páginas están sucias), la prioridad será igual a la de otros procesos.

¿Es posible este tipo de política de intercambio con el kernel de Linux? Si es así, ¿cómo configuro la configuración del kernel para lograr esto?

Editar:

Obviamente, la razón de esto es reducir la cantidad de páginas que deben intercambiarse. Sólo es necesario escribir en el disco las páginas sucias, y esto sucede en segundo plano con el tiempo. Por lo tanto, cuando se pierde una página (es decir, la página no está en la memoria), no es necesario escribir ninguna página de la memoria al disco, sino sólo del disco a la memoria. Por lo tanto, redujo la probabilidad de cuellos de botella de E/S porque tanto el intercambio como el intercambio intentan acceder al disco simultáneamente.

Respuesta1

Puede establecer el valor de /proc/sys/vm/swappinesspara controlar la proporción de segmentos de datos intercambiados con respecto a los segmentos de datos mantenidos en la memoria. Un valor de 0 evita completamente el intercambio a toda costa.

Esto se puede hacer usando:

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • Guardar esa configuración en/etc/sysctl.conf

Generalmente, usar sólo un pequeño intercambio no es malo. La memoria libre se puede utilizar para almacenar en caché los datos leídos desde el disco, y el sistema puede planificar con antelación una necesidad repentina de mucha memoria por parte de una aplicación.

Sin embargo, cuando se intercambian demasiados programas, hay mucha actividad relacionada con el disco durante cada cambio de programa, lo que realmente hace que todo se ralentice. Antes de poder utilizar algo, es necesario volver a cargarlo en la memoria.

Las lecturas de discos son terriblemente lentas en comparación con el acceso a la memoria, ya que los datos tardan mucho más en llegar. El sistema tiene que programar la lectura entre las otras solicitudes de lectura/escritura, la unidad comienza a intentar encontrar el cilindro correcto y finalmente comienza a entregar datos lentamente.

Por tanto, creo que su lógica es defectuosa. Generalmente, desea mantener los programas ejecutándose en la memoria y, al mismo tiempo, dejar suficiente espacio para un crecimiento repentino. No utilice el intercambio con demasiada frecuencia para "escribir cosas en el disco", porque no es una copia de seguridad ni una mejora del rendimiento.

Las computadoras más antiguas contenían menos memoria y, como resultado, sufrían problemas de intercambio. Cuando se abrían muchos programas a la vez, el sistema se ralentizaba y se podía escuchar el disco leyendo y escribiendo en orden el archivo de intercambio.

Respuesta2

El hecho de que su sistema esté cambiando no significa que tenga un problema. Hay aplicaciones que están ajustadas para aprovechar al máximo el intercambio sin obstaculizar el rendimiento del sistema. La mayoría de los sistemas de bases de datos relacionales están configurados de esta manera: IE: Oracle y Cache, siendo probablemente los dos más importantes.

Si utiliza la hibernación, utiliza espacio de intercambio para el almacenamiento de RAM. Al iniciar una copia de seguridad del sistema, todo lo que está en el intercambio se agrega nuevamente a la RAM. De esta manera, puede apagar su sistema sin consumir la batería como en el modo de espera y aún así volver al punto donde lo dejó antes de apagarlo. Como resultado, su batería durará mucho más.

El intercambio puede ser una gran cosa, porque libera más RAM activa para mantener alto el rendimiento de su sistema. Cuando su RAM activa está llena Y su swap está lleno, y todavía necesita más espacio, entonces y sólo entonces, tiene un problema. Hasta ese momento, el swap está aquí para ayudarte, no para hacerte daño.

Respuesta3

Agregando a la respuesta de vdboor, creo que para lograr lo que desea, necesitaría modificar más de swappiness. Hay más ajustes del kernel disponibles que controlan cómo se utiliza el intercambio. El usuario puede acceder a ellos en tiempo de ejecución a través /proc/sys/vm/*de archivos o configurarlos permanentemente /etc/sysctl.conf(esto puede necesitar agregar sysctlun script de inicio a su secuencia de inicio para que tenga efecto)

Las configuraciones están muy bien cubiertas en la documentación del kernel de Linux. Puedes encontrarlo en <your_kernel_sources_path>/Documentation/sysctl/vm.txt. También puedes echar un vistazo a alguna documentación en línea.como este.

información relacionada