En informática , las políticas de reemplazo de caché (también conocidas como algoritmos de reemplazo de caché o algoritmos de caché ) son instrucciones o algoritmos de optimización que un programa informático o una estructura mantenida por hardware puede utilizar para administrar una caché de información. El almacenamiento en caché mejora el rendimiento al mantener los datos recientes o de uso frecuente en ubicaciones de memoria más rápidas, o computacionalmente más económicas, de acceder que las de la memoria normal. Cuando la caché está llena, el algoritmo debe elegir qué elementos descartar para dejar espacio para nuevos datos.
Descripción general
El tiempo promedio de referencia de memoria es [ 1 ]
dónde
- = índice de fallos = 1 - (índice de aciertos)
- = tiempo para realizar un acceso a la memoria principal cuando hay un fallo (o, con una caché multinivel, tiempo promedio de referencia a la memoria para la caché inmediatamente inferior)
- = latencia: tiempo para acceder a la caché (debería ser el mismo para aciertos y fallos)
- = efectos secundarios, como los efectos de cola en sistemas multiprocesador
Una caché tiene dos parámetros principales de rendimiento: latencia y tasa de aciertos. Varios factores secundarios también afectan el rendimiento de la caché. [ 1 ]
La tasa de aciertos de una caché describe la frecuencia con la que se encuentra un elemento buscado. Las estrategias de reemplazo más eficientes registran más información de uso para mejorar la tasa de aciertos para un tamaño de caché determinado. La latencia de una caché describe cuánto tiempo tarda la caché en devolver un elemento tras solicitarlo, una vez que se ha producido un acierto. Las estrategias de reemplazo más rápidas suelen registrar menos información de uso —o, en el caso de una caché de mapeo directo, ninguna— para reducir el tiempo necesario para actualizar la información. Cada estrategia de reemplazo representa un compromiso entre la tasa de aciertos y la latencia.
Las mediciones de la tasa de aciertos se realizan normalmente en aplicaciones de referencia , y la tasa de aciertos varía según la aplicación. Las aplicaciones de transmisión de vídeo y audio suelen tener una tasa de aciertos cercana a cero, porque cada bit de datos en la transmisión se lee una vez (un fallo obligatorio), se utiliza y luego nunca se vuelve a leer ni a escribir. Muchos algoritmos de caché (en particular LRU ) permiten que los datos de transmisión llenen la caché, desplazando la información que pronto se volverá a utilizar ( contaminación de la caché ). [ 2 ] Otros factores pueden ser el tamaño, el tiempo de obtención y la expiración. Dependiendo del tamaño de la caché, puede que no se necesite ningún algoritmo de caché adicional para descartar elementos. Los algoritmos también mantienen la coherencia de la caché cuando se utilizan varias cachés para los mismos datos, como por ejemplo, cuando varios servidores de bases de datos actualizan un archivo de datos compartido.
Políticas
El algoritmo de Bélády
El algoritmo de almacenamiento en caché más eficiente consistiría en descartar la información que no se necesite durante el mayor tiempo posible; esto se conoce como el algoritmo óptimo de Bélády , la política de reemplazo óptima o el algoritmo clarividente . Dado que generalmente es imposible predecir con cuánta antelación se necesitará la información, esto resulta inviable en la práctica. El mínimo práctico se puede calcular tras la experimentación, y se puede comparar la eficacia del algoritmo de caché elegido.

