ZFS и 4k block size (ashift 12)

Очень давно в 2010 году были куплены Advanced Format (AF) жесткие диски, самые первые полуторатеррные — WD150…EARS с настоящим 4k сектором. Все это было засунуто в корзину на 4 винта и поднят raidz1.  Схема разметки была естественно GPT. Раид был поднят на разделах ada1p1 ada2p1 ada3p1 ada4p1. Разделы все как один были созданы начиная с 40 сектора. Финт ушами с gnop 4k не производился.
ASHIFT=9, т.е. ZFS мыслила 512B секторами. Производительности для домашнего сервера и раздачи файлов по самбе всем хватало, пока не переползла домашняя сетка со 100мбит на гиблый бит и агрегацию линка в две сетевые карты em0 и em1. И када с раида был пропущен траффик на SSD, скорость копирования в тиминге около 90MB/s как-то совсем не возрадовала. Раид к тому времени набрал довольно много инфы и терять ее совсем не хотелось, но тут под руку подвернулся 2TB винт черненький WD и резко созрела мысль смигрировать данные, развалить raidz1 с ashift=9 (512B блок) и сделать такой-же с ashift=12 (4096B блок).

Ради интереса до разваливания раида снял dd скорость внутренней записи на него 1GB:

root@gate:/RAID # dd if=/dev/zero of=file bs=1024k count=1000
1000+0 records in
1000+0 records out
1048576000 bytes transferred in 4.248193 secs (246828723 bytes/sec)

После убил раид, убил разметку GPT на каждом винте из 4-ёх. Скармливать ZFS будем цельные устройства ada1 ada2 ada3 ada4, т.к. грузиться с этого раида не нужно, за систему отвечает отдельный винт небольшого размера. Ну а дальше как в мануале:

root@gate:/usr/home/rudkovskij.pv # gnop create -S 4096 ada1
root@gate:/usr/home/rudkovskij.pv # gnop create -S 4096 ada2
root@gate:/usr/home/rudkovskij.pv # gnop create -S 4096 ada3
root@gate:/usr/home/rudkovskij.pv # gnop create -S 4096 ada4
root@gate:/usr/home/rudkovskij.pv # ls /dev | grep ada
ada0
ada0p1
ada0p2
ada0p3
ada1
ada1.nop
ada2
ada2.nop
ada3
ada3.nop
ada4
ada4.nop
root@gate:/usr/home/rudkovskij.pv # zpool create RAID ada1.nop ada2.nop ada3.nop ada4.nop
root@gate:/usr/home/rudkovskij.pv # zpool export RAID
root@gate:/usr/home/rudkovskij.pv # gnop destroy ada1.nop
root@gate:/usr/home/rudkovskij.pv # gnop destroy ada2.nop
root@gate:/usr/home/rudkovskij.pv # gnop destroy ada3.nop
root@gate:/usr/home/rudkovskij.pv # gnop destroy ada4.nop
root@gate:/usr/home/rudkovskij.pv # zpool import RAID
root@gate:/usr/home/rudkovskij.pv # zpool status -v
  pool: RAID
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        RAID        ONLINE       0     0     0
          ada1      ONLINE       0     0     0
          ada2      ONLINE       0     0     0
          ada3      ONLINE       0     0     0
          ada4      ONLINE       0     0     0

errors: No known data errors

Теперь проверим какой же теперь блок кажется ZFS в видениях =)

root@gate:/usr/home/rudkovskij.pv # zdb
RAID:
    version: 5000
    name: 'RAID'
    state: 0
    txg: 23
    pool_guid: 13687873627866213178
    hostid: 280875915
    hostname: 'gate.pnet.local'
    vdev_children: 4
    vdev_tree:
        type: 'root'
        id: 0
        guid: 13687873627866213178
        children[0]:
            type: 'disk'
            id: 0
            guid: 1708853342344146531
            path: '/dev/ada1'
            phys_path: '/dev/ada1'
            whole_disk: 1
            metaslab_array: 39
            metaslab_shift: 33
            ashift: 12
            asize: 1500297035776
            is_log: 0
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 17231907653978651575
            path: '/dev/ada2'
            phys_path: '/dev/ada2'
            whole_disk: 1
            metaslab_array: 37
            metaslab_shift: 33
            ashift: 12
            asize: 1500297035776
            is_log: 0
            create_txg: 4
        children[2]:
            type: 'disk'
            id: 2
            guid: 7347030249161543122
            path: '/dev/ada3'
            phys_path: '/dev/ada3'
            whole_disk: 1
            metaslab_array: 36
            metaslab_shift: 33
            ashift: 12
            asize: 1500297035776
            is_log: 0
            create_txg: 4
        children[3]:
            type: 'disk'
            id: 3
            guid: 2233881690841192065
            path: '/dev/ada4'
            phys_path: '/dev/ada4'
            whole_disk: 1
            metaslab_array: 34
            metaslab_shift: 33
            ashift: 12
            asize: 1500297035776
            is_log: 0
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth

Как видно, для каждого чилдрена «ashift: 12»
Что старый, что новый раид, ничем друг от друга не отличаются в плане тюнинга zfs, разный только ashift, теперь он 12.
Пробуем ту же операцию втаскивания гигабайта нулей:

root@gate:/usr/home/rudkovskij.pv # cd /RAID
root@gate:/RAID # dd if=/dev/zero of=file bs=1024k count=1000
1000+0 records in
1000+0 records out
1048576000 bytes transferred in 2.671673 secs (392479161 bytes/sec)
root@gate:/RAID #

Разница в производительности заметна. Выходит 246828723 bytes/sec против 392479161 bytes/sec, или 235MB/sec супротив 374MB/sec, что довольно существенно. Винты зеленые, на черненьких думается пошустрея будет еще. Но и на этом неплохо выдавить максимум.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA изображение

*