OpenCharla: Podcast del Grupo de Usuarios de GNU/Linux de Tijuana

OpenCharla

El Gultij tiene podcast! Después de varios meses de pláticas y pruebas, ya tenemos los primeros episodios de OpenCharla.

OpenCharla se distribuye en formato Ogg por ser un formato libre de patentes y regalías. No necesitas descargar nada para oirlo, pues en la página del podcast disponemos de un reproductor web basado en Flash para oírlo en línea.

Sólo en caso de que quieras descargar el archivo será necesario que utilices un programa que lea archivos Ogg. Dicen que si instalas el filtro de DirectShow para Ogg lo vas a poder tocar en Windows con Media Player. En Linux seguramente ya lo soporta cualquier programa.

Bienvenidos los comentarios. Ah, aún no tenemos el RSS, pero pronto!

La falacia de que «la RAM está para ser usada»

Parece que se ha vuelto popularizado un error de concepto en algunos foros de usuarios. Tal vez recuerdes esta frase:

La RAM está para ser usada.

Esta frase es cierta dentro de un contexto en particular. Se usa para permitir que el sistema operativo acelere disco a RAM tanto como sea posible, pues la RAM es significativamente más rápida que los discos duros.

Sin embargo, dentro del contexto de una aplicación de usuario, en realidad es una falacia. Algunos usuarios (e incluso algunos desarrolladores) no saben mucho sobre el funcionamiento interno de su computadora y usan esta frase fuera de su contexto correcto. Lo peor es que algunas veces ni siquiera les importa el consumo de la RAM. No les importan los derrames de memoria o piensan que si ocurren sólo una vez, no pasa nada. O piensan que los lenguajes y plataformas con recolección de basura (garbage collectors) se encargarán mágicamente de todo. Sin darse cuenta, acaban usando la frase en cuestión como un equivalente de:

La RAM está para ser desperdiciada.

Hay algunas cuestiones que en realidad alimentan este modo de pensar, llevándolos a concluir que una aplicación realmente debería poner tanta información como sea posible en la RAM y que, tarde o temprano, el sistema operativo lo manejará eficientemente. Más aún, que no hacerlo es un sacrificio de rendimiento.

Consideremos lo siguiente (sobresimplificaré para efectos de facilidad de explicación, pero el modelo es bueno). Por una parte:

  • Cuando una aplicación solicita RAM y el sistema operativo la asigna, esa memoria queda reservada para el uso exclusivo de la aplicación hasta que ésta la libera. Una aplicación no puede saber (y no debería) si otra requiere o solicita RAM.
  • Si la RAM física se llena y hay espacio de paginación (swap o paging) disponible en el sistema, el OS descargará algunas de las páginas menos usadas de la RAM hacia el espacio de paginación, sea una partición o un archivo. Cuando la RAM paginada se necesita nuevamente, se intercambia con otras páginas de RAM de las menos usadas. Ambas operaciones requieren de actividad en el disco duro. Eso es lo que hace a la paginación inherentemente lenta.
  • El sistema operativo siempre dejará libre algo (digamos, 50 MB) de RAM física sin usar para que haya disponible cuando necesite reaccionar a una emergencia de inestabilidad de sistema.

Por otra parte:

  • El sistema operativo usa memoria física para acelerar lecturas y escrituras a disco por medio de caché, de modo que cuando un sector de disco es leído múltiples veces, las subsecuentes se obtienen de la RAM, que es mucho más rápida.
  • El OS sólo acelerará lecturas/escrituras a disco hacia RAM física, pues sería inútil «acelerar» de disco a disco.
  • Cuando una aplicación solicita RAM, el OS liberará RAM usada para caché antes de asignarla al a aplicación solicitante. Esta operación no requiere actividad de disco si se están liberando lecturas aceleradas o escrituras ya fijadas; sin embargo, sí requiere de escribir en disco si necesita fijar escrituras aceleradas pendientes. Usualmente, el sistema operativo realiza esta fijación cuando la PC está en ocio, de modo que uno no lo nota y, cuando llega el momento, ya no hay escrituras pendientes por fijar.

Por último:

  • Linux reporta el «tamaño residente en RAM» para un proceso como «consumo de RAM física». Si uno quiere medir el consumo de RAM por una aplicación, se debe hacer con la swap desactivada. Por favor indíquenme cómo Windows reporta la RAM consumida por un proceso.
  • Las escrituras a disco suelen ser más lentas que las lecturas.

