Mailinglist Archive: opensuse-es (1053 mails)

< Previous Next >
Re: [opensuse-es] Liberar memoria
  • From: Rafa Grimán <rafagriman@xxxxxxxxx>
  • Date: Wed, 14 May 2008 12:56:52 +0200
  • Message-id: <200805141256.52827.rafagriman@xxxxxxxxx>
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@xxxxxxxxx
---------------------------------------------------------------------
Para dar de baja la suscripción, mande un mensaje a:
opensuse-es+unsubscribe@xxxxxxxxxxxx
Para obtener el resto de direcciones-comando, mande
un mensaje a:
opensuse-es+help@xxxxxxxxxxxx

< Previous Next >