[pyar] Caches - Uso y desperdicio de RAM vs. CPU

Marcos Dione mdione en grulic.org.ar
Lun Mar 23 16:33:35 ART 2015


On Mon, Mar 23, 2015 at 10:50:48AM -0300, Andres Riancho wrote:
>     Supongamos que tengo un LRU cache en el cual almaceno en memoria
> resultados de operaciones que llevan mucho esfuerzo de CPU en
> calcular. Entonces lo que obtengo es una reducción de uso de CPU en mi
> software a costa de un uso incrementado de memoria.
> 
>     En todos los casos que vi estos caches tienen un maximo numero de
> elementos a recordar, removiendo en base a algun algoritmo uno de los
> elementos cuando se quiere guardar el proximo. 

    Bueno, si decís LRU, hablamos del Least Recently Used.

>         - Tiene sentido controlar el tamaño del cache en base a los
> recursos disponibles en el sistema? Como medirían los mismos? Medirían
> % RAM libre? Quizás con el modulo psutil?

    Si va a ser una cache genérica que podŕas usar en otros casos,
entonces configurable (archivo de conf). Sino, depende de la aplicación
específica que estás haciendo.

>         - Reducir el tamaño del cache puede prevenir el uso de swap,
> lo que sería beneficioso en casos donde el software se ejecuta en
> entornos con recursos reducidos, correcto?

    Si te referís a dinámicamente, eso implica que vas a tener que
cambiar en runtime los tamaños de las estructuras que la mantienen. Eso
puede llegar a ser contraproducente si estás mucho tiempo reaccionando a
cambios en el uso de la memoria por parte del resto del sistema. Además,
(c?)Python no (nunca?) libera la memoria ya alocada, la retiene como un
pool de memoria libre. Eso te forzaría a escribir la caché en C, donde sí
podrías manejar eso.

>         - Incrementar el tamaño del cache cuando existen recursos
> disponibles hara que el software utilice más memoria. Un usuario que
> monitoree el proceso podría facilmente creer que tiene un memory leak,
> o que es muy "agresivo" en cuanto al uso de RAM. Quizás en este caso
> deberia haber documentación/configuración por parte del usuario del
> máximo hasta donde puede crecer?

    Mirá, hay una DB[1] que planteó un tema parecido así: si vas a estar
haciendo caché LRU o similar y además querés que reaccione con los
cambios de uso de memoria, entonces usá la caché de disco del kernel. El
punto sería de alguna forma tirar lo que computaste a un archivo y ya.
Hasta podrías usar LMDB para eso, tiene una serie de propiedades piolas;
aunque seguramente es más de lo que necesitás.

--
[1] https://symas.com/getting-down-and-dirty-with-lmdb-qa-with-symas-corporations-howard-chu-about-symass-lightning-memory-mapped-database/
-- 
(Not so) Random fortune:
Which programming language you learn and use doesn't matter. Do not get
sucked into the religion surrounding programming languages as that will
only blind you to their true purpose of being your tool for doing
interesting things.
	    -- Zed Shaw, "Learn Python the hard way"


More information about the pyar mailing list