lunes, 28 de marzo de 2011

Alineando particiones SSD en GNU/Linux


Has comprado un disco SSD? Planeas particionarlo? Veamos cuál es la mejor forma de configurar las particiones en un disco SSD -- y los sistemas de archivos resultantes -- alinear los page boundaries, mejorando así el rendimiento y minimizando el número de ciclos de re-escritura.

Manos a la obra

Para esta prueba se adquirió un disco SSD de 64 GB en una tienda Microcenter, el cual utiliza un controlador SandForce 1222. Anteriormente se ha probado el rendimiento de este controlador en pruebas de compresión de datos en tiempo real. Pero ya que finalmente tenemos el disco, primeramente vamos a configurarlo correctamente.


El reto que se enfrenta es que estas particiones se encuentran en los límites de los cilindros (tomando en cuenta que fdisk en Linux utiliza “heads” y “tracks” para definir los cilindros). Si ese límite de cilindro no está alineado con la página de un SSD, entonces el SSD puede hacer trabajo extra en los ciclos de lectura/modificación/escritura, causando ciclos de escritura extras que merman el rendimiento. Si en tu caso no vas a particionar el disco SSD no necesitas preocuparte por esto porque no sería afectado dicho disco.

Por defecto, fdisk de Linux utiliza una geometría de 255 cabezas, 63 sectores/tracks, y, todavía, sectores de 512-bytes. Esto da como resultado 16,065, sectores de 512-bytes por cilindro (2,008.125 páginas de 4KB). Estas no están alineadas en páginas de 4KB. Entonces necesitamos ajustar la geometría para alinear los límites de los cilindros a páginas de 4KB para que las particiones estén alineadas con los límites de página.



En Internet podemos encontrar algunas recomendaciones geométricas para nuestros discos SSD, como por ejemplo la de Theodore Ts’o, líder de ext4, en su blog, recomienda:


224 heads (32*7)
56 sectors per track (8*7)


Esto resulta en 12,544 sectors por cylinder (256 * 49). Utilizando 56 sectores por track tenemos 56*512 bytes o 28,762 bytes por track. Esto es lo mismo que 7 blocks de 4KB en cada cilindro, por lo que tendremos un número entero de páginas de 4KB por cylinder. Por lo tanto cualquier partición éstará alineada. Este es un ejemplo de cómo hacerlo.

[root@test64 ~]# fdisk -H 224 -S 56 /dev/sdd
he number of cylinders for this disk is set to 9345.
TThere is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
sions of LILO) 2) booting and partitioning software from other
1) software that runs at boot time (e.g., old ve rOSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended
2 Last cylinder or +size or +
p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-9345, default 1) :sizeM or +sizeK (2-9345, default 9345): Using default value 9345 Command (m for help): w
disks.
The partition table has been altered! Calling ioctl() to re-read partition table. Syncing


Notemos que se comenzó en el segundo cilindro para asegurarnos de que la partición /dev/sdd1 inicia en un límite de cilindro.

Podemos verificar el particionamiento con la opción “-l” de fdisk.
[root@test64 ~]# fdisk -l /dev/sdd
isk /dev/sdd: 60.0 GB, 60022480896 bytes
D224 heads, 56 sectors/track, 9345 cylinders
Units = cylinders of 12544 * 512 = 6422528 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 2 9345 58605568 83 Linux

Además podemos dar un vistazo al número de sectores utilizando la opción “-lu”.

[root@test64 ~]# fdisk -lu /dev/sdd
isk /dev/sdd: 60.0 GB, 60022480896 bytes
D224 heads, 56 sectors/track, 9345 cylinders, total 117231408 sectors
Units = sectors of 1 * 512 = 512 bytes
Blocks Id System /dev/sdd1 12544 117223679
Device Boot Start End
58605568 83 Linux

La partición comienza en el sector 12,544 (256 * 49) y termina en el final del dispositivo.

Una alternativa ofrecida en OCZ Technology Forum utiliza una geometría ligeramente diferente.

32 heads
32 sectors per track

El resultado es 1,024 sectores por cilindro (32 * 32). Con sectores de 512-bytes resulta en cilindros de 512KB los cuales pueden ser alineados en límites de página de 4KB  (128 páginas por cilindro). Un ejemplo de esto en el mismo dispositivo (/dev/sdd):.

[root@test64 ~]# fdisk -H 32 -S 32 /dev/sdd
he number of cylinders for this disk is set to 114483.
TThere is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
sions of LILO) 2) booting and partitioning software from other
1) software that runs at boot time (e.g., old ve rOSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended
): 2 Last cylinder or +size or
p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-114483, default 1 +sizeM or +sizeK (2-114483, default 114483): Using default value 114483 Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.

El pariticionamiento podemos verlo con fdisk -l.

[root@test64 ~]# fdisk -l /dev/sdd
isk /dev/sdd: 60.0 GB, 60022480896 bytes
D32 heads, 32 sectors/track, 114483 cylinders
Units = cylinders of 1024 * 512 = 524288 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 2 114483 58614784 83 Linux

Notemos que las unidades para esta geometría es 512KB (524,288 Bytes) y tiene un número mayor de cilindros que en el primer ejemplo. También podemos ver los sectores con la opción “-lu”.

[root@test64 ~]# fdisk -lu /dev/sdd
isk /dev/sdd: 60.0 GB, 60022480896 bytes
D32 heads, 32 sectors/track, 114483 cylinders, total 117231408 sectors
Units = sectors of 1 * 512 = 512 bytes
Blocks Id System /dev/sdd1 1024 117230591
Device Boot Start End
58614784 83 Linux

Como comenzamos en el sector 1,024 el cual, utilizando sectores de 512-Bytes, significa que la partición está alineada con 512KB.

Cuál opción es mejor? Esto depende de varios factores, especialmente en cómo trabaja el disco SSD y cómo trabaja el controlador o firmware. Una vez más afirmamos que si no vas a particionar el disco no necesitar preocuparte por todos estos pasos – solamente utiliza el disco completo (/dev/sdd) y todo debería estar bien. Pero si vas a particionar el disco deberías considerar una de estas dos opciones para asegurarte de que las particiones estén alineadas para un mayor rendimiento y longevidad del disco.

Fuente: LinuxMag

No hay comentarios:

Publicar un comentario