Cuando se produce un fallo de página , un conjunto de páginas se encuentra en la memoria. En el ejemplo, la secuencia 5, 0, 1 es accedida por el marco 1, el marco 2 y el marco 3 respectivamente. Cuando se accede al 2, reemplaza el valor 5 (que se encuentra en el marco 1), lo que predice que el valor 5 no será accedido en un futuro próximo. Dado que un sistema operativo de propósito general no puede predecir cuándo se accederá al 5, el algoritmo de Bélády no puede implementarse en él.
reemplazo aleatorio (RR)
El reemplazo aleatorio selecciona un elemento y lo descarta para liberar espacio cuando sea necesario. Este algoritmo no requiere mantener ningún historial de acceso. Se ha utilizado en procesadores ARM debido a su simplicidad [ 3 ] y permite una simulación estocástica eficiente [ 4 ] .
Políticas sencillas basadas en colas
Primero en entrar, primero en salir (FIFO)
Con este algoritmo, la caché se comporta como una cola FIFO ; expulsa los bloques en el orden en que se agregaron, independientemente de la frecuencia o la cantidad de veces que se haya accedido a ellos previamente.
Último en entrar, primero en salir (LIFO) o Primero en entrar, último en salir (FILO)
La caché se comporta como una pila , y a diferencia de una cola FIFO, elimina primero el bloque añadido más recientemente, independientemente de la frecuencia o la cantidad de veces que se haya accedido a él previamente.
TAMIZ
SIEVE es un algoritmo de desalojo simple diseñado específicamente para cachés web, como cachés de clave-valor y redes de entrega de contenido. Utiliza la idea de promoción perezosa y degradación rápida. [ 5 ] Por lo tanto, SIEVE no actualiza la estructura de datos global en los aciertos de caché y retrasa la actualización hasta el momento del desalojo; mientras tanto, desaloja rápidamente los objetos recién insertados porque las cargas de trabajo de la caché tienden a mostrar altas tasas de un solo acierto, y la mayoría de los objetos nuevos no vale la pena mantenerlos en la caché. SIEVE utiliza una única cola FIFO y una mano móvil para seleccionar los objetos a desalojar. Los objetos en la caché tienen un bit de metadatos que indica si el objeto ha sido solicitado después de ser admitido en la caché. La mano de desalojo apunta al final de la cola al principio y se mueve hacia el principio con el tiempo. En comparación con el algoritmo de desalojo CLOCK, los objetos retenidos en SIEVE permanecen en la posición anterior. Por lo tanto, los objetos nuevos siempre están al principio y los objetos antiguos siempre están al final. A medida que la mano se mueve hacia la cabeza, los nuevos objetos son expulsados rápidamente (degradación rápida). [ 6 ]
Políticas sencillas basadas en la actualidad
Menos usado recientemente (LRU)
Descarta primero los elementos menos usados. Este algoritmo requiere llevar un registro de lo que se usó y cuándo, lo cual es engorroso. Requiere "bits de antigüedad" para las líneas de caché y rastrea la línea de caché menos usada en función de estos bits de antigüedad. Cuando se usa una línea de caché, la antigüedad de las demás líneas de caché cambia. LRU es una familia de algoritmos de almacenamiento en caché que incluye 2Q de Theodore Johnson y Dennis Shasha [ 7 ] y LRU/K de Pat O'Neil, Betty O'Neil y Gerhard Weikum [ 8 ] . La secuencia de acceso para el ejemplo es ABCDEDF:

Cuando ABCD se instala en los bloques con números de secuencia (incrementa 1 por cada nuevo acceso) y se accede a E, se produce un fallo y debe instalarse en un bloque. Con el algoritmo LRU, E reemplazará a A porque A tiene el rango más bajo (A(0)). En el penúltimo paso, se accede a D y se actualiza el número de secuencia. A continuación, se accede a F, reemplazando a B , que tenía el rango más bajo (B(1)).
Sistema de uso menos reciente (TLRU) sensible al tiempo
El algoritmo de caché menos usado con reconocimiento de tiempo (TLRU) [ 9 ] es una variante de LRU diseñada para cuando el contenido de una caché tiene una vida útil válida. Este algoritmo es adecuado para aplicaciones de caché de red, como redes centradas en la información (ICN), redes de entrega de contenido (CDN) y redes distribuidas en general. TLRU introduce el término TTU (tiempo de uso), una marca de tiempo del contenido (o de una página) que estipula el tiempo de uso del contenido en función de su ubicación y del editor del contenido. TTU proporciona mayor control al administrador local sobre la gestión del almacenamiento en red.
Cuando llega contenido sujeto a TLRU, un nodo de caché calcula el TTU local basándose en el TTU asignado por el editor del contenido. El valor del TTU local se calcula mediante una función definida localmente. Una vez calculado el valor del TTU local, se reemplaza un subconjunto del contenido total del nodo de caché. TLRU garantiza que el contenido menos popular y de corta duración se reemplace con el contenido entrante.
Usado más recientemente (MRU)
A diferencia de LRU, MRU descarta primero los elementos usados más recientemente. En la 11.ª conferencia VLDB, Chou y DeWitt afirmaron: «Cuando un archivo se escanea repetidamente en un patrón de referencia [secuencial en bucle], MRU es el mejor algoritmo de reemplazo ». [ 10 ] Investigadores que presentaron en la 22.ª conferencia VLDB señalaron que, para patrones de acceso aleatorio y escaneos repetidos sobre grandes conjuntos de datos (también conocidos como patrones de acceso cíclico), los algoritmos de caché MRU tienen más aciertos que LRU debido a su tendencia a retener datos más antiguos. [ 11 ] Los algoritmos MRU son más útiles en situaciones donde cuanto más antiguo es un elemento, mayor es la probabilidad de que se acceda a él. La secuencia de acceso para el ejemplo es ABCDECDB:

