Podría ayudar subir /proc/sys/vm/page-cluster
(predeterminado:3).
De la documentación del kernel (sysctl/vm.txt
):
grupo de páginas
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 contrapartida de intercambio para la lectura anticipada de caché de página. La consecutividad mencionada no es en términos de direcciones físicas/virtuales, sino consecutiva 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.
La documentación no menciona un límite, por lo que posiblemente podría establecerlo absurdamente alto para que todo el intercambio se vuelva a leer muy pronto. Y, por supuesto, vuelva a colocarlo en un valor sensato después.
Me parece que no puedes mágicamente "hacer que el sistema responda nuevamente". Usted incurre en la penalización o vuelve a leer las páginas del espacio de intercambio en la memoria ahora o incurre en ella más tarde, pero de una forma u otra incurre en ella. De hecho, si hace algo como swapoff -a && swapon -a
entonces puedes sentirte más dolor en lugar de menos, porque obliga a que algunas páginas se vuelvan a copiar en la memoria que, de lo contrario, nunca se habrían necesitado nuevamente y finalmente se eliminan sin ser leídas (piense:cierra una aplicación mientras gran parte de su montón se intercambia; esas páginas pueden ser descartado por completo sin volver a leerlo en la memoria).
pero esto borra las páginas del intercambio, por lo que deben escribirse nuevamente la próxima vez que ejecute el script.
Bueno, casi cualquier página que se vuelva a copiar desde el intercambio a la memoria principal está a punto de modificarse de todos modos, por lo que si alguna vez necesitara volver a moverse para intercambiar en el futuro, tendría que volver a escribirse en el intercambio de todos modos. Tenga en cuenta que el intercambio es principalmente memoria en montón, no páginas de solo lectura (que generalmente tienen respaldo en archivos).
Creo que tu swapoff -a && swapon -a
truco es tan bueno como cualquier cosa que se te ocurra.
Puede intentar agregar los programas que más le interesen a un cgroup y ajustar el intercambio para que la próxima vez que la aplicación ejecute los programas que agregue, es menos probable que sean candidatos para el intercambio.
Es probable que algunas de sus páginas aún se intercambien, pero puede solucionar sus problemas de rendimiento. Una gran parte de esto probablemente sea solo el comportamiento de "detener e iniciar" cuando muchas de las páginas de un programa están en intercambio y el programa tiene que pausar continuamente para intercambiar sus páginas en RAM, pero solo en incrementos de 4k.
Alternativamente, puede agregar la aplicación que se está ejecutando a un cgroup y ajustar el intercambio para que la aplicación sea la que tienda a usar más el archivo de intercambio. Reducirá la velocidad de la aplicación, pero no afectará al resto del sistema.