DistWave escribió:No entiendo el razonamiento de la cache en accesos secuenciales... si accedes una única vez a cada posición secuencialmente, la caché no debería tener ningún dato de esas posiciones ya que cada acceso se está realizando por primera vez, aunque sea un bloque completo. En una acceso aleatorio sí que puede acelerar porque puede haber leido ese bloque con anterioridad y estar cacheado.
Si accedes al disco de forma secuencial, el primer bloque lo lees efectivamente gastando el tiempo que se tarda en leer fisicamente el bloque, pero el hardware del disco duro aprovecha esa lectura para guardar en caché propia los bloques que siguen a continuación, ya que cuesta muy poco leerlos (el cabezal del disco duro ya está en la pista adecuada) y por el principio de localidad referencial, es muy probable que si se ha leído un bloque, a continuación quiera leerse el que le sigue a continuación.
Esa misma filosofía se sigue en las cachés del sistema, ya que pedir los datos de los bloques que están a continuación de aquél que hemos leido cuesta muy poco.
Asi que cuando lees, pongamos, 8 bloques secuenciales, puede pasar que el primero realmente lo leas gastando el tiempo de acceso al disco, pero los 7 restantes los estés leyendo de la caché. De ahí que una lectura secuencial no sea, por lo general, la mejor forma de medir el rendimiento de un disco duro mecánico. De hecho la lectura secuencial se usa para averiguar el máximo throughput del disco, porque se sabe que es cuando el sistema disco-caché-cable SATA funcionan con el máximo de transferencia. Es lo que aparece en los programas de benchmarking como "lectura burst" o "lectura por ráfaga". Fíjate que esto de acelerar los accesos secuenciales se usa incluso en la memoria del sistema, que trabaja más rápido si se accede a ella secuencialmente.
En un acceso aleatorio (si es exhaustivo) la caché nunca o casi nunca tendrá el dato cacheado de antes, ya que la caché es muchas veces menor en tamaño que el disco que pretendes medir y en un acceso aleatorio exhaustivo nunca se pide leer la misma dirección de bloque durante el benchmark sino que son todas diferentes.