miércoles, junio 27, 2007

Mejorar un poco la velocidad de Ubuntu

Antes de nada voy ha hacer un poco de culturilla que siempre viene bien para hablar con propiedad y saber el porqué de las cosas.

Para qué sirve la RAM y ésa área de disco duro destinada a la swap (en sistema linux) o el archivo de intercambio (en sistemas windows) ?


Imaginemos un programa que lo que tiene que hacer es sumar dos números enteros:

int x,y,z;

x = 10;
y = 20;
z = x+y;

Como podemos observar, tenemos tres variables, se llaman variables porque su valor puede variar durante la ejecución de dicho programa.

En el ejemplo vemos que al principio no tienen valor pero luego le asignamos un valor determinado y podemos realizar operaciones. Ésto es lo que hacen los programas, cargar sobre variables valores y hacer operaciones con ellas. Contra más variables necesite el programa, más memoria necesitará.

El valor de la variable, el ordenador lo guarda en memoria, y dicha memoria se encuentra en dispositivos físicos dedicados a tal tarea.

Tenemos muchos tipos de memoria, muy rápidas y muy caras, y más lentas pero baratas.

El disco duro es un tipo de memoria permanente lenta y barata, luego tenemos el tipo de memoria RAM (Random Access Memory) que es mucho más rapida que la del disco duro, no es permanente y es más cara. Y por último tenemos las memorias tipo caché (con diversos niveles) y éstas se encuentran justo al lado de la CPU, con lo que son mucho más rápidas que la RAM, tampoco son permanentes y por supuesto mucho más caras (si es permanente significa que cuando apagues el pc, esos datos sobrevivirán, si no es permanente, cuando el dispositivo se quede sin energía, los datos desaparecerán).

He de puntualizar que existen los tipos de memoria flash, pero actualmente (aunque se han realizado experimentos) no se usan en los pc's, excepto para substituir y/o complementar al disco duro.

Así que lo que nos interesaría es meter nuestras variables x, y, z en memoria caché. Bien, ésta solución es posible pero tenemos un límite, el límite lo marca el tamaño de ésta memoria caché. Así pues que cuando la memoria caché se acaba, usaremos la RAM y cuando la RAM se acaba, usaremos el disco duro.

Y ahí es en donde entra la optimización que os propongo para Ubuntu.

Hay un parámetro que indica al sistema operativo que cuando se alcance un tanto por ciento, empieze a pasar variables de la RAM a disco duro para dejar espacio para nuevas variables.

Esto es muy importante ya que interesa que un programa quepa enterito en memoria. Por ejemplo si tenemos un programa que ocupa 100 Megabytes, nos interesará tener esos 100 MB libres en RAM, de ahí el motivo de pasar valores de RAM a disco duro para dejar espacio para que ese posibe programa se pueda cargar en memoria.

Así pues, si normalmente usamos programas que ocupan MUCHO espacio en memoria, nos interesará que enseguida se pasen variables de RAM a disco duro. Pero si por el contrario normalmente usamos programas que ocupan algo razonable, nos interesará justo lo contrario, que el máximo número de variables se encuentren en RAM y no en el disco duro.

También es importante saber de cuanta memoria RAM disponemos ya que sobre esa cantidad se calculará el tanto por ciento.

Por defecto, linux pone un 60%, que significa que cuando quede sólo un 60% de espacio libre en RAM empeziece a pasar valores a disco duro (éste proceso se llama swaping), así que en mi caso que tengo 512MB, estará dejando siempre 307.2MB de memoria por si viene un proceso que ocupe eso, que en mi caso es imposible. Así que mi pc estará usando el disco duro más de lo necesario haciendo que todo vaya más lento.

Qué valor me interesa poner ? Bien pues voy a calcularlo: Abro todo lo que normalmente abro y tantas páginas en el firefox como normalmente tengo abiertas. Me voy a Sistema -> Administrador -> Monitor del sistema -> procesos -> columna Memoria. Veo que el que consume más memoria es firefox-bin con 81.5MB, pongamos 100MB, que es un 20% de 500MB. Así pues mi valor es 20%, aunque puedes ir jugando con diversos valores y comprobar el rendimiento del sistema. En principio cuanta más RAM use y menos disco duro mejor.

Vamos a modificarlo en el sistema:

sudo gedit /etc/sysctl.conf


Y en la última linea ponemos:

vm.swappiness=20


Guardamos y listo.

Basado en: ubuntu-es

Además, podemos mejorar (si es que no es suficientemente buena ya) la velocidad de los efectos 3d de linux (a través de beryl-manager o compizConfig Settings Manager) la calidad de las texturas escogiendo la opción de FAST.

No hay comentarios: