En informática , el fenómeno de sobrecarga se produce en un sistema con paginación de memoria cuando los recursos de memoria real (RAM) del ordenador se sobrecargan , lo que provoca un estado constante de paginación (intercambio, es decir, mover una página al disco) y fallos de página , ralentizando la mayoría de los procesos a nivel de aplicación . [ 1 ] Esto provoca que el rendimiento del ordenador se degrade o incluso colapse. La situación puede continuar indefinidamente hasta que el usuario cierre algunas aplicaciones en ejecución o los procesos activos liberen recursos adicionales de memoria virtual.
Tras la inicialización, la mayoría de los programas operan con un número reducido de páginas de código y datos en comparación con la memoria total que requieren. Las páginas a las que se accede con mayor frecuencia en un momento dado se denominan conjunto de trabajo , el cual puede variar con el tiempo.
Cuando el conjunto de trabajo no es significativamente mayor que el número total de marcos de página de almacenamiento real del sistema , los sistemas de memoria virtual funcionan de manera más eficiente y se dedica una cantidad insignificante de procesamiento a la resolución de fallos de página. A medida que el conjunto de trabajo total crece, la resolución de fallos de página sigue siendo manejable hasta que el crecimiento alcanza un punto crítico en el que el número de fallos aumenta drásticamente y el tiempo dedicado a resolverlos supera el tiempo dedicado a procesar la tarea para la que fue escrito el programa. Esta condición se conoce como saturación. La saturación puede ocurrir en un programa que accede aleatoriamente a estructuras de datos enormes, ya que su gran conjunto de trabajo provoca fallos de página continuos que ralentizan drásticamente el sistema. Satisfacer los fallos de página puede requerir liberar páginas que pronto tendrán que volver a leerse del disco.
El término también se utiliza para diversos fenómenos similares , en particular el movimiento entre otros niveles de la jerarquía de la memoria , en el que un proceso avanza lentamente porque se dedica un tiempo significativo a la adquisición de recursos.
El término "thrashing" también se utiliza en contextos distintos a los sistemas de memoria virtual; por ejemplo, para describir problemas de caché en informática o el síndrome de la ventana tonta en redes.
Descripción general
La paginación y el intercambio de memoria funcionan tratando una parte del almacenamiento secundario , como el disco duro de un ordenador , como una capa adicional de la jerarquía de caché . Esto permite que los procesos utilicen más memoria de la que está físicamente presente en la memoria principal . Los sistemas operativos que admiten memoria virtual paginada asignan a los procesos un espacio de direcciones virtuales , y cada proceso se refiere a las direcciones en su contexto de ejecución mediante una denominada dirección virtual. Para acceder a datos como código o variables en esa dirección, el proceso debe traducir la dirección a una dirección física en un proceso conocido como traducción de direcciones virtuales . En efecto, la memoria principal física se convierte en una caché para la memoria virtual, que generalmente se almacena en el disco en páginas de memoria .
Los programas disponen de un número determinado de páginas según las necesidades del sistema operativo . Las páginas de memoria activas se encuentran tanto en la RAM como en el disco. Las páginas inactivas se eliminan de la caché y se escriben en el disco cuando la memoria principal se llena.
Si los procesos utilizan toda la memoria principal y necesitan páginas de memoria adicionales, se producirá una cascada de fallos de caché graves, conocidos como fallos de página , que a menudo provocan un retraso notable en la capacidad de respuesta del sistema operativo . Este proceso, junto con el intercambio de páginas repetitivo e inútil que se produce, se conoce como "saturación". Esto suele provocar una utilización descontrolada de la CPU que puede paralizar el sistema. En los ordenadores modernos, la saturación puede producirse en el sistema de paginación (si no hay suficiente memoria física o el tiempo de acceso al disco es excesivamente largo), o en el subsistema de comunicaciones de E/S (especialmente en conflictos por el acceso al bus interno ), etc.
Dependiendo de la configuración y los algoritmos involucrados, el rendimiento y la latencia de un sistema pueden degradarse en varios órdenes de magnitud . El thrashing ocurre cuando la CPU realiza menos trabajo "productivo" y más trabajo de "intercambio". El tiempo total de acceso a la memoria puede aumentar ya que la memoria de nivel superior es tan rápida como el siguiente nivel inferior en la jerarquía de memoria. [ 2 ] La CPU está ocupada intercambiando páginas tanto que no puede responder a los programas de los usuarios ni a las interrupciones como se requiere. El thrashing ocurre cuando hay demasiadas páginas en la memoria, y cada página hace referencia a otra página. La memoria real reduce su capacidad para contener todas las páginas, por lo que utiliza "memoria virtual". Cuando cada página en ejecución requiere esa página que actualmente no está en la memoria real (RAM), coloca algunas páginas en la memoria virtual y ajusta la página requerida en la RAM. Si la CPU está demasiado ocupada haciendo esta tarea, ocurre el thrashing.
Causas
En los sistemas de memoria virtual paginada , el thrashing puede ser causado por programas o cargas de trabajo que presentan una localidad de referencia insuficiente : si el conjunto de trabajo de un programa o una carga de trabajo no se puede mantener eficazmente dentro de la memoria física, entonces puede ocurrir un intercambio constante de datos, es decir, thrashing. El término se utilizó por primera vez durante la época de los sistemas operativos de cinta para describir el sonido que hacían las cintas cuando se escribían y leían datos rápidamente. Un caso extremo podría ocurrir en los procesadores VAX . Una sola instrucción MOVLque cruza un límite de página podría tener un operando de origen que utiliza un modo de direccionamiento diferido por desplazamiento, donde la palabra larga que contiene la dirección del operando cruza un límite de página, y un operando de destino que utiliza un modo de direccionamiento diferido por desplazamiento, donde la palabra larga que contiene la dirección del operando cruza un límite de página, y tanto el origen como el destino podrían cruzar límites de página. Esta única instrucción hace referencia a diez páginas; si no todas están en la RAM, cada una causará un fallo de página. El número total de páginas involucradas en esta instrucción en particular es diez, y las diez páginas deben estar presentes simultáneamente en la memoria. Si no se puede intercambiar alguna de las diez páginas (por ejemplo, para dejar espacio a alguna de las otras páginas), la instrucción fallará y cualquier intento de reiniciarla fracasará hasta que se puedan intercambiar las diez páginas.
Un thrashing del sistema suele ser el resultado de un aumento repentino en la demanda de páginas por parte de un pequeño número de programas en ejecución. Swap-token [ 3 ] es un mecanismo de protección contra thrashing ligero y dinámico. La idea básica es establecer un token en el sistema, que se asigna aleatoriamente a un proceso que tiene fallos de página cuando ocurre un thrashing. El proceso que tiene el token recibe el privilegio de asignar más páginas de memoria física para construir su conjunto de trabajo, que se espera que termine rápidamente su ejecución y libere las páginas de memoria a otros procesos. Se utiliza una marca de tiempo para entregar los tokens uno por uno. La primera versión de swap-token está implementada en Linux . La segunda versión se llama preempt swap-token . En esta implementación actualizada de swap-token, se establece un contador de prioridad para cada proceso para realizar un seguimiento del número de páginas de intercambio. El token siempre se asigna al proceso con una prioridad alta, que tiene un gran número de páginas de intercambio. La duración de la marca de tiempo no es constante, sino que viene determinada por la prioridad: cuanto mayor sea el número de páginas de intercambio de un proceso, más larga será su marca de tiempo.
Otros usos
El fenómeno de sobrecarga es más conocido en el contexto de la memoria y el almacenamiento, pero fenómenos análogos ocurren con otros recursos , entre ellos:
- Desbordamiento de caché
- Cuando se accede a la memoria principal siguiendo un patrón que provoca que varias ubicaciones de memoria principal compitan por las mismas líneas de caché, se producen fallos de caché excesivos . Esto es especialmente problemático para las cachés con asociatividad .
- Los patrones de acceso que provocan contención de caché incluyen tener un conjunto excesivamente grande de datos "calientes" en memoria u otras formas de localidad deficiente. En las cachés asociativas, los patrones de acceso que provocan colisión de claves también provocan contención. Un ejemplo clásico de esto último es un bucle de incremento con paso
for (k = 0; k < N; k += 256) v[k] += 1;. [ 4 ] - TLB golpeando
- Cuando el búfer de traducción anticipada (TLB), que actúa como caché para la unidad de gestión de memoria (MMU) que traduce direcciones virtuales a direcciones físicas, es demasiado pequeño para el conjunto de páginas de trabajo, se produce un saturamiento del TLB. Esto puede ocurrir incluso si no se produce saturación de la caché de instrucciones o de datos, ya que estas se almacenan en cachés de diferentes tamaños. Las instrucciones y los datos se almacenan en caché en pequeños bloques ( líneas de caché ), no en páginas completas, pero la búsqueda de direcciones se realiza a nivel de página. Por lo tanto, incluso si los conjuntos de trabajo de código y datos caben en la caché, si están fragmentados en muchas páginas, el conjunto de trabajo de direcciones virtuales puede no caber en el TLB, lo que provoca un saturamiento del TLB.
- El saturamiento de la TLB también puede ocurrir cuando se producen colisiones excesivas en su memoria asociativa interna (es decir, cuando las ubicaciones de memoria compiten por unos pocos espacios específicos). Esta situación puede darse al realizar una búsqueda binaria en un búfer grande (≥ 512 KiB ) cuyo tamaño es una potencia exacta de dos. Se puede prevenir extendiendo la "clave" para la memoria asociativa interna (normalmente los bits menos significativos de la dirección) mediante la reducción de la alineación de acceso; en la búsqueda binaria se puede utilizar una división de desplazamiento 31/64. Este es un caso inusual en el que la alineación excesiva perjudica el rendimiento . [ 5 ]
- Azote de montones
- La recolección frecuente de basura , debido a la imposibilidad de asignar memoria para un objeto, debido a memoria libre insuficiente o memoria libre contigua insuficiente debido a la fragmentación de la memoria, se denomina saturación del montón (heap thrashing). [ 6 ]
- Trituración de procesos
- Un fenómeno similar ocurre con los procesos: cuando el conjunto de trabajo de un proceso no puede programarse simultáneamente , es decir, de manera que no todos los procesos que interactúan se programan para ejecutarse al mismo tiempo, experimentan un "shocking de procesos" debido a que se programan y desprograman repetidamente, progresando solo lentamente. [ 7 ]
Véase también
- Algoritmo de reemplazo de páginas : algoritmo para la implementación de memoria virtual.
- Colapso por congestión : reducción de la calidad del servicio debido al alto tráfico de red. Páginas que muestran descripciones breves de los destinos de redireccionamiento.
- Contención de recursos : en informática, un conflicto por el acceso a un recurso compartido.
- Memoria insuficiente : estado del ordenador en el que no se puede asignar memoria adicional.
- Envejecimiento del software : tendencia del software a fallar debido a cambios externos o a un funcionamiento prolongado.
Referencias
- ↑ Denning, Peter J. (1968). "Thrashing: Its causes and prevention" (PDF) . Proceedings AFIPS, Fall Joint Computer Conference . 33 : 915–922 . Recuperado el 15 de febrero de 2012 .
- ↑ L., Hennessy, John (2012). Arquitectura de computadoras: un enfoque cuantitativo . Patterson, David A., Asanović, Krste . (5.ª ed.). Waltham, MA: Morgan Kaufmann. ISBN 9780123838728OCLC 755102367
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Song Jiang y Xiaodong Zhang (2005). "LRU ordenado por tokens: una política eficaz de reemplazo de páginas y su implementación en sistemas Linux" . Performance Evaluation. pp. 5–29 . doi : 10.1016/j.peva.2004.10.002 .
- ↑ "Asociatividad de caché - Algorithmica" . en.algorithmica.org . Consultado el 18 de agosto de 2025 .
- ↑ " La búsqueda binaria es un caso patológico para las cachés - Paul Khuong: algo de Lisp" . pvk.ca.
- ↑ Técnicas de optimización y ajuste del rendimiento para procesadores IBM, incluido IBM POWER8 , "heap+thrashing" pág. 170
- ↑ Ousterhout, JK (1982). "Técnicas de planificación para sistemas concurrentes" (PDF) . Actas de la Tercera Conferencia Internacional sobre Sistemas de Computación Distribuida . págs. 22–30 .
- Memoria virtual