Algoritmo de reemplazo de caché más eficiente [cerrado]


12

Wikipedia enumera 11 algoritmos de reemplazo de caché . Suponiendo que no sé casi nada acerca de la aplicación que voy a desarrollar, ¿qué debo usar como algoritmo de reemplazo de caché "predeterminado"?

Si recuerdo correctamente de mi curso de sistema operativo, LRU es el mejor algoritmo general de reemplazo de caché. Pero tal vez estoy equivocado.

Además, esta es una pregunta académica, ya que, en general, la memoria principal es barata y abundante y realmente no necesito preocuparme demasiado por el tamaño de la memoria caché.


1
¿La precarga es relevante para su aplicación? Si es así, la estrategia de pretratamiento y retención debe considerarse en conjunto al elegir algoritmos.
rwong

Deberá obtener rastreos de muestra (la lista de patrones de acceso a datos) que son representativos del dominio de aplicación deseado. Es posible que pueda encontrar conjuntos de pruebas disponibles públicamente de la investigación académica. Luego puede implementar cada algoritmo, simular e informar sus hallazgos. De lo contrario, use LRU con reemplazo escasamente aleatorio.
rwong

1
Si "no sabe casi nada sobre la aplicación", es demasiado pronto para pensar en algoritmos de reemplazo de caché "eficientes".
Anon

La memoria principal puede ser barata, pero si el rendimiento es un problema importante, la eficiencia del acceso será importante. No creo que pueda elegir su estrategia de reemplazo de caché, a menos que sea el arquitecto principal de una nueva computadora. El resto de nosotros recibimos lo que ofrece el mercado. Si necesita ir rápido, debe organizar sus estructuras de cómputo y datos para hacer un uso eficiente de la jerarquía de memoria.
Omega Centauri

1
@Omega Centauri Piensa solo en los cachés de la CPU, pero hay mucho más. El sistema operativo almacena en caché archivos y directorios, las bases de datos almacenan en caché sus datos, casi cada aplicación almacena mucho en caché (por ejemplo, de resultados ya calculados).
maaartinus

Respuestas:


15

Supongo que la mejor respuesta es que depende. En mi experiencia, hay muchos factores que intervienen en la elección de algoritmos de almacenamiento en caché.

Factores a considerar

  1. Balance de lectura / escritura. (¿Qué porcentaje de accesos son lecturas vs escrituras?)
  2. Cantidad de caché.
  3. Tipo de medios detrás del caché. (¿Son unidades SATA lentas o unidades SSD rápidas?)
  4. Hits vs Misses. (¿Con qué frecuencia se reescriben o releen las cosas?)
  5. Tamaño de acceso promedio (Esto entra en elegir el tamaño de página)
  6. Qué caros son las lecturas y las escrituras.

Una vez que considera todos los factores diferentes, necesita encontrar un algoritmo de caché que maneje mejor. Por ejemplo, supongamos que tiene una aplicación donde hay muchas escrituras, algunas reescrituras, lecturas de datos escritos recientemente y algún tipo de medio giratorio. En este caso, desearía una especie de algoritmo de almacenamiento en caché híbrido. Para manejar los datos de escritura, es posible que desee algo como Wise order of Writes (WOW) y un algoritmo LRU para los datos que se han leído del disco. La razón de esto es que los accesos al disco son muy caros y el algoritmo WOW hará que sea más eficiente escribir datos y la LRU mantendrá los datos de acceso frecuente siempre en caché.

Supongamos que tiene discos SSD, que tienen un tiempo de acceso muy rápido, es posible que desee adaptar su elección al algoritmo LRU, ya que los accesos a disco son relativamente económicos.

Así que realmente lo que quiero decir es que no hay una "mejor" respuesta. La mejor respuesta es conocer los factores que se aplican a usted y elegir el algoritmo que mejor los maneje.

Cómo encontrar el algoritmo para ti

Perfile su sistema. Esto generalmente implica agregar código para mantener estadísticas para los accesos a la memoria. Al hacer un perfil puede ver qué factores son más importantes para usted.

En el pasado, agregué código para rastrear todos los accesos a la memoria durante un período de tiempo. Luego busco patrones. Busco relecturas, reescrituras, acceso secuencial, acceso aleatorio, etc.

