Desalineación del sistema de ficheros en SSDs

Enviado por Black Rider el 16 Agosto, 2011 - 10:31.

La desalineación del sistema de ficheros respecto a los bloques de borrado es un fenómeno común que se da en discos de estado sólido y unidades flash. Aunque frecuentemente subestimado e ignorado, un sistema de ficheos desalineado puede reducir la velocidad de escritura del dispositivo hasta en un 72%.

Para comprender en qué consiste esta desalineación, es imperativo conocer cómo están constituídos los dispositivos que la sufren. Las unidades de estado sólido están constituidas por varias páginas de datos, donde cada página es, a grosso modo, la unidad más pequeña de datos que puede escribirse. La página típica es de 4 Kb. Asimismo, los discos de estado sólido utilizan bloques de borrado, que representan la mínima cantidad de información que puede borrar el dispositivo. Puede ser de muchos tamaños, y oscila entre los 128 Kb y los 2 Mb. Además, los sistemas de ficheros (ext4, XFS y demás) están divididos también en bloques, que representan la unidad más reducida de información que pueden manejar.

¿Cómo funciona todo esto? Lo voy a ejemplarizar. Imaginemos un aparato de 4 Kb de tamaño de página y 128 Kb de bloque de borrado. Por conveniencia, nos vamos a figurar que los bloques del sistema de ficheros son de 4 Kb. Si tenemos que sobrescribir un archivo de 8 Kb, lo que debemos hacer es borrar lo que había antes y luego escribir la nueva información. En este caso, borraríamos 128 Kb, escribiríamos el archivo nuevo (4 Kb, una página) y luego reescribiríamos todo lo que hemos borrado y no deberíamos (120 Kb, o 30 páginas). Al parecer, y que conste que no tengo datos científicos para confirmarlo, se emplean bloques de borrado demasiado grandes porque así la empresa se permite reducir costes de fabricación (imagino que nadie querría comprar una unidad USB de 4 Gb por 700$, ¿no?).

Como habéis visto, éste método ya es bastante malo de por sí incluso en condiciones de funcionamiento óptimas. Vamos a ver qué pasa cuando las cosas van realmente mal.

Imaginemos que queremos sobrescribir el mismo archivo de 4 Kb, pero que nuestro sistema de ficheros está desalineado. Un sistema de ficheros desalineado es aquél sistema de ficheros cuyos bloques no están encasillados dentro de los bloques de borrado, esto es, que pueden tener tener parte de su contenido en un bloque de borrado y parte de su contenido en el segundo. El proceso de escritura sería así: primero borraríamos lo que teníamos antes, pero para hacerlo tendremos que emplear el doble de bloques de borrado (256 Kb), después escribiríamos los datos (8 Kb, porque los 4 Kb irían repartidos en dos páginas) y luego repararíamos los daños colaterales (248 Kb, o 62 páginas). En otras palabras: para escribir 4 míseros Kb, el dispositivo ha tenido que hacer el mismo esfuerzo que para escribir 256.

Los flash USB y las unidades de estado sólido vienen alineadas de fábrica, pero lo normal es que la alineación se vaya al traste en cuanto alguien reparticione el dispositivo sin saber lo que está haciendo. Para colmo, los programas de particionado de GNU/Linux suelen generar una tabla de particiones con una geometría que favorece la desalineación de todo el disco (Windows, por defecto, sólo deja la primera partición desalineada). Las instrucciones precisas para alinear el sistema de ficheros exceden el propósito informativo de este blog, pero podéis encontrar información interesante el los siguientes enlaces:

>> Constitución interna de las unidades de estado sólido:
https://wiki.linaro.org/WorkingGroups/Kernel/Projects/FlashCardSurvey

>> Ejemplo de como alinear sistemas de ficheros, incluso en casos con LVM:
http://ldn.linuxfoundation.org/blog-entry/aligning-filesystems-ssd%E2%80...

>> Alineación de un sistema de ficheros FAT32:
http://www.patriotmemory.com/forums/showthread.php?3696-HOWTO-Increase-w...

