Raid 10 – Muy lento

Tengo configuration de Raid 10 de software, ha estado trabajando muy bien unos meses.

Cuando hice una rápida testing de velocidad HD:

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync 

Se tarda una eternidad y tuve que terminarlo, el resultado fue:

1073741824 bytes (1.1 GB) copydos, 151.27 s, 7.1 MB / s

¿Qué causa esto?

 [root@host ~]# cat /proc/mdstat Personalities : [raid1] [raid10] md2 : active raid1 sdc1[4] sdd1[3] sdb1[1] sda1[0] 204788 blocks super 1.0 [4/4] [UUUU] md127 : active raid10 sdc4[4] sdb4[1] sdd4[3] sda4[0] 1915357184 blocks super 1.2 256K chunks 2 near-copies [4/4] [UUUU] md1 : active raid1 sdc3[4] sdb3[1] sdd3[3] sda3[0] 8387576 blocks super 1.1 [4/4] [UUUU] md0 : active raid1 sdc2[4] sda2[0] sdb2[1] sdd2[3] 10484668 blocks super 1.1 [4/4] [UUUU] bitmap: 1/1 pages [4KB], 65536KB chunk 

Tiempo de actividad:

 [root@host ~]# uptime 18:50:28 up 105 days, 11:34, 1 user, load average: 0.04, 0.05, 0.00 

Memoria

 [root@host ~]# free -m total used free shanetworking buffers cached Mem: 15893 15767 125 0 461 14166 -/+ buffers/cache: 1139 14753 Swap: 8190 9 8181 

Especificaciones del server:

Xeon E3-1230

16GB DDR-3 ECC

4 x 1 TB 7200 RPM SATA (RAID de software)

Tengo aviso cuando hago fdisk -l command – get montón de partición no válida, es que nada que ver con ello? Si es así, ¿cómo solucionarlo?

 [root@host ~]# fdisk -l Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x000d1a79 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 fd Linux raid autodetect Partition 1 does not end on cylinder boundary. /dev/sda2 26 1332 10485760 fd Linux raid autodetect /dev/sda3 1332 2376 8388608 fd Linux raid autodetect /dev/sda4 2376 121601 957679840+ fd Linux raid autodetect Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x000303b7 Device Boot Start End Blocks Id System /dev/sdb1 * 1 26 204800 fd Linux raid autodetect Partition 1 does not end on cylinder boundary. /dev/sdb2 26 1332 10485760 fd Linux raid autodetect /dev/sdb3 1332 2376 8388608 fd Linux raid autodetect /dev/sdb4 2376 121601 957679840+ fd Linux raid autodetect Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdc1 * 1 26 204800 fd Linux raid autodetect Partition 1 does not end on cylinder boundary. /dev/sdc2 26 1332 10485760 fd Linux raid autodetect /dev/sdc3 1332 2376 8388608 fd Linux raid autodetect /dev/sdc4 2376 121601 957679840+ fd Linux raid autodetect Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x0006436c Device Boot Start End Blocks Id System /dev/sdd1 * 1 26 204800 fd Linux raid autodetect Partition 1 does not end on cylinder boundary. /dev/sdd2 26 1332 10485760 fd Linux raid autodetect /dev/sdd3 1332 2376 8388608 fd Linux raid autodetect /dev/sdd4 2376 121601 957679840+ fd Linux raid autodetect Disk /dev/md0: 10.7 GB, 10736300032 bytes 2 heads, 4 sectors/track, 2621167 cylinders Units = cylinders of 8 * 512 = 4096 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x00000000 Disk /dev/md0 doesn't contain a valid partition table Disk /dev/md1: 8588 MB, 8588877824 bytes 2 heads, 4 sectors/track, 2096894 cylinders Units = cylinders of 8 * 512 = 4096 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x00000000 Disk /dev/md1 doesn't contain a valid partition table Disk /dev/md127: 1961.3 GB, 1961325756416 bytes 2 heads, 4 sectors/track, 478839296 cylinders Units = cylinders of 8 * 512 = 4096 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 262144 bytes / 524288 bytes Disk identifier: 0x00000000 Disk /dev/md127 doesn't contain a valid partition table Disk /dev/md2: 209 MB, 209702912 bytes 2 heads, 4 sectors/track, 51197 cylinders Units = cylinders of 8 * 512 = 4096 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x00000000 Disk /dev/md2 doesn't contain a valid partition table 

Puedo pensar en varias posibles razones para tal resultado:

  1. Demasiadas operaciones de fdatasync() : en este caso, el performance está limitado por el número de transactions que un disco duro puede realizar dentro de un período de time específico. Para medios rotativos tradicionales con una sola cabeza por superficie, el máximo absoluto está determinado por la velocidad de rotation. Por ejemplo, para bloques de datos de 64K, sólo se obtendría

     7200rpm * 64K/rotation = 7,680 K/sec 

    Sospecho que debido a la semántica de RAID 1 + 0, cada escritura sólo golpearía un único espejo cada vez, ya que el tamaño del bloque dd es más pequeño que el tamaño del bloque de matriz. Esto limitaría el performance de la matriz a la de un solo espejo, que para las escrituras es el de una sola unidad.

    En mi sistema dd con estas opciones sólo realiza una sola llamada fdatasync() antes de salir – quizás la tuya hace una por bloque? Ejecutar dd bajo strace le diría si este es el caso.

  2. Un sistema de files montado con la opción de datos de sync también mostraría un comportamiento similar.

  3. Un problema de hardware – He visto con frecuencia estos retrasos debido a cables defectuosos y fallos en los discos duros. Yo sugeriría leer sus loggings del sistema y ejecutar smartctl en todas sus unidades. Una testing de lectura también sería útil, ya que también debería ser afectado por un problema de hardware – ¿cómo su matriz de tarifa con lee?