Supongamos que tengo algunos datos a los que se accede con frecuencia y otros a los que se accede con menos frecuencia. Entiendo que ARC eventualmente aprenderá a dejar de desalojar los datos a los que se accede con frecuencia para dejar espacio para otros datos simplemente porque se accedió a ellos recientemente. Supongamos que he estado ejecutando un sistema ZFS durante bastante tiempo y ha detectado este patrón de acceso.
Si reinicio mi caja y los datos a los que se accede con frecuencia simplemente se leen y, por lo tanto, están en el ARC, ¿las nuevas lecturas de otros datos provocarán su desalojo? ¿O recuerda ZFS que esos datos se utilizan con frecuencia?
Si depende de la implementación, entonces esta pregunta se refiere específicamente a Solaris.
Respuesta1
El ARC no tiene contadores persistentes, por lo que tendrá que ver su patrón de acceso nuevamente para determinar si algo se usa con frecuencia. Sin embargo, no expulsará nada hasta que esté lleno/hay presión de memoria de otra cosa en el sistema, por lo que en el primer arranquetodolo leído o escrito terminará en el caché. Siempre que los datos a los que accede con frecuencia se lean dos veces antes de esa fecha, deberían aparecer en la lista "MFU".
Puedes leer más sobre el algoritmo ARC.aquí. En pocas palabras, en realidad está hecha de dos listas LRU, una para cosas a las que se ha accedido una vez (la “lista MRU”) y otra para cosas a las que se ha accedido dos o más veces (la “lista MFU”; sí, la El nombre es incorrecto, realmente usa LRU para desalojar porque LRU es más rápido y sencillo de implementar que MFU). También hay "listas fantasma" que realizan un seguimiento de las claves recientemente desalojadas (pero no de los datos) de cada lista, lo que ayuda a determinar qué tan grandes deben ser los dos cachés entre sí.
El L2ARC es persistente (generalmente almacenado en SSD) pero no utiliza el algoritmo ARC (otro nombre subóptimo). Creo que simplemente realiza una rotación circular de los datos en el caché. Además, creo que no puedes reutilizarlo después de reiniciar a menos que estés usando la bifurcación de OpenZFS de Nexenta (no creo que lo hayan conseguido todavía).
A excepción de la función "L2ARC persistente" de Nexenta, nada en esta respuesta es específico de la plataforma.