Imagen de Debish
Enviado por Debish el 16 Agosto, 2011 - 11:17.

Muy buena entrada clap

Pero me queda una duda:

BlackRider escribió:

Para colmo, los programas de particionado de GNU/Linux suelen generar una tabla de particiones con una geometría que favorece la desalineación de todo el disco

¿Por qué?

Me autorespondo:

linuxfoundation escribió:

Linux’s default partition geometry of 255 heads and 63 sectors/track means that there are 16065 (512 byte) sectors per cylinder. The initial round of 4k sector disks will emulate 512 byte disks, but if the partitions are not 4k aligned, then the disk will end up doing a read/modify/write on two internal 4k sectors for each singleton 4k file system write, and that would be unfortunate.

Imagen de nerve_net
Enviado por nerve_net el 16 Agosto, 2011 - 14:23.

Excelente artículo clap

Imagen de siddharta
Enviado por siddharta el 16 Agosto, 2011 - 15:11.

Se agradece el artículo. Leeré la documentación que has enlazado al final, y quizás encuentre entre sus líneas una luz de esperanza para recuperar mi disco externo USB de 500 GB, que desde hace meses no he podido arreglar con ninguna de las varias herramientas que he probado.

smash

Imagen de sercari
Enviado por sercari el 17 Agosto, 2011 - 14:39.

Interesante articulo, Gracias Black Rider

Buscando info en español encontré esto:
http://fraterneo.blogspot.com/2011/03/alineando-particiones-ssd-en-gnuli...

Saludos.

Imagen de Black Rider
Enviado por Black Rider el 17 Agosto, 2011 - 16:58.
secari escribió:

Interesante articulo, Gracias Black Rider

Buscando info en español encontré esto:
http://fraterneo.blogspot.com/2011/03/alineando-particiones-ssd-en-gnuli...

Saludos.

Esta página parece un buen recurso.

Me gusta el modo en el que esta gente sugiere que emplees el dispositivo en plan "superfloppy", sin tabla de particiones ni nada que se le parezca. Efectivamente, haciéndolo de este modo, las particiones estarán alineadas. No obstante, el hecho de que la partición esté bien ajustada no significa que el sistema de ficheros que esté contenido en su interior esté bien alineado con los bloques de borrado. Remítase el lector al enlace que he dejado para las particiones FAT32: el espacio que consumen las File Allocation Tables (FAT) puede desplazar los bloque del sistema de ficheros propiamente dicho, con lo cual acabarás con un sistema de ficheros desalineado igualmente. Si además nos metemos en el rollo de los volúmenes lógicos, la cosa se complica todavía más.

Por cierto, que he leído por ahí la recomendación de dejar siempre un desfase de 1 Mb entre el inicio del disco y la primera partición. 1 Mb es múltiplo de todos los tamaños de bloques de borrado habituales (128 Kb, 512 Kb...), así que lo normal es que, fijando un desfase de 1 Mb, acabes con una partición alineada aunque ignores el tamaño de los bloques. Se produce un cierto desperdicio de espacio, claro.

Finalmente, quisiera comentar que en otro foro han sacado el tema de la desalineación y alguien ha posteado que el sistema de ficheros XFS sufre únicamente la mitad de degradación que ext4 cuando no está alineado. Tengo que saccar algo de tiempo para investigarlo.

Imagen de Black Rider
Enviado por Black Rider el 17 Agosto, 2011 - 23:56.

Me gustaría añadir la siguiente dirección:

https://wiki.archlinux.org/index.php/Solid_State_Drives

Como de costumbre, los muchachos de Arch han escrito una documentación muy útil.

Imagen de Chapero
Enviado por Chapero el 20 Agosto, 2011 - 13:24.

Me parece una absoluta verguenza y falta de profesionalidad por toda esta gente que fabrican estas cosas, y no se toman el tiempo necesario para ofrecer una buena tecnología como pueda ser esta.

Que asco de fabricantes.

Buen artículo.