Los bloques ABCD se colocan en la caché, ya que hay espacio disponible. En el quinto acceso (E), el bloque que contenía D se reemplaza por E, puesto que este bloque se utilizó más recientemente. En el siguiente acceso (a D), se reemplaza C, puesto que fue el bloque al que se accedió justo antes de D.
Unidad de reemplazo de longitud segmentada (SLRU)
Una caché SLRU se divide en dos segmentos: de prueba y protegido. Las líneas de cada segmento se ordenan desde las más recientes hasta las menos recientes. Los datos de los fallos se añaden a la caché en el extremo más reciente del segmento de prueba. Los aciertos se eliminan de donde se encuentran y se añaden al extremo más reciente del segmento protegido; las líneas del segmento protegido se han accedido al menos dos veces. El segmento protegido es finito; la migración de una línea del segmento de prueba al segmento protegido puede forzar la migración de la línea LRU del segmento protegido al extremo más reciente del segmento de prueba, lo que le da a esta línea otra oportunidad de ser accedida antes de ser reemplazada. El límite de tamaño del segmento protegido es un parámetro SLRU que varía según los patrones de carga de trabajo de E/S . Cuando se deben descartar datos de la caché, las líneas se obtienen del extremo LRU del segmento de prueba. [ 12 ]
aproximaciones LRU
La técnica LRU puede resultar costosa en cachés con alta asociatividad . El hardware práctico suele emplear una aproximación para lograr un rendimiento similar a un menor coste.
Pseudo-LRU (PLRU)
Para cachés de CPU con alta asociatividad (generalmente > cuatro vías), el costo de implementación de LRU se vuelve prohibitivo. En muchas cachés de CPU, un algoritmo que casi siempre descarta uno de los elementos menos usados recientemente es suficiente; muchos diseñadores de CPU optan por un algoritmo PLRU, que solo necesita un bit por elemento de caché para funcionar. PLRU suele tener una tasa de fallos ligeramente peor, una latencia ligeramente mejor , consume un poco menos de energía que LRU y tiene una sobrecarga menor que LRU.
Los bits funcionan como un árbol binario de punteros de un bit que apuntan a un subárbol menos utilizado. Siguiendo la cadena de punteros hasta el nodo hoja se identifica el candidato de reemplazo. Con un acceso, todos los punteros en la cadena desde el nodo hoja de la ruta accedida hasta el nodo raíz se configuran para apuntar a un subárbol que no contiene la ruta accedida. La secuencia de acceso en el ejemplo es ABCDE:

