October 28, 2007 at 20:28 · Filed under Linux, Sistemas operativos
Hace un mes salía en barrapunto una noticia acerca del tamaño óptimo para la swap en linux, y tras dedicarle algo de tiempo las conclusiones que he sacado vienen siendo que swap hay que usar la justa :D.
Ni tiene sentido usar demasiada, ya que con las cantidades de RAM que hay hoy en día no llega a emplearse, ni se debe eliminar, ya que es necesaria para agilizar la localización de fragmentos libres para nuevos malloc()s.
Otro método que se utiliza para agilizar la reserva de memoria es eliminar comprobaciones, llegando incluso a ceder más memoria a los programas de la que realmente hay libre. Simplemente a un malloc() se responde de forma afirmativa, y es sólo a la hora de escribir por primera vez cuando se localiza el espacio de memoria reservado. Esta política es proclive a producir algún que otro problema de vez en cuando ante un Out of Memory (OOM), y esa es precisamente la ocupación del OOM killer, la de resolver estos problemas no muy frecuentes de la forma más rápida posible: eligiendo un proceso y matándolo.
Normalmente en un entorno de escritorio, a excepción de ciertas aplicaciones que consumen cantidades desorbitadas de memoria por mal funcionamiento (p.ej. firefox) o por que son así (eclipse, aplicaciones de cálculo, etc.), las necesidades de swap no son en absoluto grandes, y normalmente con la RAM que se instala actualmente en los ordenadores (medio o un giga) suele ser maś que suficiente.
No obstante, la swap no es totalmente prescindible. Los procesos dormidos (los que esperan alguna señal o evento) normalmente son enviados a swap con la finalidad de liberar memoria principal que pueda ser usada como buffer de disco. Así mismo, la swap también ayuda a encontrar rápidamente un hueco libre para las aplicaciones que soliciten un espacio de memoria (malloc()s y calloc()s) pese a la fragmentación que pueda haber.
El único caso donde se podría requerir un buen espacio de swap es en el caso de querer suspender el sistema, para lo que linux copia íntegramente el contenido de la memoria principal al swap, en cuyo caso el swap debe tener capacidad suficiente para copiar toda la RAM y además mantener lo que estuviera ya guardado en el swap. La política que sigue Windows para esto es ligeramente diferente, ya que se copia al sistema de ficheros, y no al swap.
Windows de hecho utiliza como espacio de intercambio un fichero de tamaño variable contenido sobre el sistema de ficheros raíz. Este enfoque, igualmente válido en Linux, no está muy popularizado a pesar de no haber mayor penalización de velocidad.
Contrariamente a lo que se podría pensar la conversión de dirección virtual a bloque de disco es inmediata, ya que al realizar el swapon se hace una tabla de equivalencias que cubre y agiliza todas estas conversiones sin necesidad de apoyo por parte del driver del sistema de ficheros.
La única restricción es que el fichero debe crearse en la infancia del sistema de ficheros, para evitar que esté muy fragmentado, ya que el kernel puede rechazarlo como swap.
Igualmente, el fichero es de tamaño estático, y no dinámico como suele ocurrir en Windows
Otra opción totalmente experimental consiste en utilizar parte de la memoria de al tarjeta de vídeo, en vez del disco duro, como espacio de intercambio.
April 9, 2007 at 13:06 · Filed under Gentoo, Linux, OpenBSD, Sistemas operativos, Solaris, Ubuntu, openSUSE
Desde hace casi tres años uso Gentoo GNU/Linux como distribución de escritorio. Gentoo goza de una excelente documentación y de un aún mejor sistema de paquetería en lo que a organización se refiere.
Durante todo este tiempo la pega que le achaco es que requiere tiempo.
La idea de Gentoo es construir el sistema desde cero, lo cual requiere cierto nivel de conocimientos y tiempo y paciencia disponibles, pero a cambio da la posibilidad de aprender muchísimo acerca de los internals del sistema.
Aunque en teoría uno no tiene por qué compilar absolutamente todo el sistema sino que uno se puede bajar los binarios ya precompilados, yo aún no he conseguido encontrar binarios para mi arquitectura (Prescott) por lo que me veo obligado a compilar todo paquete que quiero instalar. Compilar emacs, vi, gedit, … bueno, si lo tienes que hacer unas cuántas veces aburre, pero hay paquetes como xorg-server, gcc, gnome y sus dependencias que tranquilamente pueden tirarse más de media hora compilando, y esto en cada actualización del sistema se hace un tanto insoportable.
Si el año pasado me cargué la distribución instalando GNU/Hurd (y trabajando como root cuando no debía acabé sobreescribiendo la libc de gentoo con la libc de Bee GNU/Hurd) este año fue al actualizar portage (el gestor de paquetes de gentoo, como el apt-get o el dpkg de debian) al 2006.1 cuando la toolchain volvió a hacer chof! y desde entonces conté sin la posibilidad de poder compilar programa alguno, y por tanto de instalar nada.
Ha sido ahora en estas vacaciones, tras comprarme un disco duro nuevo, cuando me he decidido a hacer las copias de seguridad esas que siempre hay que hacer y que nunca se hacen y tras ello arramplar con todo lo que había instalado y partir de cero.
Los objetivos eran tener instalado OpenBSD, Solaris 10 (del cuál recibí los DVDs gratuitos que enviaban si los pedías) y varias distribuciones de Linux: una para trabajar habitualmente (Gentoo), otra por si todo falla (Debian) y otras por probar. Respecto a Windows: en la facultad tan sólo voy a verme obligado a usar windows durante este cuatrimestre y un mes el segundo cuatrimestre del año que viene (y para eso puedo emplear otro ordenador o un emulador), no acostumbro a jugar con el ordenador, y además es una fuente de problemas, incompatibilidades, virus y otros disgustos, así que finalmente he decidido no instalarlo. Llevo 3 años sin usar windows, y salvo cuando los colegas me piden que les arregle el ordenador que ya no me acuerdo ni dónde está el panel de control, no tengo mayor problema en apañármelas a diario sin windows.
OpenBSD desde hace ya tiempo me llamaba la atención por estar enfocado a la seguridad y tener ese sistema de desarrollo que a veces he echado en falta en Linux. Quise probarlo y tras comprar el CD de la versión 3.9 al final he conseguido instalarlo. Hay que decir que el fdisk que trae es difícil de usar, de hecho primero instalé Debian en un segundo disco duro y desde allí particioné el primer disco con el fdisk de debian, que es bien cómodo. Salvado ese escollo la instalación fue sencilla y apenás duró diez minutos, esencialmente porque no instala casi ningún programa. Una vez acabada y haciendo uso del sistema de ports (que por cierto, la base de datos de ports no la encontré en el CD) ya instalé más aplicaciones como p.ej. GNU screen. No es un sistema agradable a los sentidos, ni creo que lo pretenda, más bien es un sistema espartano, orientado a la seguridad y a cumplir ese objetivo de ser seguro, no el de ser amigable.
Solaris es software no libre, pero es un Unix bastante usado en servidores y sólo por eso merece conocerse un poquito, al menos probarlo, y ya que me enviaban una copia a casa gratuitamente… (llegaron tres DVDs: Solaris 10 x86, Solaris 10 SPARC y las Developer Tools). Parece ser que no reconoce los discos SATA (tuve un problema similar hace 2 años con FreeBSD) así que trataré de apañar un disco IDE de al menos 20 gb., ya que Solaris es caprichosín, al menos en cuanto a espacio.
Debian: probablemente la mejor distribución de Linux. El sistema de paquetería es cómodo como el de Gentoo (inspirado en los ports de BSD). Fácil de instalar, apenas da problemas. Estrictos con las licencias libres (iceweasel, apache1.3, etc.). Tiene una gran comunidad de usuarios (probablemente sea la distribución de Linux con mayor comunidad), aunque no está tan bien documentada como Gentoo. Creo que daba ciertos problemas el instalador con mis discos SATA, pero yendo sobre aviso lo arranqué sin problemas. Dado que por cuestiones de licencias en Debian no está disponible el firefox original, sino el ice-weasel, que no es capaz de leer los ficheros de contraseñas o el historial del firefox que usaba antes, he decidido instalar firefox por mi cuenta, desde la web de mozilla y prescindir del soporte de Debian en este aspecto, e ídem para thunderbird/ice-dove.
Ubuntu: Traté también de instalar Ubuntu, pero tras bajarme y quemar el CD de instalación me encuentro con que en el particionado, si / no está asignado a una partición primaria para el instalador de Ubuntu 6.10 es como si no se le hubiera asignado partición a /, y en consecuencia se queja y no me deja instalar. Esperemos que Feisty Fawn, que sale en 10 días, resuelva este despiste de programador. Pese a esto la interfaz gráfica de Ubuntu está muy cuidada (aunque Gnome 2.16 en general me ha sorprendido muy gratamente).
OpenSUSE es lo que toca en la facultad cuando toca. Si ocurre el milagro de que allí haya algo que no sea Windows instalado, entonces ese algo es OpenSUSE (a excepción de los Macs con su OS X). Antes estuvo Kubuntu (o alguna otra ubuntu) y antes aún creo que Debian. Lo que me maravillaba de OpenSUSE es la interfaz gráfica, que pese a ser KDE es muy atractiva, incluso antes de arrancar las X, en el inicio, mediante el framebuffer se obtiene una pantalla de arranque realmente elegante. Intenté instalarlo, pero a falta de los cinco CDs o el DVD que no pensaba bajármelos ni loco, me bajé el CD de instalación, e iniciándo esta me encuentro con un simpático cuadro de diálogo que me pide la dirección IP de un mirror de SUSE. Tras reiniciar en Debian y buscarle un mirror (y resolver el FQDN, no siendo que efectivamente quisiera la IP), vuelvo a arrancar la instalación y le meto la susodicha IP y a continuación la ruta dentro del servidor hacia el repositorio de SUSE. En proceso de bajarse root.gz, un fichero de 70 megas que debía contener lo esencial para ir instalando procedo a dormitar la siesta. Y volviendo media hora después pensando en que estaría esperando mis órdenes me encuentro con que se ha quedado atascado a los 20 megas. Así que ahí se quedó. Algún día que me encuentre con ánimo para bajarme el DVD de instalación por mi canuto ADSL lo haré y lo instalaré. Algún día. Mientras tanto, si esto lo lee algún programador de SUSE, que por favor, se le ocurra poner cuanto menos una lista de mirrors en el programa de instalación, y a ser posible que use el servidor de nombres que le devuelve el servidor DHCP, que no me pida la IP.
Otro fallo que le he visto a SUSE cuando hace años la usaba (versión 6.5, 7.2, etc.) es el sistema de paquetes, que no es en absoluto comparable a lo que estoy acostumbrado a ver en otras distribuciones. Es realmente muy incómodo.
Y finalmente Gentoo
Hoy es el quinto día de la instalación :D. Tras las primeras compilaciones, reajustando el USE y recompilando, y buscando errores en el Google, he conseguido mis Xorg corriendo con Beryl (que es flipante, a todo esto). He conseguido tener también un fallo con libexpat, ya que en un inicio estaba la versión 1.95.8 instalada y al actualizar el sistema ha pasado a la 2.0.0, con el consecuente fallo de que los programas enlazados a la 1.95.8 (evince, aMule, etc.) no la encontraban y cascaban. Con un revdep-rebuild (del paquete gentoolkit) parece que poco a poco todos los programas que la enlazaban van recompilándose y reenlazándose de nuevo. Mientras tanto en el proceso alguno se queja de las USE flags con los que alguna que otra dependencia ha sido compilada y toca cambiar las USE flags, recompilar la dependencia y volver a empezar el revdep-rebuild (desde el principio). Por lo menos sólo tiene que compilar 52 paquetes (entre ellos gcc y evolution), al menos el open-office no lo tiene que tocar hasta que no lo instale.
Por cierto, para gentoo usé la guía de instalación rápida. Y rápida es, lo que pasa es que es Gentoo. Y si te pones a hacer virguerías como instalar beryl y luego te pasas a ~x86 y te surgen problemillas pues ya te tiras un rato, y si además andas instalando programas de uso obligatorio (gnome y sus dependencias, el kernel, etc.) al final… lo dicho: cinco días. Pero ya casi casi está del todo.
Como colofón, pongo aquí mi /boot/grub/menu-lst, por si a alguien le sirve de ayuda, especialmente en lo que a arrancar OpenBSD 3.9 se refiere:
default 0
timeout 30
splashimage = (hd0,0)/grub/splash.xpm.gz
#Arrancar Gentoo. Kernel instalado en /dev/sda1 (/boot), el / está en /dev/sda6
title = Gentoo Linux 2.6.20-gentoo-r5 20070408
root (hd0,0)
kernel /bzImage-2.6.20-gentoo-r5.20070408 root=/dev/sda6 real_root=/dev/sda6 vmalloc=300M
#Open está en /dev/sda3, esto es (hd0,2)
title = OpenBSD 3.9
root (hd0,2)
makeactive
chainloader +1
#Debian: kernel y la initrd en /dev/sdb1, sistema (/) en /dev/sda3
title = Debian GNU/Linux 4.0 2.6.18 … 20070406
root (hd1,0)
kernel /vmlinuz-2.6.18-4-686 root=/dev/sdb3 ro bootkbd=es noapic nolapic
initrd /initrd.img-2.6.18-4-686
April 9, 2007 at 11:18 · Filed under Linux, Sistemas de ficheros
Si hace unos días comentaba acerca de los atributos de los ficheros en la implementación de OpenBSD del Unix File System (o Fast File System), ahora mismo estaba viendo su equivalente en ext2, el que fuera hasta hace un par de años sistema de ficheros por defecto de Linux, sucedido por ext3 (que es compatible hacia atrás con ext2) y que dentro de poco será sucedido por ext4 (que de momento y por lo general sí es compatible con ext3).
Los dos comandos que permiten trabajar con los atributos de un fichero son lsattr y chattr, respectivamente para mostrarlos o cambiarlos. Ambos forman parte del paquete e2fsprogs.
Los susodichos atributos son 15, a saber:
- ‘A’ evita que se modifique el campo atime (accesed time, última vez que fue accedido un fichero) del fichero cada vez que se accede a él. Puede reducir la carga de I/O del sistema.
- ‘a’ indica que el fichero sólo se puede abrir para añadir si se abre para escritura. Tan sólo root o un proceso con el flag CAP_LINUX_INMUTABLE pueden activar o desactivar esta opción.
- ‘c’ indica que el fichero se guardará comprimido. Por supuesto, la compresión será transparente al acceso al fichero. A la hora de acceder uno no tiene que preocuparse si el fichero está comprimido o no, eso es cosa del kernel. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
- ‘D’ implica actualizaciones síncronas de los directorios cada vez que son accedidos. Sólo es útil a partir de la rama 2.6.
- ‘d’ excluye al fichero de los programas seleccionados por dump para ser copiados.
- ‘E’ indica que un fichero tiene un error de compresión (los ficheros de la ‘c’). Es usado por los compresores en etapa experimental, y tan sólo puede ser visualizado mediante lsattr, no puede ser cambiado mediante chattr.
- ‘i’ impide que se modifique el fichero o que se cree un enlace hacia él, que se elimine o se renombre. Sólo root o procesos CAP_LINUX_INMUTABLE pueden cambiar este flag.
- ‘j’ hace que todos el fichero sea escrito primero en el journal de ext3 y luego en disco en caso de que el sistema de ficheros esté montado con los modos data=ordered o con data=writeback (con data=journal siempre se hace esto). Sólo root o procesos con la capability CAP_SYS_RESOURCE pueden trastear con esto. Sólo tiene sentido con ext3, no con ext2.
- ‘s’ se asegura de que al borrar un fichero, todos sus bloques son rellenados con ceros en el disco. Esta forma de borrado segura presenta varias limitaciones. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
- ‘S’ actualiza los ficheros de forma síncrona. Similar a la opción sync de mount.
- ‘T’ manda un directorio a la cima de la jerarquía de directorios. Está relacionado con el asignador de bloques de Orlov presente en la rama 2.6 del kernel desde que se portó la idea de BSD.
- ‘t’ evita el tail-merging. A excepción de una serie de parches ext3 no cuenta con soporte para tail-merging.
- ‘u’ guarda el contenido de un fichero cuando éste es borrado, permitiendo así la recuperación del fichero. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
- ‘X’, al igual que ‘E’ es usado por los compresores experimentales e indica (y sólo indica, por que no es modificable) que el fichero pese a estar comprimido puede ser accedido directamente.
- ‘Z’ es similar al anterior, salvo porque indica que el fichero comprimido está sucio.
Desde luego, la variedad de opciones que presentan estos atributos es mayor que la del UFS de OpenBSD, y no sólo mayor si no también diferente. Lástima que Linux no cuente con los Secure Levels de OpenBSD porque a nivel de seguridad (más que de usabilidad) le confieren gran potencia.