Una de las respuestas a ¿Necesito espacio de intercambio si tengo una cantidad de RAM más que suficiente? Me pregunté si hay alguna relación entre la fragmentación de la memoria medida por cat /proc/buddyinfo
y si el intercambio está en uso o no. Para ser más específico, me pregunto si utilizar el intercambio puede reducir la fragmentación de la memoria. Durante un día normal de trabajo con swap off en mi sistema, tengo esto:
tvbox@tvbox-G31M-ES2L:~$ cat /proc/buddyinfo
Node 0, zone DMA 3 3 4 14 16 6 2 0 0 1 0
Node 0, zone Normal 1564 1052 462 356 240 109 33 21 6 1 0
Node 0, zone HighMem 43 1972 839 285 183 109 98 34 16 0 0
tvbox@tvbox-G31M-ES2L:~$ free
total used free shared buffers cached
Mem: 2053888 1821904 231984 171376 299908 812940
-/+ buffers/cache: 709056 1344832
Swap: 0 0 0
Nota: este sistema tiene un tiempo de actividad que nunca supera las 18 horas.
En un sistema más utilizado tengo esto:
me@me-zippy:~$ cat /proc/buddyinfo
Node 0, zone DMA 149 106 70 26 15 5 4 0 0 2 0
Node 0, zone Normal 2455 3527 4651 1421 367 157 61 19 14 3 0
Node 0, zone HighMem 7 43 75 266 166 162 91 43 27 0 0
me@me-zippy:~$ free -h
total used free shared buffers cached
Mem: 7.4G 7.0G 351M 281M 116M 6.0G
-/+ buffers/cache: 967M 6.4G
Swap: 0B 0B 0B
me@me-zippy:~$ uptime
12:01:49 up 3 days, 3:20, 2 users, load average: 0.52, 0.23, 0.17
Notarás que ninguno de estos sistemas tiene habilitado el intercambio.
Respuestas:
El intercambio permite que las páginas físicas se muevan, en el sentido de que una página utilizada para un propósito podría tener su contenido intercambiado y luego utilizado para otro propósito.
Bajo un sistema de gestión de memoria virtual de gran variedad de jardines, no existe la fragmentación de la memoria física en lo que respecta a las aplicaciones. Cada página asignada por una aplicación puede llevarse a cualquier parte de la memoria física, no hay razón por la cual dos páginas consecutivas en la memoria virtual necesiten tener una cercanía particular en la memoria física.
Hay muchos casos en los que la fragmentación de la memoria es una preocupación: cualquier circunstancia en la que la ubicación de la memoria física sea importante. Esto incluye:
En ausencia de escenarios "complejos", la fragmentación de la memoria física podría ocasionar problemas al conectar un nuevo dispositivo que requiere un conjunto de memoria contigua (el kernel mantiene esos conjuntos para eso, pero podrían necesitar ampliarse si un controlador de repente hace un gran solicitud). Si el uso del dispositivo es constante, la fragmentación física no importaría y, en particular, no haría que una aplicación se ejecute más lentamente o se quede sin espacio.
Es posible que la fragmentación del espacio de direcciones físicas provoque que se use más memoria en el núcleo para representar la lista libre. No creo que este sea el caso en Linux, pero estoy lejos de ser un experto en la gestión de la memoria.
En resumen, permitir que parte de una aplicación se intercambie no permite que esta aplicación asigne más memoria, pero podría permitir que algunos controladores de hardware asignen la memoria que necesitan.
Agregar intercambio no tiene ningún efecto en el espacio de memoria virtual de la aplicación. Ese es el punto de intercambio, después de todo: es transparente para las aplicaciones.
Sin embargo, es posible que agregar swap a una máquina tenga una influencia indirecta en la fragmentación dentro del espacio de memoria virtual de una aplicación. Si el sistema se queda sin memoria virtual, entonces la aplicación tendrá que conformarse con lo que tiene. Si la aplicación usa la mayor parte de la memoria que asignó del sistema operativo, con el tiempo esto causará fragmentación dentro de ese espacio a medida que se liberan pequeños bloques aquí y allá. Si la aplicación tiene más memoria virtual (parte de la cual se intercambia), esto le da al administrador de memoria más espacio para maniobrar y, por lo tanto, reduce el riesgo de que la aplicación se quede sin memoria, con tres bloques separados de 2kB disponibles cuando quería un solo Objeto de 4kB.
fuente