Cuando se accede a un valor (como A) y este no se encuentra en la caché, se carga desde la memoria y se coloca en el bloque al que apuntan las flechas en el ejemplo. Una vez colocado dicho bloque, las flechas se invierten para apuntar en la dirección opuesta. Se colocan A, B, C y D; E reemplaza a A a medida que se llena la caché, ya que era hacia donde apuntaban las flechas, y las flechas que conducían a A se invierten para apuntar en la dirección opuesta (hacia B, el bloque que se reemplazará en el siguiente fallo de caché).
Clock-Pro
El algoritmo LRU no puede implementarse en la ruta crítica de los sistemas informáticos, como los sistemas operativos , debido a su alta sobrecarga; en su lugar, se suele utilizar Clock , una aproximación de LRU. Clock-Pro es una aproximación de LIRS para una implementación de bajo coste en sistemas. [ 13 ] Clock-Pro tiene el marco básico de Clock, con tres ventajas. Tiene tres "manecillas" (a diferencia de la única "manecilla" de Clock) y puede medir aproximadamente la distancia de reutilización de los accesos a datos. Al igual que LIRS, puede desalojar rápidamente elementos de datos de acceso único o de baja localidad . Clock-Pro es tan complejo como Clock y es fácil de implementar a bajo coste. La implementación de reemplazo de caché de búfer en la versión 2017 de Linux combina LRU y Clock-Pro. [ 14 ] [ 15 ]
Políticas sencillas basadas en la frecuencia
Menos utilizado (LFU)
El algoritmo LFU contabiliza la frecuencia de uso de un elemento; los menos utilizados se descartan primero. Es similar a LRU, con la diferencia de que se almacena el número de veces que se accedió a un bloque, en lugar de la fecha de acceso más reciente. Durante una secuencia de acceso, el bloque menos utilizado se elimina de la caché.
Uso reciente menos frecuente (LFRU)
El algoritmo de uso reciente menos frecuente (LFRU) [ 16 ] combina las ventajas de LFU y LRU. LFRU es adecuado para aplicaciones de caché de red como ICN , CDN y redes distribuidas en general. En LFRU, la caché se divide en dos particiones: privilegiada y no privilegiada. La partición privilegiada está protegida; si el contenido es popular, se coloca en ella. Para reemplazar la partición privilegiada, LFRU elimina el contenido de la partición no privilegiada, lo transfiere de la privilegiada a la no privilegiada e inserta nuevo contenido en la privilegiada. Se utiliza LRU para la partición privilegiada y un algoritmo LFU aproximado (ALFU) para la partición no privilegiada.
LFU con envejecimiento dinámico (LFUDA)
Una variante, LFU con envejecimiento dinámico (LFUDA), utiliza el envejecimiento dinámico para acomodar cambios en un conjunto de objetos populares; agrega un factor de antigüedad de caché al contador de referencias cuando se agrega un nuevo objeto a la caché o se vuelve a referenciar un objeto existente. LFUDA incrementa la antigüedad de la caché al desalojar bloques estableciéndola al valor de clave del objeto desalojado, y la antigüedad de la caché siempre es menor o igual al valor de clave mínimo en la caché. [ 17 ] Si un objeto fue accedido frecuentemente en el pasado y se vuelve impopular, permanecerá en la caché durante mucho tiempo (impidiendo que objetos nuevos o menos populares lo reemplacen). El envejecimiento dinámico reduce la cantidad de tales objetos, haciéndolos aptos para ser reemplazados, y LFUDA reduce la contaminación de la caché causada por LFU cuando una caché es pequeña.
S3-FIFO
Este es un nuevo algoritmo de desalojo diseñado en 2023. En comparación con los algoritmos existentes, que en su mayoría se basan en LRU (menos usado recientemente), S3-FIFO solo utiliza tres colas FIFO: una cola pequeña que ocupa el 10% del espacio de caché, una cola principal que utiliza el 90% del espacio de caché y una cola fantasma que solo almacena metadatos de objetos. La cola pequeña se utiliza para filtrar objetos de un solo acceso (objetos a los que solo se accede una vez en un corto período de tiempo); la cola principal se utiliza para almacenar objetos populares y utiliza la reinserción para mantenerlos en la caché; y la cola fantasma se utiliza para capturar objetos potencialmente populares que se desalojaron de la cola pequeña. Los objetos se insertan primero en la cola pequeña (si no se encuentran en la cola fantasma, de lo contrario se insertan en la cola principal); Al ser expulsado de la cola pequeña, si un objeto ha sido solicitado, se reinserta en la cola principal; de lo contrario, se expulsa y los metadatos se rastrean en la cola fantasma. [ 18 ]
Políticas al estilo RRIP
Las políticas de estilo RRIP son la base de otras políticas de reemplazo de caché, incluida Hawkeye. [ 19 ]
Predicción del intervalo de re-referencia (RRIP)
RRIP [ 20 ] es una política flexible, propuesta por Intel , que busca brindar una buena resistencia al escaneo al tiempo que permite la expulsión de líneas de caché antiguas que no se han reutilizado. Todas las líneas de caché tienen un valor de predicción, el RRPV (valor de predicción de re-referencia), que debería correlacionarse con el momento en que se espera que la línea se reutilice. El RRPV suele ser alto al insertar; si una línea no se reutiliza pronto, se expulsará para evitar escaneos (grandes cantidades de datos utilizados solo una vez) que llenen la caché. Cuando una línea de caché se reutiliza, el RRPV se establece en cero, lo que indica que la línea se ha reutilizado una vez y es probable que se reutilice de nuevo.
En caso de fallo de caché, se elimina la línea con un RRPV igual al máximo posible; con valores de 3 bits, se elimina una línea con un RRPV de 2³ - 1 = 7. Si ninguna línea tiene este valor, todos los RRPV del conjunto se incrementan en 1 hasta que uno lo alcance. Se necesita un criterio de desempate, que generalmente es la primera línea de la izquierda. Este incremento es necesario para asegurar que las líneas más antiguas se gestionen correctamente y se eliminen si no se reutilizan.
RRIP estático (SRRIP)
SRRIP inserta líneas con un valor RRPV de maxRRPV; una línea que acaba de ser insertada será la que tenga más probabilidades de ser eliminada en caso de fallo de caché.
Programa de Reducción de Riesgos Bimodal (BRRIP)
SRRIP funciona bien normalmente, pero sufre cuando el conjunto de trabajo es mucho mayor que el tamaño de la caché y provoca saturación de la caché . Esto se soluciona insertando líneas con un valor RRPV de maxRRPV la mayor parte del tiempo, e insertando líneas con un valor RRPV de maxRRPV - 1 aleatoriamente con baja probabilidad. Esto hace que algunas líneas se "queden atascadas" en la caché y ayuda a prevenir la saturación. Sin embargo, BRRIP degrada el rendimiento en accesos que no provocan saturación. SRRIP funciona mejor cuando el conjunto de trabajo es menor que la caché, y BRRIP funciona mejor cuando el conjunto de trabajo es mayor que la caché.
Programa dinámico de reinversión de riesgos (DRRIP)
DRRIP [ 20 ] utiliza el duelo de conjuntos [ 21 ] para seleccionar si usar SRRIP o BRRIP. Dedica algunos conjuntos (normalmente 32) a usar SRRIP y otros pocos a usar BRRIP, y utiliza un contador de políticas que supervisa el rendimiento del conjunto para determinar qué política utilizará el resto de la caché.
Políticas que se aproximan al algoritmo de Bélády
El algoritmo de Bélády es la política óptima de reemplazo de caché, pero requiere conocer el futuro para desalojar las líneas que se reutilizarán más adelante. Se han propuesto varias políticas de reemplazo que intentan predecir las distancias de reutilización futuras a partir de patrones de acceso pasados, [ 22 ] lo que les permite aproximarse a la política de reemplazo óptima. Algunas de las políticas de reemplazo de caché con mejor rendimiento intentan imitar el algoritmo de Bélády.
Ojo de Halcón
Hawkeye [ 19 ] intenta emular el algoritmo de Bélády utilizando accesos anteriores de una PC para predecir si los accesos que produce generan accesos amigables con la caché (utilizados posteriormente) o accesos adversos a la caché (no utilizados posteriormente). Muestrea una serie de conjuntos de caché no alineados y utiliza un historial de longitudy emula el algoritmo de Bélády en estos accesos. Esto permite que la política determine qué líneas deberían haberse almacenado en caché y cuáles no, prediciendo si una instrucción es amigable con la caché o no. Estos datos se introducen en un RRIP; los accesos desde instrucciones amigables con la caché tienen un valor RRPV más bajo (probablemente se desalojarán más tarde), y los accesos desde instrucciones no amigables con la caché tienen un valor RRPV más alto (probablemente se desalojarán antes). El backend del RRIP toma las decisiones de desalojo. La caché muestreada y el generador OPT establecen el valor RRPV inicial de las líneas de caché insertadas. Hawkeye ganó el campeonato de caché CRC2 en 2017, [ 23 ] y Harmony [ 24 ] es una extensión de Hawkeye que mejora el rendimiento de la precarga.

