jueves, 15 de enero de 2009

HAL el memorioso

De la anterior entrada quedó por responder una pregunta: "¿qué tal estás de memoria, HAL?". Conviene saber la respuesta, no vaya a ser que estemos dialogando con un amnésico y todavía no nos hallamos enterado.

Si con df ( disk free ) consultábamos la cantidad de espacio libre en el disco duro, podríamos pensar que mf ( memory free ) sería la pregunta correcta en el caso actual. No es así, y tendremos que acostumbrarnos a que en la lengua de HAL, como en la nuestra, el léxico, aun manifestando ciertas regularidades, no es deducible sin más. Al fin y al cabo, el vocabulario de HAL está diseñado por muchas personas, distantes entre sí no sólo en el espacio, sino también en el tiempo. La sintaxis se mantiene uniforme en la práctica totalidad de los casos y se puede asimilar en pocos minutos. El léxico, sin embargo, se debe aprender como el de cualquier otra lengua.

Pues bien, la pregunta que HAL entiende como consulta sobre la cantidad de memoria disponible es, simplemente, free (libre, en castellano).

Vamos a hacérsela, a ver que nos dice:

free

Lo que me devuelve es una tabla algo liosa en apariencia:


total used free shared buffers cached
Mem: 2063640 784416 1279224 0 22724 245748
-/+ buffers/cache: 515944 1547696
Swap: 2096472 0 2096472


Consideremos esta tabla someramente.

La información que nos proporciona HAL está distribuida en tres filas. La dos primeras se refieren a la memoria física propiamente dicha. La última alude a una zona del disco duro, llamada espacio de intercambio ( swap, en inglés ), que suele reservarse para que funcione en conjunción con la memoria física, de forma que pueda complementarla cuando es necesario, habitualmente cuando la memoria física está prácticamente llena.

En cuanto a las columnas, baste señalar lo siguiente. De las tres últimas, la primera, empezando por la izquierda, no tiene ningún significado reseñable; las otras dos, (buffers y cached memory), se refieren a zonas de memoria que usa HAL a nivel interno para mejorar el rendimiento de las aplicaciones. Las tres columnas iniciales son lo que interesa principalmente conocer, nos proporcionan información sobre la cantidad total de memoria existente (con la excepción de la ocupada por el propio cerebro del sistema), la cantidad usada en el momento en que se ejecutó la orden y la cantidad libre en ese momento.

Retengamos esta descripción de la tabla para más adelante. Porque lo primero es lo primero, y lo primero es volver a pedirle a HAL que nos proporcione números algo más digeribles para nuestro intelecto anumérico.

Sabemos, por el artículo anterior, que esto, a buen seguro, se puede hacer a través de una opción. Pero, esta vez, en lugar de tratar de aventurar o revelar sin más la opción que nos interesa, vamos a pedirle a HAL que él mismo nos diga de qué opciones dispone esta orden, o, dicho de otra manera, qué matizaciones podemos hacer a la consulta genérica sobre la cantidad de memoria libre.

¿Podrá HAL ayudarnos en esto? Por supuesto que sí, para eso está, para socorrernos siempre. Curiosamente podremos matizar una buena parte de nuestras preguntas con un "socorro" ( con un --help ). Así, en el caso que nos ocupa, podemos dirigirnos a HAL de esta manera:

quiero preguntarte qué tal estás de memoria HAL. Pero, ¡socorro!, ¿puedo a hacerte esta pregunta con mayor precisión?

O, expresado a lo HAL:

free --help

Que da como resultado:


free: invalid option -- -
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g show output in bytes, KB, MB, or GB
-l show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-V display version information and exit


Bien, en este caso no reconoce el --help (de ahí, lo de "opción inválida" en la primera línea), cosa que puede suceder con algunas órdenes. Pero también puede suceder lo que nos acaba de suceder ahora, que, a pesar de todo, y precisamente por haber introducido una opción inválida, nos dé por defecto una ayuda rápida sobre las opciones existentes, para que no volvamos a cometer el error de introducir una que no existe.

¿Y si no sucede ninguna de las dos cosas? ¿Será HAL tan incompasivo como para dejarnos en la estacada? El próximo día veremos formas de solicitar ayuda a HAL que no fallan. Por lo pronto, recomiendo al lector que añada el grito "¡socorro!" a las órdenes vistas hasta ahora. Así podrá salir de dudas sobre si la dureza de corazón de HAL es o no una sospecha infundada.

De momento, esta vez nos hemos salido con la nuestra, que es de lo que se trataba. Ahí tenemos todas las opciones disponibles para la orden free.

Las que nos interesan ahora, en tanto humanos anuméricos, son las relacionadas con la forma de expresar las cantidades solicitadas. Entre ellas hay una (en la primera serie de opciones posibles) que nos asegura una versión más inteligible de aquellas cifras, la que las convierte en Megabytes. Así pues, volvamos a preguntar a HAL sobre su memoria, pero esta vez con el matiz oportuno:

