¿Por qué la RAM parcialmente llena causa retraso?

53

¿Por qué la RAM parcialmente llena (digamos 80%) hace que el dispositivo se demore mucho, a pesar de que hay espacio disponible para almacenar más datos? Lo que espero es que siga funcionando bien hasta el 99%.

Noto que en el móvil más que en la PC, ya que tiene RAM más pequeña, por ejemplo, mi móvil tiene 2 GB de RAM; cuando tengo menos de 1 GB de RAM libre, ¡queda mucho menos! ¿Por qué sucede eso, aunque todavía tiene ~ 1 GB para usar?

Mohammed Noureldin
fuente
28
Sospeché que estás asumiendo que la RAM que está disponible no se está utilizando. Entonces ve un 20% de RAM disponible y piensa que solo se está utilizando el 80% de la RAM. Esto es incorrecto, la RAM puede ser utilizada y disponible. (Por ejemplo, la máquina que estoy usando ahora tiene 32 GB de RAM y 21.1 GB están disponibles, pero solo 1.8 GB son gratuitos.)
David Schwartz
2
¿Te refieres a mi espacio libre en el disco duro con mi RAM? hosco no.
Mohammed Noureldin
3
Pueden ser reemplazados, claro. Pero eso tendrá un enorme efecto negativo en el rendimiento, exactamente como lo está viendo. Si el conjunto de trabajo excede la RAM, el rendimiento será terrible, sin importar cuánta RAM esté disponible.
David Schwartz
3
¿Qué te hace pensar que es el porcentaje de RAM lo que hace que el dispositivo se demore?
enkryptor
44
@MohammedNoureldin Supongo que debe haber una razón por la cual su RAM está ocupada (varios procesos están funcionando y haciendo algo). Esta podría ser la misma razón por la cual el dispositivo está retrasado. La carga de RAM puede ser solo un síntoma, no la razón en sí.
enkryptor

Respuestas:

70

Aquí intervienen muchas cosas, pero trataré de explicarlo de la manera más simple posible y de manera aplicable a casi cualquier sistema operativo.

Aquí hay 2 principios básicos:

  1. La suma total de todo lo que necesita estar en RAM y las cosas que se beneficiarían de estar en RAM es casi siempre mayor que el tamaño de RAM. Las cosas que se beneficiarían de estar en la RAM incluyen conjuntos de trabajo de proceso y la lista de espera. Este último contiene datos y código que alguna vez estuvo en uso activo pero que ha caído en inactividad. Gran parte de esto se volverá a usar, algo de él muy pronto, por lo que es beneficioso mantener esto en la RAM. Esta memoria actúa como una especie de caché, pero no es realmente esencial, por lo que está en la categoría de memoria disponible. Al igual que la memoria libre, se puede administrar rápidamente a cualquier programa que lo necesite. En interés del rendimiento, la memoria de reserva debe ser grande.

  2. La frecuencia de uso de los bloques de memoria está lejos de ser aleatoria, pero puede predecirse con una precisión considerable. La memoria se divide en bloques, a menudo 4K bytes. Se accede a algunos bloques muchas veces por segundo, mientras que otros no se han accedido durante muchos minutos, horas, días o incluso semanas si el sistema ha estado funcionando lo suficiente. Existe una amplia gama de usos entre estos 2 extremos. El administrador de memoria sabe a qué bloques se accedió recientemente y cuáles no. Es razonable suponer que pronto se necesitará nuevamente un bloque de memoria al que se haya accedido recientemente. La memoria a la que no se ha accedido recientemente probablemente no se necesitará pronto. La larga experiencia ha demostrado que este es un principio válido.

El administrador de memoria aprovecha el segundo principio para mitigar en gran medida las consecuencias indeseables del primero. Para hacer esto, hace un acto de equilibrio de mantener los datos a los que se accedió recientemente en la RAM, mientras que los datos raramente utilizados se guardan en los archivos originales o en el archivo de paginación.

Cuando la RAM es abundante este acto de equilibrio es fácil. Gran parte de los datos no utilizados recientemente se pueden guardar en la RAM. Esta es una buena situación.

Las cosas se vuelven más complicadas cuando aumenta la carga de trabajo. La suma total de datos y código en uso es mayor, pero el tamaño de la RAM sigue siendo el mismo. Esto significa que un subconjunto más pequeño de esto puede mantenerse en la RAM. Algunos de los datos utilizados menos recientemente ya no pueden estar en la RAM sino que deben dejarse en el disco. El administrador de memoria se esfuerza mucho por mantener un buen equilibrio entre la memoria en uso activo y la memoria disponible. Pero a medida que aumenta la carga de trabajo, el administrador de memoria se verá obligado a proporcionar más memoria disponible para los procesos en ejecución. Esta no es una buena situación, pero el administrador de memoria no tiene otra opción.