Sinsajo
Mockingjay [ 25 ] intenta mejorar Hawkeye de varias maneras. Elimina la predicción binaria, lo que le permite tomar decisiones más precisas sobre qué líneas de caché desalojar, y deja la decisión sobre qué línea de caché desalojar para cuando haya más información disponible.
Mockingjay mantiene una caché muestreada de accesos únicos, las PC que los produjeron y sus marcas de tiempo. Cuando se accede nuevamente a una línea en la caché muestreada, la diferencia de tiempo se enviará al predictor de distancia de reutilización. El RDP utiliza aprendizaje de diferencia temporal , [ 26 ] donde el nuevo valor de RDP se incrementará o disminuirá en un número pequeño para compensar los valores atípicos; el número se calcula comoSi el valor no se ha inicializado, se inserta directamente la distancia de reutilización observada. Si la caché muestreada está llena y es necesario descartar una línea, se le indica al RDP que el PC que accedió por última vez a ella genera accesos en flujo continuo.
En caso de acceso o inserción, el tiempo estimado de reutilización (ETR) de esta línea se actualiza para reflejar la distancia de reutilización prevista. En caso de fallo de caché, se elimina la línea con el valor ETR más alto. Mockingjay ofrece resultados muy similares al algoritmo óptimo de Bélády.
Políticas de aprendizaje automático
Varias políticas han intentado utilizar perceptrones , cadenas de Markov u otros tipos de aprendizaje automático para predecir qué línea desalojar. [ 27 ] [ 28 ] También existen algoritmos de aprendizaje aumentado para el reemplazo de caché. [ 29 ] [ 30 ]
Otras políticas
Conjunto de baja recencia entre referencias (LIRS)
LIRS es un algoritmo de reemplazo de páginas con un rendimiento superior al de LRU y otros algoritmos de reemplazo más recientes. La distancia de reutilización es una métrica para clasificar dinámicamente las páginas accedidas y tomar una decisión de reemplazo. [ 31 ] LIRS aborda las limitaciones de LRU utilizando la recencia para evaluar la recencia entre referencias (IRR) y así tomar una decisión de reemplazo.

En el diagrama, X indica que se accede a un bloque en un momento determinado. Si se accede al bloque A1 en el tiempo 1, su recencia será 0; este es el primer bloque al que se accede y el IRR será 1, ya que predice que se volverá a acceder a A1 en el tiempo 3. En el tiempo 2, dado que se accede a A4, la recencia se convertirá en 0 para A4 y en 1 para A1; A4 es el objeto al que se accedió más recientemente, y el IRR se convertirá en 4. En el tiempo 10, el algoritmo LIRS tendrá dos conjuntos: un conjunto LIR = {A1, A2} y un conjunto HIR = {A3, A4, A5}. En el tiempo 10, si hay acceso a A4 ocurre un fallo; LIRS desalojará A5 en lugar de A2 debido a su mayor recencia.
caché de reemplazo adaptativo
La caché de reemplazo adaptativo (ARC) equilibra constantemente entre LRU y LFU para mejorar el resultado combinado. [ 32 ] Mejora SLRU utilizando información sobre elementos de caché recientemente desalojados para ajustar el tamaño de los segmentos protegidos y de prueba para hacer el mejor uso del espacio de caché disponible. [ 33 ]
Reloj con reemplazo adaptativo
El reloj con reemplazo adaptativo (CAR) combina las ventajas de ARC y Clock . CAR ofrece un rendimiento comparable al de ARC y supera a LRU y Clock. Al igual que ARC, CAR se autoajusta y no requiere parámetros especificados por el usuario.
Cola múltiple
El algoritmo de reemplazo de múltiples colas (MQ) se desarrolló para mejorar el rendimiento de una caché de búfer de segundo nivel, como una caché de búfer de servidor, y fue presentado en un artículo de Zhou, Philbin y Li. [ 34 ] La caché MQ contiene m colas LRU: Q 0 , Q 1 , ..., Q m -1 . El valor de m representa una jerarquía basada en la vida útil de todos los bloques en esa cola. [ 35 ]