free -m

Y la tabla que resulta es la siguiente:


total used free shared buffers cached
Mem: 2015 813 1201 0 33 251
-/+ buffers/cache: 528 1486
Swap: 2047 0 2047


Ahora es más fácil leer la tabla y podemos retomar la descripción que hicimos hace un momento de ella.

La memoria física total es de 2015MB, de los cuales 813MB están siendo usados y 1201MB permanecen libres. Esto es lo que nos dicen las tres primeras columnas de la primera línea.

Si vamos a la segunda línea, las cantidades de memoria usada y libre que aparecen (528MB y 1486MB, respectivamente) son diferentes a las cantidades correspondientes de la primera línea. Probemos a hacer cuentas entre todos los números de la primera y segunda líneas, quizá encontremos una pista sobre esta discrepancia. Si sumamos las cantidades de la primera fila relativas a buffers y cached memory, o sea, las cantidades 33 y 251, obtenemos 284. Si, ahora, restamos, la cantidad obtenida, 284, de 813, que es la cantidad que la primera línea define como memoria usada, obtenemos 529, o sea, prácticamente la misma cantidad que aparece como memoria usada en la segunda línea. Si, a su vez, sumamos los 284 a 1201, que es la cantidad que aparece como memoria libre en la primera línea, obtenemos 1485, o sea, prácticamente la misma cantidad que aparece como memoria libre en la segunda línea. Hay, pues, una relación. La razón de esta relación es la siguiente. HAL utiliza, como hemos dicho, zonas de la memoria principal (llamadas buffers y cached memory) para mejorar el rendimiento de las aplicaciones. Ahora bien, estas zonas están permanentemente a disposición de las aplicaciones que lo requieran. Lo que implica que, desde el punto de vista de las aplicaciones, la cantidad de memoria usada en tales zonas les pertenece y haya que restarla y sumarla, respectivamente, de la memoria usada y libre que se muestra en primera instancia. En definitiva, la segunda línea define el uso de memoria desde la perspectiva de las aplicaciones. (Si esta línea nos despista o no nos interesa ---normalmente no debería ser así---, siempre podemos recurrir a la opción -o de free, que la hará desaparecer de nuestra vista, tal como explica la ayuda sobre las opciones de free presentada antes).

Finalmente, la tercera línea indica que no se está haciendo ningún uso del espacio de intercambio, o sea, que tenemos suficiente memoria física y no hay necesidad de echar mano del disco duro para aumentarla.

En definitiva, el estado de salud de la memoria en el momento actual es notablemente bueno. Podemos seguir conversando bien tranquilos con HAL, que seguirá respondiendo tan rápidamente como hasta ahora. No hay amnesia a la vista.

Y, para que tampoco nosotros seamos víctimas de la fatídica amnesia, el obligado resumen.

  • HAL nos puede proporcionar una ayuda básica sobre las opciones o matices posibles que podemos añadir a una orden. O bien, porque lo hace por defecto cuando introducimos una opción inválida, o bien, solicitándoselo explícitamente por medio de una opción existente con ese propósito.

  • La orden free nos devuelve un informe del uso actual de la memoria, tanto de la memoria física ---en general y desde la perspectiva de las aplicaciones--- como del espacio de intercambio.

2 comentarios:

  1. Hola Luis. (o atopo (¿?).
    apenas hace unas semanas conocí, este tu blog. Estoy haciendo un curso con Andres Beny, desconozco si sabes de él, pero el caso es que un compañero del mismo nos remitió hasta tu nido de Hogaño. y el caso es que desde entonces te leo y estoy encantado de hacerlo.A pesar de haber empezado desde el principio (como debe ser) y conocer mucho de los conceptos iniciales (curso actualmente un nivel 3, en linux.org.ar)que nos explicas, estoy aprendiendo desde la óptica que aplicas, y nunca antes me gusto tanto y aprendí tan detalladamente tantos matices. Por esto te doy las gracias por tu esfuerzo y te animo a no cesar. No quisiera pensar en no encontrar tu blog cualquier día, y no puedo evitar nunca pensar lo peor, así que mantente en linea per seculum seculorum.:) Te conoci con bastante retraso, pero pronto estare al dia. sin prisa pero sin pausa. un cordial saludo. edw

    ResponderEliminar
  2. Gracias, pypoty, por el interés y los ánimos.

    Me sonaba lo de los cursos de linux que comentas, una iniciativa estupenda (con el magnífico moodle como plataforma de trabajo).

    En cuanto a mi blog, su persistencia en el tiempo y esas cosas, poco puedo añadir a lo que ya he comentado en las últimas entradas de esta serie de conversaciones. Pero ya no añado más, porque no dejo de incumplir mis propios plazos ;-)

    Sea como fuere, de momento no tengo intención de abandonarlo por completo, aunque sé que ahora ando por tres entradas al mes ---o cada dos meses--- como máximo, muchas menos de las que me gustaría escribir.

    ResponderEliminar