La realidad sobre esta falacia es «cierto, el sistema operativo se encargará de eso, pero se muere el caché de disco y se provoca la paginación, alentando todo el sistema, incluyendo la propia aplicación«. Entonces: sí, el sistema se encarga, pero en realidad está recuperándose del error del programador a costa de una degradación global e innecesaria de sistema y la potencial inestabilida que conlleva.

Analicemos dos escenarios tomados de mi propia experiencia. Repito: estoy sobresimplificando. Úsese esto como modelo.

Caso 1: Un navegador acelera la red a disco en lugar de a RAM

Tienes un sistema con 2 GB de RAM, de los cuales tienes 1 GB libres (como en «tal vez usados por el caché de disco pero ciertamente disponible para las aplicaciones»). Tú ejecutas un navegador que acelera los recursos de red a disco porque es más rápido que el Internet (pues es más rápido que el Internet) y usa unos 300 MB de RAM.

1000 – 300 – 50 = 650

Acabas con unos 650 MB de RAM para aceleración de disco por memoria caché y 50 MB de RAM física real.

Cuando un navegador necesita un recurso de red, intenta cargarlo de disco (pues lo está acelerando). Sin embargo, el disco queda acelerado en la RAM por el sistema operativo y las lecturas subsecuentes se realizan en RAM. La penalidad en rendimiento apenas se nota.

Si el navegador quiere acelerar una página visitada por primera vez, la guardará en disco. El SO acelerará la lectura a RAM y la pospondrá hasta que el sistema esté en ocio (cuando estás leyendo el contenido del sitio). La penalidad en rendimiento apenas se nota.

Cuando cualquier otro proceso lee de disco, la probabilidad de pegarle al caché es alta porque hay 650 MB de RAM disponibles par esto. Incluso si se le falla al caché, lo que se lee de disco se acelera en RAM para los accesos subsecuentes. reading.

Entonces, ejecutas una máquina virtual que requiere de 450 MB de RAM. Ocurre lo siguiente:

  • El sistema operativo libera 450 MB de caché de disco. Parte de este requiere de escrituras, parte no. Esta operación es sólo tan lenta como la cantidad de escrituras requeridas para fijar las escrituras aceleradas, así que no es tan lento. Además, el usuario en cierto modo lo espera porque le pidió a la PC cargar la VM.
  • No hay paginación. No es necesario.
  • Finalmente se asignan los 450 MB a la VM.
  • La VM escribe a ese espacio físico de RAM asignado.

Aún quedan 200 MB disponibles para caché de disco, que el SO procurará usar eficientemente.

Ahora, el navegador quiere cargar algo de su «cache de disco». Hay una probabilidad, claro que mayor que 0, de pegarle al caché y que el SO sirva el dato directamente desde la RAM. Supongamos que no, que fue leída desde disco. El navegador aún está acelerando la navegación pues el disco local es más rápido que el Internet. Más aún, el SO acelerará este objeto en la RAM para sus accesos subsecuentes.

Claro: la VM continúa corriendo desde la RAM sin necesitar de ningún tipo de paginación (o hiperpaginación). El sistema responde perfectamente. El usuario sabe (o debería saber) que si quiere liberar memoria, debe cerrar la VM o el navegador.

Caso 2: Un navegador usa más RAM que la que requiere, para su aceleración

Tienes un sistema con 2 GB de RAM, de los cuales tienes 1 GB libres (como en «tal vez usados por el caché de disco pero ciertamente disponible para las aplicaciones»). Tú ejecutas un navegador que acelera los recursos de red a disco porque es más rápido que el Internet (pues es más rápido que el Internet) y usa unos 600 MB de RAM.

1000 – 600 – 50 = 350

Acabas con unos 350 MB de RAM para aceleración de disco y 50 MB de RAM física real.

Cuando el navegador necesita un recurso de red, trata de cargarlo desde su asignación de RAM, así que es muy rápido (aún así, tiene que leerlo primero de disco si no estaba previamente disponible en RAM).

Cuando cualquier otra aplicación lee de disco hay una baja probabilidad de pegarle al caché. En cualquier caso, la probabilidad general de que otra aplicación le pegue al caché es más baja, pues la memoria está exclusivamente asingada para el navegador. Esto incrementa significativamente la probabilidad de acceder a disco, lo que puede llevar a una alentar todo el sistema.

Minimizar el navegador no libera memoria para otras aplicaciones. la memoria aún está asignada para su uso exclusivo para éste.