Cesto
Pannier [ 36 ] es un mecanismo de almacenamiento en caché flash basado en contenedores que identifica aquellos contenedores cuyos bloques tienen patrones de acceso variables. Pannier tiene una estructura de cola de supervivencia basada en una cola de prioridad para clasificar los contenedores según su tiempo de supervivencia, que es proporcional a los datos activos en el contenedor.
Análisis estático
El análisis estático determina qué accesos son aciertos o fallos de caché para indicar el peor tiempo de ejecución de un programa. [ 37 ] Un enfoque para analizar las propiedades de las cachés LRU es dar a cada bloque de la caché una "antigüedad" (0 para el más usado recientemente) y calcular intervalos para las posibles edades. [ 38 ] Este análisis se puede refinar para distinguir casos en los que el mismo punto del programa es accesible por rutas que resultan en fallos o aciertos. [ 39 ] Se puede obtener un análisis eficiente abstraiendo conjuntos de estados de caché por anticadenas que se representan mediante diagramas de decisión binarios compactos . [ 40 ]
El análisis estático de LRU no se extiende a las políticas pseudo-LRU. Según la teoría de la complejidad computacional , los problemas de análisis estático planteados por pseudo-LRU y FIFO pertenecen a clases de complejidad más altas que los de LRU. [ 41 ] [ 42 ]
Véase también
Referencias
- 1 2 Alan Jay Smith. "Diseño de memorias caché de CPU". Actas de IEEE TENCON, 1987.
- ↑ Paul V. Bolotoff. "Principios funcionales de la memoria caché". Archivado el 14 de marzo de 2012 en Wayback Machine . 2007.
- ↑ Guía del programador de la serie ARM Cortex-R
- ↑ Un algoritmo de simulación eficiente para la política de reemplazo aleatorio en caché
- ↑ Yang, Juncheng; Qiu, Ziyue; Zhang, Yazhuo; Yue, Yao; Rashmi, KV (22 de junio de 2023). "FIFO puede ser mejor que LRU: El poder de la promoción perezosa y la degradación rápida" . Actas del 19.º Taller sobre Temas Candentes en Sistemas Operativos . HOTOS '23. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 70–79 . doi : 10.1145/3593856.3595887 . ISBN 979-8-4007-0195-5.
- ↑ Zhang, Yazhuo; Yang, Juncheng; Yue, Yao; Vigfusson, Ymir; Rashmi, KV (2024). {SIEVE} es más simple que {LRU}: un algoritmo de desalojo {llave en mano} eficiente para cachés web . págs. 1229–1246 . ISBN 978-1-939133-39-7.
- ↑ Johnson, Theodore; Shasha, Dennis (12 de septiembre de 1994). "2Q: Un algoritmo de reemplazo de gestión de búferes de alto rendimiento y baja sobrecarga" (PDF) . Actas de la 20.ª Conferencia Internacional sobre Bases de Datos Muy Grandes . VLDB '94. San Francisco, CA: Morgan Kaufmann Publishers Inc.: 439–450 . ISBN 978-1-55860-153-6. S2CID 6259428 .
- ↑ O'Neil, Elizabeth J .; O'Neil, Patrick E.; Weikum, Gerhard (1993). "El algoritmo de reemplazo de páginas LRU-K para el almacenamiento en búfer de disco de bases de datos". Actas de la conferencia internacional ACM SIGMOD de 1993 sobre gestión de datos - SIGMOD '93 . Nueva York, NY, EE. UU.: ACM. págs. 297–306 . CiteSeerX 10.1.1.102.8240 . doi : 10.1145/170035.170081 . ISBN 978-0-89791-592-2. S2CID 207177617 .
- ↑ Bilal, Muhammad; et al. (2014). "Política de gestión de caché Time Aware Least Recent Used (TLRU) en ICN". 16.ª Conferencia Internacional sobre Tecnología Avanzada de la Comunicación . pp. 528–532 . arXiv : 1801.00390 . Bibcode : 2018arXiv180100390B . doi : 10.1109/ICACT.2014.6779016 . ISBN 978-89-968650-3-2. S2CID 830503 .
- ↑ Hong-Tai Chou y David J. DeWitt. Una evaluación de las estrategias de gestión de búferes para sistemas de bases de datos relacionales. VLDB, 1985.
- ^ Shaul Dar, Michael J. Franklin, Björn Þór Jónsson, Divesh Srivastava y Michael Tan. Almacenamiento en caché y reemplazo de datos semánticos. VLDB, 1996.
- ↑ Ramakrishna Karedla, J. Spencer Love y Bradley G. Wherry. Estrategias de almacenamiento en caché para mejorar el rendimiento del sistema de disco. En Computer , 1994.
- ↑ Jiang, Song; Chen, Feng; Zhang, Xiaodong (2005). "CLOCK-Pro: Una mejora efectiva del reemplazo de CLOCK" (PDF) . Actas de la Conferencia Técnica Anual de USENIX . Asociación USENIX: 323–336 .
- ↑ "Gestión de memoria en Linux: Diseño de reemplazo de páginas" . 30 de diciembre de 2017. Consultado el 30 de junio de 2020 .
- ↑ Corbet, Jonathan (16 de agosto de 2005). "Implementación de reemplazo de página de CLOCK-Pro" . LWN.net . Recuperado el 30 de junio de 2020 .
- ↑ Bilal, Muhammad; et al . (2017). "Un esquema de gestión de caché para la eliminación y replicación eficiente de contenido en redes de caché" . IEEE Access . 5 : 1692–1701 . arXiv : 1702.04078 . Bibcode : 2017arXiv170204078B . doi : 10.1109/ACCESS.2017.2669344 . S2CID 14517299 .
- ↑ Jayarekha, P.; Nair, T (2010). "Un enfoque de reemplazo dinámico adaptativo para un sistema de memoria caché de prefijos con conciencia de popularidad basado en multidifusión". arXiv : 1001.4135 [ cs.MM ].
- ↑ Yang, Juncheng; Zhang, Yazhuo; Qiu, Ziyue; Yue, Yao; Vinayak, Rashmi (23 de octubre de 2023). "Las colas FIFO son todo lo que necesitas para la eliminación de caché" . Actas del 29.º Simposio sobre Principios de Sistemas Operativos . SOSP '23. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 130–149 . doi : 10.1145/3600006.3613147 . ISBN 979-8-4007-0229-7.
- 1 2 Jain, Akanksha; Lin, Calvin (junio de 2016). "Regreso al futuro: aprovechando el algoritmo de Belady para mejorar el reemplazo de caché". 2016 ACM/IEEE 43.º Simposio Internacional Anual sobre Arquitectura de Computadoras (ISCA) . págs. 78–89 . doi : 10.1109/ISCA.2016.17 . ISBN 978-1-4673-8947-1.
- 1 2 Jaleel, Aamer; Theobald, Kevin B.; Steely, Simon C.; Emer, Joel (19 de junio de 2010). "Reemplazo de caché de alto rendimiento mediante predicción del intervalo de re-referencia (RRIP)" . Actas del 37.º simposio internacional anual sobre arquitectura de computadoras . ISCA '10. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 60–71 . doi : 10.1145/1815961.1815971 . ISBN 978-1-4503-0053-7. S2CID 856628 .
- ↑ Qureshi, Moinuddin K.; Jaleel, Aamer; Patt, Yale N.; Steely, Simon C.; Emer, Joel (9 de junio de 2007). "Políticas de inserción adaptativas para almacenamiento en caché de alto rendimiento" . ACM SIGARCH Computer Architecture News . 35 (2): 381– 391. doi : 10.1145/1273440.1250709 . ISSN 0163-5964 .
- ↑ Keramidas, Georgios; Petoumenos, Pavlos; Kaxiras, Stefanos (2007). "Reemplazo de caché basado en la predicción de la distancia de reutilización" . 25.ª Conferencia Internacional sobre Diseño de Computadoras de 2007. pp. 245–250 . doi : 10.1109/ICCD.2007.4601909 . ISBN 978-1-4244-1257-0. S2CID 14260179 .
- ↑ "EL SEGUNDO CAMPEONATO DE REEMPLAZO DE CACHÉS – Celebrado conjuntamente con ISCA en junio de 2017" . crc2.ece.tamu.edu . Consultado el 24 de marzo de 2022 .
- ↑ Jain, Akanksha; Lin, Calvin (junio de 2018). «Repensando el algoritmo de Belady para incorporar la precarga». 2018 ACM/IEEE 45th Annual International Symposium on Computer Architecture (ISCA) . págs. 110–123 . doi : 10.1109/ISCA.2018.00020 . ISBN 978-1-5386-5984-7. S2CID 5079813 .
- ↑ Shah, Ishan; Jain, Akanksha; Lin, Calvin (abril de 2022). "Imitación efectiva de la política MIN de Belady". HPCA .
- ↑ Sutton, Richard S. (1 de agosto de 1988). "Aprendizaje para predecir mediante métodos de diferencias temporales" . Machine Learning . 3 (1): 9– 44. Bibcode : 1988MLear...3....9S . doi : 10.1007/BF00115009 . ISSN 1573-0565 . S2CID 207771194 .
- ↑ Liu, Evan; Hashemi, Milad; Swersky, Kevin; Ranganathan, Parthasarathy; Ahn, Junwhan (21 de noviembre de 2020). "Un enfoque de aprendizaje por imitación para el reemplazo de caché" . Conferencia Internacional sobre Aprendizaje Automático . PMLR: 6237–6247 . arXiv : 2006.16239 .
- ↑ Jiménez, Daniel A.; Teran, Elvira (14 de octubre de 2017). «Predicción de reutilización multiperspectiva» . Actas del 50.º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura . Nueva York, NY, EE. UU.: ACM. págs. 436–448 . doi : 10.1145/3123939.3123942 . ISBN 9781450349529. S2CID 1811177 .
- ↑ Lykouris, Thodoris; Vassilvitskii, Sergei (7 de julio de 2021). "Almacenamiento en caché competitivo con asesoramiento de aprendizaje automático" . Journal of the ACM . 68 (4): 1– 25. arXiv : 1802.05399 . doi : 10.1145/3447579 . eISSN 1557-735X . ISSN 0004-5411 . S2CID 3625405 .
- ↑ Mitzenmacher, Michael ; Vassilvitskii, Sergei (31 de diciembre de 2020). «Algoritmos con predicciones». Más allá del análisis del peor caso de los algoritmos . Cambridge University Press. págs. 646–662 . arXiv : 2006.09123 . doi : 10.1017/9781108637435.037 . ISBN 9781108637435.
- ↑ Jiang, Song; Zhang, Xiaodong (junio de 2002). "LIRS: una política eficiente de reemplazo de conjuntos de recencia de baja inter-referencia para mejorar el rendimiento de la caché de búfer" (PDF) . ACM SIGMETRICS Performance Evaluation Review . 30 (1). Association for Computing Machinery: 31–42 . doi : 10.1145/511399.511340 . ISSN 0163-5999 .
- ↑ Nimrod Megiddo y Dharmendra S. Modha. ARC: Una caché de reemplazo autoajustable y de baja sobrecarga. FAST, 2003.
- ↑ "Algunas ideas sobre la caché de lectura de ZFS - o: El ARC - c0t0d0s0.org" . Archivado del original el 24 de febrero de 2009.
- ↑ Yuanyuan Zhou , James Philbin y Kai Li. El algoritmo de reemplazo de múltiples colas para cachés de búfer de segundo nivel. USENIX, 2002.
- ↑ Eduardo Pinheiro, Ricardo Bianchini, Técnicas de conservación de energía para servidores basados en matrices de discos, Actas de la 18.ª conferencia internacional anual sobre supercomputación, 26 de junio - 1 de julio de 2004, Malo, Francia
- ↑ Cheng Li, Philip Shilane, Fred Douglis y Grant Wallace. Pannier: una caché flash basada en contenedores para objetos compuestos. ACM/IFIP/USENIX Middleware, 2015.
- ↑ Christian Ferdinand; Reinhard Wilhelm (1999). "Predicción eficiente y precisa del comportamiento de la caché para sistemas en tiempo real". Real-Time Syst . 17 ( 2–3 ): 131–181 . Bibcode : 1999RTSys..17..131F . doi : 10.1023/A:1008186323068 . S2CID 28282721 .
- ↑ Christian Ferdinand; Florian Martin; Reinhard Wilhelm; Martin Alt (noviembre de 1999). "Predicción del comportamiento de la caché mediante interpretación abstracta". Science of Computer Programming . 35 ( 2–3 ). Springer: 163–189 . doi : 10.1016/S0167-6423(99)00010-6 .
- ↑ Valentin Touzeau; Claire Maïza; David Monniaux; Jan Reineke (2017). "Determinación de la incertidumbre para un análisis exacto y eficiente de cachés". Verificación asistida por computadora (2) . arXiv : 1709.10008 . doi : 10.1007/978-3-319-63390-9_2 .
- ↑ Valentin Touzeau; Claire Maïza; David Monniaux; Jan Reineke (2019). "Análisis rápido y exacto para cachés LRU". Proc. {ACM} Program. Lang . 3 (POPL): 54:1–54:29. arXiv : 1811.01670 .
- ↑ David Monniaux; Valentin Touzeau (11 de noviembre de 2019). "Sobre la complejidad del análisis de caché para diferentes políticas de reemplazo" . Journal of the ACM . 66 (6). Association for Computing Machinery: 1–22 . arXiv : 1811.01740 . doi : 10.1145/3366018 . S2CID 53219937 .
- ↑ David Monniaux (13 de mayo de 2022). "La brecha de complejidad en el análisis estático de accesos a caché crece si se agregan llamadas a procedimientos" . Métodos formales en el diseño de sistemas . 59 ( 1–3 ). Springer Verlag: 1–20 . arXiv : 2201.13056 . doi : 10.1007/s10703-022-00392-w . S2CID 246430884 .
Enlaces externos
- Definiciones de varios algoritmos de caché
- Algoritmo de almacenamiento en caché para memoria flash/SSD
- Caché (informática)
- Algoritmos de gestión de memoria