El problema es que mover datos hacia y desde la RAM a medida que se ejecutan los programas lleva tiempo. Cuando la RAM es abundante, no sucederá muy a menudo y ni siquiera se notará. Pero cuando el uso de RAM alcanza altos niveles, sucederá con mucha más frecuencia. La situación puede empeorar tanto que se gasta más tiempo en mover datos hacia y desde la RAM de lo que se gasta en su uso real. Esto es una agitación, algo que el administrador de memoria trata de evitar con dificultad, pero con una gran carga de trabajo, a menudo no se puede evitar.

El administrador de memoria está de su lado, siempre tratando de mantener un rendimiento óptimo incluso en condiciones adversas. Pero cuando la carga de trabajo es excelente y la memoria disponible se queda corta, debe hacer cosas malas para seguir funcionando. De hecho, eso es lo más importante. La prioridad es primero mantener las cosas en funcionamiento y luego hacerlo lo más rápido posible.

LMiller7
fuente
1
Tu respuesta me ayudó mucho, ¡gracias! Eso memory mangeres parte de mi OSderecho? Entonces, si estaba tratando con punteros y estas cosas de muy bajo nivel, ¿todavía podría hacer paginación?
Mohammed Noureldin
77
El administrador de memoria es parte del sistema operativo. La búsqueda es una función básica del administrador de memoria y es tan esencial para la operación como lo es para usted y para mí la respiración. No se puede detener.
LMiller7
2
@MohammedNoureldin: cuando escribe aplicaciones de espacio de usuario (cuyas vistas de memoria están aisladas de la del núcleo y otros procesos) no puede acceder a la memoria física directamente . Todo lo que puede acceder es una vista de la memoria que es administrada por el administrador de memoria, lo adivinó, con todas sus características (probablemente), incluida la paginación. Los punteros de memoria solo se refieren a puntos en los espacios de direcciones de una vista de memoria. Son un concepto de lenguaje utilizado tanto en el kernel como en el código de espacio de usuario, pero eso no significa que las dos vistas de memoria sean idénticas. ¡No confunda la gestión de memoria de proceso con el kernel MM!
David Foerster
66
Es 'obvio' o 'bien conocido', pero tal vez aún debería agregarse en esta respuesta: la memoria (ram) es del orden de 1000 veces más rápido que un disco duro (bueno, depende de muchas cosas, por ejemplo ssd / ide / sata, etc.) El sistema operativo ejecuta el código desde ram (+ caché), no desde el disco. Cuando la memoria se agota, y el sistema operativo necesita "intercambiar" porciones de código ("no utilizado") de la memoria al disco, liberar ram para ejecutar otra cosa, esto tomará 'mucho' tiempo (el intercambio), y Si esto sucede con frecuencia (por ejemplo: tiene muchos programas, cada uno necesitaba un intercambio para que su código se cargara en la memoria), ralentizará mucho las cosas.
Olivier Dulac
3
Usualmente no usamos el término "intercambio" para referirnos a la carga de código en la memoria. Eso generalmente se llama una "falla". Por lo general, el término "intercambio" solo se usa para la información que debe escribirse en el disco antes de que pueda expulsarse de la RAM.
David Schwartz
29

Todos los sistemas operativos modernos usan memoria de otro modo no utilizada para el almacenamiento en caché de datos para que se pueda acceder desde la RAM rápida en lugar del almacenamiento más lento. En general, informarán esto como memoria libre, ya que las aplicaciones pueden borrar el caché y usarlo si lo necesitan, pero todavía se está utilizando. Cuanto menos haya, menos datos se pueden almacenar en caché y más lenta será la computadora.

Mike Scott
fuente
11
En realidad, las aplicaciones no necesitan "borrar" el caché. Solo solicitan RAM del sistema operativo. El sistema operativo, al ver que no tiene RAM no utilizada, borrará parte de la caché del archivo y le dará a la aplicación la RAM ahora puesta a cero. La aplicación no puede decir de dónde vino esa RAM.
MSalters
55
@MSalters Sí, estoy de acuerdo, la aplicación solicita RAM y el sistema operativo borra la memoria caché si es necesario. Estaba tratando de mantenerlo simple.
Mike Scott
Eso fue algo claro, pero estoy un poco más consciente de los detalles, por lo tanto, tengo la sensación de que falta algo y necesito más detalles. La respuesta de @LMiller me ayudó en realidad, sería genial si pudieras revisar el información en el mismo.
Mohammed Noureldin
4