Entonces, ejecutas una máquina virtual que requiere de 450 MB de RAM. Ocurre lo siguiente:

  • El sistema operativo libera 350 MB de caché de disco. Parte de este requiere de escrituras, parte no. Esta operación es sólo tan lenta como la cantidad de escrituras requeridas para fijar las escrituras aceleradas, así que no es tan lento.
  • Determina los 100 MB menos usados de RAM y las mueve al espacio de paginación. Esta operación es lenta pues implica varias escrituras inevitables a disco.
  • Finalmente se asignan los 450 MB a la VM
  • La VM escribe a ese espacio físico de RAM asignado.

El sistema ya no tiene caché de disco. Cuando otra aplicación necesita leer de disco, no le pegarán al inexistente caché y el SO tendrá que acceder físicamente al disco para servir esta petición. Esto es lento. Lo peor es que el acceso a disco no será acelerado para sus subsecuentes lecturas.

Ahora, el navegador quiere cargar algo desde su propia «caché de memoria» (que, por cierto, tal vez está paginada a disco). Puede pasar una de dos:

Si el recurso a extraer del caché de RAM de la aplicación está paginado en disco, el SO necesitará leerlo de vuelta. Puesto que los datos leídos ahora serán memoria «más reciente usada», el SO podría intercambiarlos de disco contra algo de la RAM de la VM o de otra aplicación menos usada. Esta operación es lenta pues implica varias escrituras inevitables a disco. O:

Si el recurso aún está en la propia «caché de memoria» de la aplicación, será extraída como de rayo de la RAM. Sin embargo, la VM aún necesita su propia RAM para continuar al igual que las demás aplicaciones. Esto fuerza al sistema operativo a usar paginación nuevamente. Además, no hay RAM disponible para caché de disco y otras solicitudes de disco estarán continuamente siendo servidas desde disco sin la posibilidad de acelerar las subsecuentes hacia RAM. Esto genera una actividad constante a disco, alentando todo el sistema incluyendo al navegador. El «caché de memoria» de la aplicación no sirvió para nada.

Claro que la máquina virtual continúa corriendo y su RAM se necesita constantemente, así que la escritura a disco por paginación se vuelve una constante. El sistema operativo se alenta por lo que se llama hiperpaginación. En casos extremos, el sistema deja de responder, impidiendo al usuario de siquiera cerrar una de las dos aplicaciones para recuperarlo.

Conclusiones

Sí, la RAM está ahí para ser usada cuando se necesita, no para desperdiciarse. La RAM es un recurso limitado. Hay maneras de usar la RAM eficientemente. Por ejemplo, cargar los índices de un buzón de correo en RAM (sin cargar el contenido completo del buzón) puede, si se hace correctamente, acelerar significativamente la búsqueda de mensajes.

Sin embargo, acelerar disco a RAM puede que no sea una buena idea. La aceleración ya se hace por el SO, así que sólo se desperdicia una función eficiente del sistema operativo. A veces puede ser una buena idea, pero lo más probable, especialmente en aplicaciones de escritorio, es que no.

The «RAM is there to be used» fallacy

There seems to be a common misconception around some user forums. Maybe you recall this phrase:

RAM is there to be used.

This phrase is true within a particular context. It is used to let the operating system cache as much disk as possible into RAM, as RAM is significantly faster than hard disks.

However, within the context of a user-space application it is actually a fallacy. Some users (and even some developers) don’t know much about the inner workings of their computers, and use this phrase outside of its proper context. What is worse, sometimes they don’t even care much about RAM consumption. They don’t care about memory leaks, or think that if memory leaking occurs only once, it’s fine. Or they think garbage-collected frameworks or languages will take care of everything by magic. Without knowing, they end up using the aforementioned phrase as the equivalent of:

RAM is there to be wasted.

Sigue leyendo

Gratis vs. libre: La compra de Skype por Microsoft

Gratis vs. Libre

Gratis vs. Libre

Cuando no se requiere de pago alguno para usar plenamente un programa se dice que es «gratuito». Dos ejemplos son Skype y OpenOffice.org. Sin embargo, existe una diferencia radical entre ambos: las libertades legales que la licencia de OpenOffice.org garantiza. Por eso se le llama software «libre».

OpenOffice.org es más que simplemente gratuito y más —incluso— que simplemente «de código abierto». Disponer del código fuente de un programa no implica la libertad legal de hacer públicas las mejoras.
Sigue leyendo