El Tuesday 13 May 2008, Mauricio José Adonis Carrasco escribió:
El mar, 13-05-2008 a las 11:52 +0200, Rafa Grimán escribió:
Hola :)
El Tuesday 13 May 2008, Mauricio José Adonis Carrasco escribió:
Hola amigos, ÿconoce alguien alguna utilidad para liberar memoria fÃÂsica del computador? He andado viendo por google pero nada aún...
Si no recuerdo mal, tienes el comando:
bcfree
viene en el paquete numa-tools o algo asÃ. Libera las cachés y buffers.
En todo caso, como te han dicho en posts anteriores, no es necesario. Esta herramienta es útil, por ejemplo, al hacer benchmarks (al borrar la caché y los buffers, no te falsea los datos).
Rafa
Correcto, se entiende el sentido que podrÃa tener liberar memoria cacheada. A esta alturas ya no creo que se trate de algo como para preocuparse... sólo me queda la curiosidad entender mejor cómo maneja el kernel la memoria.
Básicamente, el kernel cachea en memoria todo lo que puede (generalmente son libs compartidas). ¿Por qué hace esto? Muy sencillo, lo hace porque los discos duros son un cuello de botella atroz (es la parte de la informática que menos ha avanzado en toda la historia de la informática). Si tienes las libs en memoria, cuando arranques una aplicación que utiliza esa lib, cargará más deprisa ya que esa lib ya está en memoria. Los buffers son memorias intermedias en las que se almacenan datos que vienen de un dispositivo y van a otro dispositivo. Por ejemplo, cuando te descargas algo de Inet, los datos no van directamente de la tarjeta de red al disco duro* sino que pasan primero a un buffer, cuando se llena el buffer ... se copian los datos a disco. Esto se hace porque: - (por norma general) todos los datos que circulan por un ordenador TIENEN que pasar por CPU y RAM (a menos que se use (R)DMA) - cada dispositivo funciona de una manera aka lee y escribe una cantidad de datos determinada - cada aplicación lee y escribe una determinada cantidad de datos - cada sistema de ficheros lee y escribe una determinada cantidad de datos La mala noticia es que ese tamaño de datos de cada dispositivo, aplicación, sistema de ficheros, ... es distinto, por eso el rendimiento de un sistema informático es malo. ¿Se puede llegar a estandarizar? No poruqe por ejemplo una BBDD generalmente tendrá muchos IOPS pequeños mientras que una aplicación multimedia tendrá menos IOPS, pero escribe/lee datos en bloques muy grandes. Es decir, hace falta un almacén temporal de datos. Básicamente, un ordenador funciona como UPS o FedEx o DHL o SEUR o cualquiera de esas compañías: llega un paquete, lo almacenan temporalmente en un hangar y cuando tienen XXX número de paquetes que van a al mismo destino ... los envían. El hangar sería el buffer. Como ves, realmente no es malo que se consuma toda la RAM. Sí es malo que una aplicación tenga "memory leaks", es decir, que no gestione bien el uso que hace de la memoria. Para eso tenemos debuggers y profilers y ... los ojos para revisar el código fuente ;) En /proc hay parámetros que puedes cambiar para que el kernel deje más o menos memoria libre. Si mal no recuerdo, creo que hay un 10% (si alguien tiene el número exacto que lo digo 0:) del kernel que NUNCA se usa, es una medida de emergencia por si el sistema está muy cargado. Tienes ese 10% para (por ejemplo) poder entrar como root y ponerte a matar procesos. De todas maneras, la mejor solución al consumo de RAM es ... comprar más RAM ;) Otra opción es echar mano de profilers y debuggers y aportar parches al kernel, a las aplicaciones que consumen mucha RAM, a gcc, ... HTH Rafa * Existe lo que se llama RDMA que te permite acceder directamente sin pasar por buffers, pero por ahora se usa en InfiniBand aunque ya han salido algunas posibilidades de montarlo con 10 GigE. -- "We cannot treat computers as Humans. Computers need love." rgriman@skype.com --------------------------------------------------------------------- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org