Esta respuesta se ha reescrito principalmente para reorganizar la estructura y aclarar el mensaje. También lo abrí como una respuesta wiki comunitaria; Siéntase libre de editar.

La paginación es un esquema de administración de memoria a través del cual los bloques de memoria de tamaño fijo tienen procesos asignados a ellos. Cuando el uso de memoria aumenta a un nivel alto (es decir, 80% de capacidad), la paginación comienza a extenderse de RAM a vRAM (RAM virtual).

vRAM se encuentra en el almacenamiento del sistema, generalmente dentro de un disco duro u otras ubicaciones de almacenamiento de gran tamaño.

A los procesos se les asigna parte de su disco duro para que se ejecuten como memoria y tratarán su sección como RAM. Sin embargo, este es un proceso perfectamente normal, cuando aumenta el tiempo dedicado a transferir datos hacia y desde la vRAM, disminuye el rendimiento del sistema.

Si bien se accede a la RAM dedicada directamente a través de la placa base desde la CPU, que proporciona una conexión rápida, la RAM virtual debe atravesar el cableado entre la placa y la ubicación de la vRAM.

Sin embargo, esto solo causa un ligero impacto en el rendimiento. Cuando la velocidad de la paginación a vRAM aumenta drásticamente (cuando la RAM dedicada se acerca a la capacidad), se produce la agitación.

Thrashing es la práctica de transferir rápida y rápidamente páginas de memoria a su memoria virtual. Esto tiene un gran impacto en el rendimiento, ya que se debe dedicar más tiempo a buscar y direccionar datos.

Digamos que desea escribir un número de 30 dígitos. Podrías sentarte junto a tu pantalla con tu bloc de notas y escribirlo (usando la memoria dedicada), o recordar trozos de 5, correr a la habitación de al lado y escribirlo en tu bloc de notas allí (usando memoria virtual). Ambos hacen el trabajo, pero ¿cuál será más rápido?

¡Descubre más sobre thashing aquí !

Muchas gracias a los contribuyentes de esta respuesta, incluidos Daniel B , xenoid y Jon Bentley .

Will
fuente
3
No es que golpear sea intencional. Es solo un efecto secundario de la paginación y la competencia por la memoria física. Además, la memoria virtual no se "crea" moviendo páginas al disco.
Daniel B
Thrashing es un subproducto, cierto, pero es inmensamente útil en momentos en que los procesos se ejecutan, lo que ayuda a evitar el bloqueo. Y sí, la memoria virtual está ocupada en lugar de creada. Lo editaré en.
Será
8
No, estás confundiendo basura y paginación. La basura solo se está volviendo patológica.
xenoid
@xenoid Paging es un esquema de gestión de memoria; Es como decir que estoy confundiendo golpear un venado con mi auto y el sistema de autopistas. Thrashing es el proceso que causa esta caída en el rendimiento; Sin embargo, estoy de acuerdo con usted en que esto es resultado del sistema de paginación.
Será
1
Los comentarios incorporados, hechos en la respuesta wiki, siéntase libre de editar.
Será el
1

Esto se debe a que el sistema operativo tiene que hacer mucha paginación (cargar partes de programas activos) e intercambiar (mover datos en RAM a HD y viceversa) para mantener su software en funcionamiento. Cuando se necesitan cargar nuevas páginas que pueden necesitar más espacio que el 20% disponible, el sistema operativo tendrá que cambiar las páginas existentes en la RAM que considera menos probable que se usen pronto. Especialmente al inicio de otros programas. Cambiar y volver a las páginas lleva mucho tiempo y ralentiza drásticamente el rendimiento de su PC porque ahora está trabajando a la velocidad de la HD, no de la RAM.

Ayuda un poco en un HDD a crear una partición especial en su HD y asignarla como espacio dedicado de "intercambio" (no lo use para archivos "reales") para que el intercambio se vea menos afectado por la fragmentación de HD.