Una vez que haya identificado las cosas importantes, debe observar todos los diferentes tipos de algoritmos de almacenamiento en caché para ver cuál maneja qué cosas son las mejores.


Gran desglose de factores. Pero no estoy seguro de cómo aplicarlos, dado que conozco el dominio de la aplicación y los factores.
cenizas999

@ashes: Existe la vieja técnica de ingeniería: construye algunas de diferentes maneras y mide cuál funciona mejor.
Donal Fellows

Cuando escucho "caché" pienso en el almacenamiento entre la memoria y los registros de la CPU. Aquí está hablando de caché de disco, que es una capa entre la memoria y uno o más dispositivos de E / S.
Omega Centauri

@ barrem23 Si está haciendo una programación distribuida, también debe considerar la "distancia entre el caché y el almacenamiento de fondo". No importa mucho, si tiene un SSD o un óxido giratorio como su almacenamiento grande y estable, si el almacenamiento está a 15 ms de distancia, siempre incurrirá en un mínimo de 30 ms de ida y vuelta de todos modos.
Vatine

9

Suponiendo que no sabe casi nada acerca de la aplicación que va a desarrollar, debe saber más antes de elegir e implementar un sistema de caché. En otras palabras, no hay implementaciones predeterminadas: algunas son buenas para algunos propósitos y son totalmente malas para otros .

Por ejemplo, tome solo dos implementaciones: Menos utilizadas recientemente y Menos utilizadas frecuentemente. ¿Cómo decidir cuál usar antes que otro?

  • LRU es bueno cuando está bastante seguro de que el usuario accederá con mayor frecuencia a los elementos más recientes y nunca o rara vez volverá a los anteriores. Un ejemplo: un uso general de un cliente de correo electrónico. En la mayoría de los casos, los usuarios acceden constantemente a los correos más recientes. Los leen, los posponen, regresan en unos minutos, horas o días, etc. Pueden encontrarse buscando un correo que recibieron hace dos años, pero ocurre con menos frecuencia que acceder a los correos que recibieron en las últimas dos horas.

  • Por otro lado, LRU no tiene sentido en el contexto donde el usuario accederá a algunos elementos con mucha más frecuencia que otros. Un ejemplo: con frecuencia escucho la música que me gusta, y puede suceder que en 400 canciones, escuche las mismas cinco al menos una vez por semana, mientras que escucharé como máximo una vez al año 100 canciones que no me gustan también mucho. En este caso, LFU es mucho más apropiado.

Al tomar solo dos de las implementaciones, verá que no hay un algoritmo "predeterminado" que pueda usar cuando no quiera pensar cuál es mejor o no tiene suficiente información sobre la aplicación. Es, bueno, como preguntar si, por defecto, debe sumar, restar, multiplicar o dividir dos números para encontrar el resultado de un cálculo cuando no sabe nada al respecto.


Ok, entonces, ¿cómo hago para elegir un algoritmo? Revise la lista de Wikipedia y vea qué es lo que mejor se ajusta.
cenizas999

@ ashes999: exactamente! Primero, aprende más sobre los requisitos de la aplicación, luego analiza los pros y los contras de los diferentes algoritmos de caché, y finalmente elige el más apropiado.
Arseni Mourzenko

3

¿Por qué limitar sus opciones solo a Wikipedia? Si tiene acceso a una base de datos de investigación como la Biblioteca Digital ACM , encontrará aún más algoritmos. También tenga en cuenta acerca de jugar con las patentes. Por ejemplo, ARC es un buen algoritmo pero desafortunadamente está patentado.


2

Podría pasar mucho tiempo agonizando sobre el "mejor" algoritmo, o simplemente podría implementar un algoritmo simple y COMENZAR CON EL RESTO DEL SISTEMA. Cuando tengas algo comprobable, entonces preocúpate por el algoritmo.

Optimización prematura ...


0

No existe un algoritmo de caché perfecto: siempre puede encontrar un caso que se comporte muy mal.

Por lo tanto, es importante conocer el problema que se está almacenando en caché para determinar cuál se comportará menos mal.

Además, debe considerar cuánto tiempo necesita almacenar en caché las cosas y cuánto tiempo puede almacenarlas ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.