16 de noviembre de 2005

ZFS de Solaris publicado, y I/O con prioridad

Tal y como se puede leer en osnews, el nuevo sistema de archivos de Sun ha sido liberado. Y digo liberado porque se ha publicado en opensolaris y está disponible con su código.

La verdad es que el muy cabrón tiene buena pinta. Diseñado de cero para olvidarse de conceptos como particiones y similares dicen, en ZFS tienes un "pool". Vamos, un monton de espacio. Repartido entre particiones, discos, como te de la gana. Y de ese espacio, coges el espacio que quieras para crear un sistema de archivos. Añades un disco y lo metes en el "pool". Y aparentemente todos los sistemas de archivos comparten espacio del pool hasta que se agote, no hay que "darle tamaño", tienes quotas y "reservations", pero es totalmente opcional. O algo asi, manejas sistemas de archivos con la flexibilidad propia de manejar directorios. El caso es que no es como los volumenes, no tienes que preocuparte de "preasignar espacio" al sistema de archivos. Puedes crear, extender. todo sin tocar ni un solo archivo de configuracion (en solaris el punto de montaje se guarda en el sistema de archivos y te libras del fstab, en linux ext3 tambien soporta guardar esa información pero nadie lo utiliza como medio para quitarse el fstab de en medio). Dicen que tareas de 40 minutos se reducen a 10 segundos y me lo creo. Esto está claramente orientad a la compra de esa compañia de almacenamiento por la que sun pagó recientemente unos miles de millones de dolares. Sun se mete al mercado de "storage" de lleno.

Es un sistema de archivos "copy-on-write". Eso quiere decir que cuando escribes a un archivo, no se reescribe sobre el mismo archivo (dando oportunidad a que haya corrupcion) sino que se escriben los datos en un sitio vacio del sistema de archivos. Una vez copiados esos datos, se cambia de manera atómica la estructura a la que apuntan los datos. De esta manera, el journaling se hace casi innecesario (o innecesario?) y se impide que el disco pueda estar nunca en estado inconsistente, que lo hace mas veloz. O asi creo que es la historia esta. De hecho, es que ZFS no tiene fsck. No lo necesita.

Snapshots infinitos, sin limite de archivos o de directorios..etc etc. Ahora bien, una cosa es ue sea un buen sistema de archivos, y otra cosa es tragarse todo el marketing elitista de Sun. Ejemplo: En este blog habla de un benchmark que hacía a la máquina arrastrarse con UFS y que con ZFS iba a las mil maravillas. Y al final la conclusión del tipo es que las peticiones de I/O de ZFS tienen "deadline" y prioridad. Pues vaya con Solaris, digo yo. ¿Resulta que añaden el concepto deadlines ahora y no solo eso, sino que lo hacen solo para ZFS?

Señor bendito, que Linux 2.6 trae esas dos cosas de serie, y las trae en una capa por encima del de sistema de archivos, haciendo que funcionen con cualquier sistema de archivos. Para los que no tengan idea de como va el tema en Linux 2.6, la parte que se encarga de reordenar y mandar I/O's a los drivers - el famoso "algoritmo del ascensor" - es totalmente modular.

El "io scheduler" por defecto es "anticipatory scheduler" que entre otras cosas implementa el concepto de deadline de ZFS, que consiste simplemente en que las peticiones I/O sincronas de lectura (las escrituras de un proceso se pueden retrasar en el cache, las lecturas son siempre sincronas) tienen una "deadline" de manera que pasado un tiempo esas peticiones se sirven a la fuerza. Eso garantiza "calidad" y que un proceso no se quede eternamente esperando. Calidad de servicio, vamos.

Y luego esta el CFQ, que implementa prioridades I/O. A pesar de la escasísima repercusion que ha tenido este scheduler en la comunidad linux, es tan maravilloso como suena: Puedes coger un proceso y darle menos o mas "prioridad I/O", con lo cual puedes decidir que procesos tienen derecho a mas o menos MB/s. Puedes decir que apache tenga mas prioridad que nadie para que un updatedb no te tire el servidor web y cosas asi.

¿Diferencia con Solaris? Que en linux estos "io schedulers" funcionan hasta con sistemas de archivos FAT. Se implementa en el lugar correcto. Por si fuera poco, esta parte del kernel es tan modular, que no solo permite varios: Permite cambiarlos al vuelo (cat/echo /sys/block/hda/queue/scheduler). Y permite utilizar uno diferente para cada dispositivo (un disco SCSI necesita diferente gestor IO que un lapiz USB). Y permite - ojo - hacer cada io scheduler modular, y insmod/rmmodearlos, o crear tu propio IO scheduler y cargarlo como modulo y hacer que lo use tu disco para probarlo, y descargarlo y volver a cargarlo si estás desarrollando, y cambiarlos y...

Vamos, que ZFS == acojonante como sistema de archivos, pero me sigo quedando con linux como sistema operativo

1 comentario:

  1. Anónimo8:06 p. m.

    Interesante sin duda. Pero ya existe algo muy parecido en linux, LVM.

    Creas un volumen lógico, le pones encima un ext3, y le puedes hacer un "resize" en caliente, con ext3online.

    ResponderEliminar