Gilles Lesire
fuente
ROM es solo una nomenclatura para el HD cuando se habla de almacenamiento en caché, paginación, etc. Cualquier cosa que no sea la memoria de trabajo. Y la ROM generalmente es más lenta que la RAM, casi siempre lo ha sido. Las computadoras viejas copiaron los datos de la ROM a la RAM (ROM Shadowing) al arrancar porque funcionaba más rápido.
Gilles Lesire
1
Claro, pero ¿ROM y RAM también se usan como memoria no volátil versus memoria volátil? Por lo general, la ROM de BTW es más lenta, la ROM se copia en la RAM (ROM Shadowing) en el arranque para obtener ganancias de rendimiento. Pero claro, cambiaré la única referencia para arreglar tu curiosidad. ;)
Gilles Lesire
1

Recuerde, los discos duros son un orden de magnitud más lento que la RAM, y la RAM en sí misma no es tan rápida para empezar (en la arquitectura general). En orden de velocidad de acceso (donde cada peldaño es un orden de magnitud más lento que el anterior) tiene

  1. Registros del procesador : en términos prácticos, los registros están disponibles en 1 ciclo de procesador . Teniendo en cuenta que los procesadores hacen miles de millones de ciclos por segundo (3 GHz = 3 mil millones de ciclos por segundo), esto es muy rápido.
  2. Caché del procesador : depende del nivel, pero estos siguen siendo bastante rápidos (disponibilidad de 3-5 ciclos para el caché L1).
  3. Memoria de acceso aleatorio (RAM) : la parte aleatoria significa que no sabe en qué estado se encuentra cuando accede a ella. Piense en un repartidor de paquetes que tiene que detenerse, recoger el paquete, caminar hacia la puerta, tocar el timbre y esperar una respuesta. Tal vez no espere en absoluto, o tal vez espere uno o dos minutos para que la señora Smith se dirija a la puerta hacia la parte trasera de la casa. En términos prácticos, estamos hablando de 14 a 27 ciclos (dependiendo del estado de la RAM cuando accedimos a ella).
  4. Unidad de disco duro : ahora hay un proceso físico y, mientras sucede lo más rápido posible, está esperando que las cabezas se muevan y las pistas se muevan debajo de esas cabezas. En términos prácticos, un HDD de 7,200 RPM puede completar una revolución en aproximadamente 4 ms , o alrededor de 750,000 ciclos para un procesador de 3 GHz . Eso es lento

Virtual Memory Manager es un jugador. Apuesta a que no necesita toda su RAM todo el tiempo, por lo que hace una suposición educada y tira los dados de que su programa de documentos (que ha estado en segundo plano durante los últimos 10 minutos mientras lee esto) no está realmente importante y lo empuja al HDD.

¡Pero luego vuelves a hacer clic en el documento! Ahora el VMM tiene que cargar todos esos datos desde el HDD. Peor aún, si tiene poca RAM, ahora tiene que enviar otros datos (más juegos de azar) al HDD para liberar espacio utilizable. A Linux le gusta vivir al límite aquí. Llenará la gran mayoría de la RAM con datos de uso frecuente (ideal para servidores con pocos procesos).

Machavity
fuente
1
Sí, el administrador de memoria es un jugador, pero eso podría malinterpretarse muy fácilmente. Si el acceso a la memoria fuera realmente aleatorio, entonces el administrador de memoria estaría equivocado tantas veces como sea correcto y todo el sistema se averiaría. Pero los programas tienden a exhibir una fuerte localidad de referencia. Es decir, la mayoría de los accesos a la memoria tienden a estar localizados en un área relativamente pequeña de la memoria. Se mueven pero lo suficientemente lento para que el sistema funcione. Las probabilidades se apilan a favor de los administradores de memoria y los errores se corrigen rápidamente. Esto se ha demostrado durante décadas de experiencia
LMiller7
El azar en la memoria de acceso aleatorio se refiere al hecho de que puede acceder a cualquiera de ellos al azar. (En lugar de tener que esperar a que los datos pasen debajo de los cabezales de lectura como en un disco duro o cintas, y luego acceder a los datos de forma secuencial).
Phil
0

La paliza responde bastante bien. Si puede, puede minimizar la rapidez con que esto sucede al reducir el intercambio (la cantidad de ram que el sistema permitirá usar antes de mover las cosas al espacio de intercambio). Me gusta configurar los sistemas para que se mantengan fuera del intercambio hasta que el ram alcance el 99% para las aplicaciones del servidor, ya que el valor predeterminado significaría que tendría que codificar las cosas para utilizar solo el 80% del ram para aprovechar el almacenamiento en caché sin ser penalizado por empujar El sistema en el espacio de intercambio.

codykochmann
fuente