stringtranslate.com

Thrashing (ciencia informática)

En informática , el thrashing ocurre en un sistema con memoria virtual cuando los recursos de almacenamiento reales de una computadora están sobreasignados , lo que lleva a un estado constante de paginación y fallas de página , lo que ralentiza la mayoría del procesamiento a nivel de aplicación . [1] Esto hace que el rendimiento de la computadora 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 de memoria virtual adicionales.

Después de la inicialización, la mayoría de los programas funcionan con una pequeña cantidad de páginas de código y datos en comparación con la memoria total que requiere el programa. Las páginas a las que se accede con más frecuencia en cualquier momento se denominan conjunto de trabajo , que puede cambiar con el tiempo.

Cuando el conjunto de trabajo no es significativamente mayor que el número total de marcos de páginas de almacenamiento real del sistema , los sistemas de memoria virtual funcionan de manera más eficiente y se gasta una cantidad insignificante de computación en resolver errores de página. A medida que aumenta el total de conjuntos de trabajo, la resolución de errores de página sigue siendo manejable hasta que el crecimiento alcanza un punto crítico en el que el número de errores aumenta drásticamente y el tiempo dedicado a resolverlos supera el tiempo dedicado al cálculo para el que se escribió el programa. Esta condición se conoce como thrashing. El thrashing puede ocurrir en un programa que accede aleatoriamente a enormes estructuras de datos, ya que su gran conjunto de trabajo causa continuos errores de página que ralentizan drásticamente el sistema. Satisfacer los errores de página puede requerir liberar páginas que pronto tendrán que volver a leerse desde el disco.

El término también se utiliza para varios fenómenos similares, en particular el movimiento entre otros niveles de la jerarquía de la memoria , donde un proceso progresa lentamente porque se gasta un tiempo significativo en adquirir recursos.

"Thrashing" también se utiliza en contextos distintos a los de 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 memoria virtual funciona tratando una parte del almacenamiento secundario, como el disco duro de una computadora , como una capa adicional de la jerarquía de caché . La memoria virtual 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 asignan a los procesos un espacio de dirección virtual y cada proceso hace referencia a 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 dirección virtual . En efecto, la memoria principal física se convierte en un caché para la memoria virtual, que en general se almacena en el disco en páginas de memoria .

A los programas se les asigna una cierta cantidad de páginas según las necesidades del sistema operativo . Las páginas de memoria activas existen tanto en la RAM como en el disco. Las páginas inactivas se eliminan de la memoria caché y se escriben en el disco cuando la memoria principal se llena.

Si los procesos están utilizando toda la memoria principal y necesitan páginas de memoria adicionales, se producirá una cascada de errores graves de caché , 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 inútil y repetitivo de páginas que se produce, se conoce como "thrashing". Esto suele provocar una utilización elevada y descontrolada de la CPU que puede paralizar el sistema. En las computadoras modernas, el thrashing puede producirse en el sistema de paginación (si no hay suficiente memoria física o el tiempo de acceso al disco es demasiado largo), o en el subsistema de comunicaciones de E/S (especialmente en conflictos sobre 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 múltiples órdenes de magnitud . El thrashing es 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 e interrumpe tanto 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 demanda esa página que no está actualmente 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, se produce el thrashing.

Causas

En los sistemas de memoria virtual , 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 de manera efectiva 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 los días del sistema operativo de cinta para describir el sonido que hacían las cintas cuando se escribían y leían datos rápidamente. Un caso peor podría ocurrir en los procesadores VAX . Un solo MOVLcruce de un límite de página podría tener un operando de origen que usa 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 usa 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 el origen y el destino podrían cruzar ambos límites de página. Esta única instrucción hace referencia a diez páginas; si no todas están en 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 hacer lugar para alguna de las otras páginas), la instrucción fallará y cada intento de reiniciarla fallará hasta que se puedan intercambiar las ocho páginas.

Un ataque de sistema es a menudo el resultado de un aumento repentino en la demanda de páginas de un pequeño número de programas en ejecución. Swap-token [3] es un mecanismo de protección contra ataques ligero y dinámico. La idea básica es establecer un token en el sistema, que se entrega aleatoriamente a un proceso que tiene fallas de página cuando se produce un ataque. El proceso que tiene el token recibe un privilegio para 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 se implementa 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 rastrear la cantidad de páginas de intercambio. El token siempre se entrega al proceso con una alta prioridad, que tiene una gran cantidad de páginas de intercambio. La longitud de la marca de tiempo no es una constante, sino que está determinada por la prioridad: cuanto mayor sea el número de páginas de intercambio de un proceso, más larga será la marca de tiempo del mismo.

Otros usos

El shashing es más conocido en el contexto de la memoria y el almacenamiento, pero ocurren fenómenos análogos para otros recursos , entre ellos:

Desgaste de caché
Cuando se accede a la memoria principal siguiendo un patrón que hace que varias ubicaciones de la memoria principal compitan por las mismas líneas de caché, lo que genera errores excesivos en la caché . Es muy probable que esto sea problemático en el caso de las cachés con asociatividad .
TLB paliza
Cuando el buffer de búsqueda de traducción (TLB) que actúa como caché para la unidad de administración de memoria (MMU) que traduce direcciones virtuales a direcciones físicas es demasiado pequeño para el conjunto de trabajo de páginas, se puede producir una superación de TLB incluso si no se produce una superación de caché de instrucciones o de caché de datos porque se almacenan en caché en tamaños diferentes. Las instrucciones y los datos se almacenan en caché en bloques pequeños ( líneas de caché ), no en páginas enteras, 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 los conjuntos de trabajo están fragmentados en muchas páginas, el conjunto de trabajo de direcciones virtuales puede no caber en TLB, lo que provoca una superación de TLB.
Aplastamiento de montones
La recolección frecuente de basura , debido a una falla en la asignación de memoria para un objeto, debido a una memoria libre insuficiente o a una memoria libre contigua insuficiente debido a la fragmentación de la memoria, se conoce como "heap thrashing". [4]
Proceso de trillado
Un fenómeno similar ocurre con los procesos: cuando el conjunto de trabajo del proceso no se puede programar conjuntamente , es decir, cuando no todos los procesos que interactúan están programados para ejecutarse al mismo tiempo, experimentan una "paliza de proceso" debido a que se programan y desprograman repetidamente y progresan solo lentamente. [5]

Véase también

Referencias

  1. ^ Denning, Peter J. (1968). "Thrashing: Its causes and prevention" (PDF) . Actas de la AFIPS, Fall Joint Computer Conference . 33 : 915–922 . Consultado el 15 de febrero de 2012 .
  2. ^ L., Hennessy, John (2012). Arquitectura informática: un enfoque cuantitativo . Patterson, David A., Asanović, Krste . (5.ª ed.). Waltham, MA: Morgan Kaufmann. ISBN 9780123838728.OCLC 755102367  .{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
  3. ^ Song Jiang y Xiaodong Zhang (2005). "LRU ordenada por tokens: una política de reemplazo de páginas efectiva y su implementación en sistemas Linux" . Evaluación del rendimiento. págs. 5–29. doi :10.1016/j.peva.2004.10.002.
  4. ^ Técnicas de optimización y ajuste del rendimiento para procesadores IBM, incluido IBM POWER8 , "heap+thrashing", pág. 170
  5. ^ 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.