Назад | Перейти на главную страницу

Программное обеспечение RAID6 и формат сектора 4k - медленная повторная синхронизация

Я ищу причину, по которой повторная синхронизация программного RAID-6 Linux выполняется намного медленнее, чем я ожидал.

Я использовал 6 жестких дисков WDC WD40EFRX (с 4 КБ физических секторов) для создания массива RAID-6.

$ sudo mdadm -v -C /dev/md6 -l6 -e1 -n6 /dev/sd[a-f]

Когда начался процесс повторной синхронизации, я понял, что он неожиданно медленный.

Personalities : [raid1] [raid6] [raid5] [raid4]
md6 : active raid6 sdf[5] sde[4] sdd[3] sdc[2] sdb[1] sda[0]
      15627548672 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [========>............]  resync = 44.6% (1743624744/3906887168) finish=1056.3min speed=34129K/sec

Загрузка процессора далека от 100%:

$ top
  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
14499 root      20   0     0    0    0 S  24.3  0.0 173:26.29 md6_raid6
16789 root      20   0     0    0    0 D  21.6  0.0 162:51.05 md6_resync

Интенсивность работы с HDD также не слишком велика:

$ sudo iostat -dkx sd{a,b,c,d,e,f} 5
Linux 3.2.0-4-amd64 (mrs)       05/24/2014      _x86_64_        (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda            2700.46   950.79 3361.95   42.59 24260.48  3974.70    16.59     4.40    1.29    1.25    4.44   0.09  31.80
sdd            2779.61   963.48 3281.19   29.14 24254.07  3971.56    17.05     4.50    1.36    1.31    6.54   0.10  32.88
sde            2819.95   964.17 3240.85   29.26 24254.00  3974.75    17.26     4.63    1.42    1.37    6.43   0.10  33.73
sdc            2714.32   949.45 3346.47   43.88 24254.02  3974.64    16.65     4.41    1.30    1.26    4.38   0.09  31.96
sdb            2856.48  1913.76 3204.31   71.79 24254.02  7945.13    19.66     4.87    1.49    1.38    6.03   0.12  38.66
sdf            2988.96  1922.34 3071.82   63.27 24253.94  7944.90    20.54     5.34    1.70    1.57    8.06   0.13  41.73

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda            4000.40  1311.20 4308.20   70.60 33234.40  5528.80    17.70     6.39    1.46    1.42    3.75   0.11  46.88
sdd            4093.80  1367.80 4213.80   38.60 33185.60  5565.60    18.23     6.02    1.42    1.38    5.10   0.11  46.88
sde            4189.20  1353.80 4125.80   46.20 33394.40  5617.60    18.70     5.98    1.45    1.41    4.78   0.11  46.80
sdc            3970.60  1327.20 4338.20   54.00 33235.20  5525.60    17.65     5.55    1.26    1.23    3.73   0.10  43.20
sdb            4156.60  2670.40 4158.00   91.60 33322.40 11055.20    20.89     6.50    1.54    1.46    5.18   0.13  53.20
sdf            4370.20  2670.20 3937.80   93.40 33205.60 11080.80    21.97     7.51    1.86    1.73    7.43   0.15  60.40

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda            3808.80  1286.20 4317.00   70.20 32426.40  5427.20    17.26     6.03    1.38    1.36    2.61   0.10  42.40
sdd            3930.80  1289.20 4193.20   43.00 32465.60  5390.40    17.87     6.68    1.58    1.55    4.76   0.11  47.68
sde            4006.20  1300.20 4123.40   49.60 32394.40  5324.80    18.08     6.46    1.55    1.46    8.84   0.11  46.24
sdc            3713.20  1295.40 4412.40   60.80 32442.40  5427.20    16.93     5.65    1.26    1.23    3.33   0.09  42.00
sdb            3664.20  2595.20 4462.00  117.40 32444.00 10854.40    18.91     6.22    1.36    1.26    5.02   0.10  47.84
sdf            4050.80  2620.20 4075.00   92.60 32458.40 10858.40    20.79     8.04    1.93    1.77    8.75   0.14  59.28

Тест чтения показывает, что оборудование работает хорошо:

$ sudo hdparm -T -t /dev/md6

/dev/md6:
 Timing cached reads:   12684 MB in  2.00 seconds = 6349.46 MB/sec
 Timing buffered disk reads: 1490 MB in  3.00 seconds = 496.21 MB/sec

$ sudo hdparm -T -t /dev/sda

/dev/sda:
 Timing cached reads:   12582 MB in  2.00 seconds = 6298.96 MB/sec
 Timing buffered disk reads: 438 MB in  3.01 seconds = 145.72 MB/sec

Так что, ИМХО, беспокоиться можно только о выравнивании блоков по секторам. Я хотел бы попросить кого-нибудь показать, как определить правильность выравнивания блоков RAID по секторам.

Я мог определить следующую информацию о моем массиве RAID-6:

$ sudo mdadm --examine /dev/sda
/dev/sda:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 17f8705f:e4cf176a:514d669c:04ae747f
           Name : mrs:6  (local to host mrs)
  Creation Time : Fri May 23 22:46:54 2014
     Raid Level : raid6
   Raid Devices : 6

 Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
     Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
  Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : efb373eb:cd5cd27e:fee8f9cc:0e59ff15

    Update Time : Sat May 24 09:04:04 2014
       Checksum : 608b32d8 - correct
         Events : 6

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AAAAAA ('A' == active, '.' == missing)

$ sudo mdadm --detail /dev/md6
/dev/md6:
        Version : 1.2
  Creation Time : Fri May 23 22:46:54 2014
     Raid Level : raid6
     Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
  Used Dev Size : 3906887168 (3725.90 GiB 4000.65 GB)
   Raid Devices : 6
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Sat May 24 09:04:04 2014
          State : active, resyncing
 Active Devices : 6
Working Devices : 6
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

  Resync Status : 36% complete

           Name : mrs:6  (local to host mrs)
           UUID : 17f8705f:e4cf176a:514d669c:04ae747f
         Events : 6

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd
       4       8       64        4      active sync   /dev/sde
       5       8       80        5      active sync   /dev/sdf

Большое спасибо!

Количество полосы пропускания ввода-вывода, используемой для повторной синхронизации, может быть настроено через /proc/sys/dev/raid/speed_limit_min и /proc/sys/dev/raid/speed_limit_max.