mdadm / lvm alignment

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Nopel
  • Registratie: Februari 2009
  • Laatst online: 20-06 13:59
Ik heb een homeserver staan die Debian draait. Toen ik die, bijna een jaar geleden, samenstelde, zaten er 6 harde schijven van 1.5 TB in die ik met mdadm in Raid5 aan elkaar hing. Daar zette ik dan lvm2 over om handiger te kunnen partitioneren.

Het zijn allemaal standaard 512B-sector schijven, dus de raid array en de lvm laag heb ik allemaal gewoon default aangemaakt, zonder me met speciale alignment bezig te houden. De oorspronkelijke mdadm chunk size was 64 KiB, lvm PE's 4 MiB.

Ondertussen heb ik al een paar keer de array laten groeien. Momenteel bestaat die uit 14 schijven van 1.5 TB in Raid6, met 512 KiB chunk size. Dit is de huidige situatie:

$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Thu Dec 24 17:40:26 2009
     Raid Level : raid6
     Array Size : 17581627392 (16767.15 GiB 18003.59 GB)
  Used Dev Size : 1465135616 (1397.26 GiB 1500.30 GB)
   Raid Devices : 14
  Total Devices : 14
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Nov  4 09:46:52 2010
          State : clean
 Active Devices : 14
Working Devices : 14
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           UUID : 315d2f61:4920e233:dee7863d:af5dab7f (local to host utal)
         Events : 0.5052324

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       65        1      active sync   /dev/sde1
       2       8      177        2      active sync   /dev/sdl1
       3       8      113        3      active sync   /dev/sdh1
       4       8      129        4      active sync   /dev/sdi1
       5       8      161        5      active sync   /dev/sdk1
       6       8      145        6      active sync   /dev/sdj1
       7       8       49        7      active sync   /dev/sdd1
       8       8       33        8      active sync   /dev/sdc1
       9       8       17        9      active sync   /dev/sdb1
      10       8       97       10      active sync   /dev/sdg1
      11       8       81       11      active sync   /dev/sdf1
      12       8      225       12      active sync   /dev/sdo1
      13       8      209       13      active sync   /dev/sdn1


$ sudo pvdisplay -m
  --- Physical volume ---
  PV Name               /dev/md0
  VG Name               tank
  PV Size               16.37 TiB / not usable 1.81 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4292389
  Free PE               0
  Allocated PE          4292389
  PV UUID               0eRpCM-AJHL-3lSF-73gy-CFe4-g8hD-6xAvm1

  --- Physical Segments ---
  Physical extent 0 to 22527:
    Logical volume      /dev/tank/home
    Logical extents     0 to 22527
  Physical extent 22528 to 23551:
    Logical volume      /dev/tank/usr
    Logical extents     0 to 1023
  Physical extent 23552 to 24575:
    Logical volume      /dev/tank/var
    Logical extents     0 to 1023
  Physical extent 24576 to 25599:
    Logical volume      /dev/tank/swap_1
    Logical extents     0 to 1023
  Physical extent 25600 to 4292388:
    Logical volume      /dev/tank/data
    Logical extents     0 to 4266788


Als ik nu echter een nieuwe partitie op de array wil aanmaken en mkfs-en, krijg ik deze waarschuwing:

$ sudo mkfs.ext4 /dev/tank/usr
mke2fs 1.41.12 (17-May-2010)
[b]/dev/tank/usr alignment is offset by 327680 bytes.
This may result in very poor performance, (re)-partitioning suggested.[/b]
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=1536 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


Stride en stripe width kloppen wel, maar hoe kan ik deze misalignment oplossen? Dit is de snelheid die ik op deze partitie krijg:
$ dd if=/dev/zero of=testfile bs=4096 count=800000
800000+0 records in
800000+0 records out
3276800000 bytes (3.3 GB) copied, 19.2158 s, 171 MB/s
$ dd if=testfile of=/dev/null bs=4096
800000+0 records in
800000+0 records out
3276800000 bytes (3.3 GB) copied, 5.60768 s, 584 MB/s

Op de andere filesystems in de array krijg ik gelijkaardige resultaten.

Kan de performance nog verbeterd worden met een juiste alignment? Op Google vind ik enkel informatie over het alignen van SSD's of Advanced Sector Drives. Kan ik de alignment nog aanpassen zonder dat ik de hele array moet heraanmaken? Er staat momenteel een 14 TiB aan data op, die kan ik niet zomaar ergens tijdelijk plaatsen. (Ik weet dat raid geen backup is, van de echt onmisbare data heb ik ook wel een backup, maar de rest wil ik liever ook niet kwijt...)