Follow By Email

martes, 17 de enero de 2012

¿Qué es un Cache y cómo funciona? - Eliax.com

   ¿Cuántas veces no han leído especificaciones en un CPU, una memoria, disco duro, o incluso en terminología en navegadores y aplicaciones web, en donde se refieren a un "Cache"?

   Cache es uno de esos términos que para el usuario técnico es una simpleza, pero para la persona común no familiarizada con el término es lo mismo que decir palabras mágicas en una película de Harry Potter. Cosas como que un disco duro tiene 16MB de cache, o que un CPU tiene 2MB de cache es algo que la mayoría de los consumidores no entiende, y por lo general simplemente siguen la regla que mientras mas grande es el cache mejor debe ser lo que uno está comprando (y esa regla en este caso es por lo general una buena regla a seguir, aunque no siempre como veremos).
   Así que veamos qué es este concepto en términos sencillos y fáciles de entender...

   Imagínate que trabajas en una central telefónica de un pequeño pueblo, en donde muchas personas llaman para preguntarte el número telefónico de algunos negocios (restaurantes, cines, tiendas de ropa, bancos, etc), y que lo único que tienes disponible para contestar es una de esas tradicionales guías telefónicas (un libro bastante pesado y de gran espesor).
   Una cosa que notarás en tu empleo, al cabo de poco tiempo, es que las personas tienden a preguntar con bastante frecuencia sobre un grupo en particular de negocios populares, por lo que para hacer tu trabajo mas eficiente, lo que empiezas a hacer es a copiar el número telefónico de esos negocios populares en un cuaderno aparte, organizados alfabéticamente.
   Ese cuaderno tiene quizás solo 4 o 5 páginas (versus las cientos de página de la guía original), pero sientes confianza en que en alrededor del 50% de los casos cada vez que te llaman esos números los puedes encontrar en esta pequeña guía, en donde puedes encontrar los números mas rápidamente.
Pues felicidades porque acabas de crear un cache.
El mismo concepto se utiliza por ejemplo en un disco duro. Un controlador interno utiliza una pequeña cantidad de memoria (digamos, 16MB) para almacenar cosas que cree tú vas a pedir en el futuro próximo, de modo que si tu PC le pide información al disco duro, y este la tiene en el cache de 16MB, te la puede dar muchísimo mas rápidamente que buscándola físicamente en el disco duro (el cual a la fecha es muy posible que sea un sistema mecánico con discos que giran, mientras que la memoria cache es memoria sólida y mucho mas rápida).
   Es decir, un cache sirve para acelerar el acceso a la información, y por eso, mientras mas grande es el cache por lo general mejor el rendimiento, ya que mas cosas se pueden almacenar en este cache "por si acaso" se necesitan.

Otro concepto importante del cache es lo denominado en jerga técnica un "cache miss", un fallo de cache. Expliquemos lo que es eso siguiendo el ejemplo de la guía telefónica...
   Digamos que alguien te llama, y tu esperas la llamada con tu pequeño cuaderno en mano (y dejas la guía telefónica original a un lado tuyo), y te pide un teléfono. Lo primero que haces es abrir tu cuaderno y buscar a ver si el número está ahí, sin embargo te das cuenta que no se encuentra ahí, por lo que procedes entonces a poner el cuaderno a un lado, recoger una vez mas la guía telefónica, y proceder como antes a buscar el número telefónico hasta que lo encuentres.
¿Qué ocurrió aquí? Un fallo del cache, pues lo que encontrabas no estaba en tu cuaderno, lo que hizo que ahora el proceso de buscar el número telefónico durara mas tiempo que si no tuvieras un cuaderno/cache, ya que perdiste tiempo buscando en el cuaderno antes de buscar en la guía.
  Eso mismo ocurre en un cache de disco duro, CPU, o cualquier otro proceso que utilice caches, y es sumamente importante tomar ese problema en cuenta cuando se diseñan sistemas, ya que si tu no tienes un buen algoritmo para saber qué poner en el cache, es posible que al final el cache te afecte negativamente y termines con un sistema mas lento que antes.
   En el caso de la guía telefónica, el algoritmo es incluir en el cuaderno los números mas frecuentemente utilizados, lo que es bastante simple, pero en otros casos (como en un CPU en donde no sabes siempre cuales instrucciones tu PC va a ejecutar), el trabajo es muchísimo mas difícil.
   Es por eso que el diseñador del sistema debe poner en la balanza una fórmula en donde el tiempo perdido con la cantidad de cache missses sea menor que el tiempo ganado con caches hechos correctamente, y déjenme decirles que existen literalmente miles y miles de artículos científicos publicados sobre todas las posibles estrategias de abordar este problema.
   Otro punto a tener en cuenta es que en un sistema en donde casi en el 100% de los casos los datos son aleatorios, que entonces es recomendable no utilizar un cache, ya que la mayoría de las veces el cache haría un cache miss y terminarías con un sistema mas lento, mas complejo, y mas caro.
   La otra cara de la moneda es decir que mientras mas estructurados y predecibles sean los datos, mas se benefician estos de un cache. Y obviamente existen casos intermedios, en donde hay que saber elegir cuidadosamente la cantidad de cache, pues si eliges mucho te arriesgas a tener muchos cache misses con datos aleatorios, y si eliges poco también te arriesgas a tener muchos cache misses con datos predecibles.
Así que ahí lo tienen. Asombrosamente este concepto a veces es explicado en todo un capítulo en cursos de ingeniería en computación, pero como vieron, si hacen una analogía a la vida diaria, notarán que en realidad es algo bastante simple...


Fuente: http://www.eliax.com/index.cfm?post_id=6921

No hay comentarios:

Publicar un comentario