ZFS медленное чтение с 8 дисками 4 vdev чередуемый зеркальный пул

У меня есть восемь дисков Western Digital Red SATA на 3 ТБ sdb через SDI, который я использую в своем объединении.

Моим диском начальной загрузки и ОС являются 850 SSD EVO на sda.

Восемь дисков WD находятся на Супермикро AOC-SAS2LP-MV8 Расширительной плате, адаптере SAS/SATA с 8 каналами с 600 Мбайт/с за канал в PCIE 3.0 x16, работающем в x8 на Супермикро материнской плате DDR4 LGA 1151 C7Z170-OCE-O ATX.

Моя установка сервера и ZFS следующие:

[root@nas ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

[root@nas ~]# uname -a
Linux nas.whittenberg.domain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@nas ~]# cat /var/log/dmesg | grep ZFS
[    0.793572] ZFS: Loaded module v0.6.5.7-1, ZFS pool version 5000, ZFS filesystem version 5
[root@nas ~]# cat /var/log/dmesg | grep SPL
[    0.777144] SPL: Loaded module v0.6.5.7-1

[root@nas ~]# cat /etc/modprobe.d/zfs.conf
# disable prefetch = 1
options zfs zfs_prefetch_disable=0
# set arc max to 48GB. I have 64GB in my server
options zfs zfs_arc_max=51539607552
# set size to 128k same as file system block size
options zfs zfs_vdev_cache_size=1310720
options zfs zfs_vdev_cache_max=1310720
options zfs zfs_read_chunk_size=1310720
options zfs zfs_vdev_cache_bshift=12
options zfs zfs_read_chunk_size=1310720
# Set thes to 10 so we get better IO at cost of banwidth
options zfs zfs_vdev_async_read_max_active=10
options zfs zfs_vdev_async_read_min_active=10
options zfs zfs_vdev_async_write_max_active=10
options zfs zfs_vdev_async_write_min_active=10
options zfs zfs_vdev_sync_read_max_active=10
options zfs zfs_vdev_sync_read_min_active=10
options zfs zfs_vdev_sync_write_max_active=10
options zfs zfs_vdev_sync_write_min_active=10

[root@nas ~]# zpool status
  pool: myraid
 state: ONLINE
  scan: scrub repaired 0 in 0h16m with 0 errors on Sun Aug  7 01:40:49 2016
config:

        NAME        STATE     READ WRITE CKSUM
        myraid      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdg     ONLINE       0     0     0
          mirror-3  ONLINE       0     0     0
            sdh     ONLINE       0     0     0
            sdi     ONLINE       0     0     0

errors: No known data errors

[root@nas ~]# zpool iostat -v
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
myraid       382G  10.5T    119     35  14.0M   606K
  mirror    95.5G  2.63T     29      8  3.49M   149K
    sdb         -      -     28      8  3.50M   153K
    sdc         -      -     28      8  3.50M   153K
  mirror    95.5G  2.63T     29      8  3.49M   151K
    sdd         -      -     28      8  3.50M   155K
    sde         -      -     28      8  3.50M   155K
  mirror    95.5G  2.63T     29      8  3.49M   152K
    sdf         -      -     28      8  3.50M   156K
    sdg         -      -     28      8  3.50M   156K
  mirror    95.5G  2.63T     29      9  3.49M   155K
    sdh         -      -     28      9  3.50M   159K
    sdi         -      -     28      9  3.50M   159K
----------  -----  -----  -----  -----  -----  -----

[root@nas ~]# zfs get all
NAME    PROPERTY              VALUE                  SOURCE
myraid  type                  filesystem             -
myraid  creation              Sat Aug  6 21:01 2016  -
myraid  used                  382G                   -
myraid  available             10.2T                  -
myraid  referenced            382G                   -
myraid  compressratio         1.05x                  -
myraid  mounted               yes                    -
myraid  quota                 none                   default
myraid  reservation           none                   default
myraid  recordsize            128K                   local
myraid  mountpoint            /myraid                default
myraid  sharenfs              off                    default
myraid  checksum              fletcher4              local
myraid  compression           lz4                    local
myraid  atime                 off                    local
myraid  devices               on                     default
myraid  exec                  on                     default
myraid  setuid                on                     default
myraid  readonly              off                    default
myraid  zoned                 off                    default
myraid  snapdir               hidden                 default
myraid  aclinherit            restricted             default
myraid  canmount              on                     default
myraid  xattr                 on                     default
myraid  copies                1                      default
myraid  version               5                      -
myraid  utf8only              off                    -
myraid  normalization         none                   -
myraid  casesensitivity       sensitive              -
myraid  vscan                 off                    default
myraid  nbmand                off                    default
myraid  sharesmb              off                    default
myraid  refquota              none                   default
myraid  refreservation        none                   default
myraid  primarycache          all                    local
myraid  secondarycache        all                    default
myraid  usedbysnapshots       0                      -
myraid  usedbydataset         382G                   -
myraid  usedbychildren        1.98M                  -
myraid  usedbyrefreservation  0                      -
myraid  logbias               latency                local
myraid  dedup                 off                    local
myraid  mlslabel              none                   default
myraid  sync                  disabled               local
myraid  refcompressratio      1.05x                  -
myraid  written               382G                   -
myraid  logicalused           403G                   -
myraid  logicalreferenced     403G                   -
myraid  filesystem_limit      none                   default
myraid  snapshot_limit        none                   default
myraid  filesystem_count      none                   default
myraid  snapshot_count        none                   default
myraid  snapdev               hidden                 default
myraid  acltype               off                    default
myraid  context               none                   default
myraid  fscontext             none                   default
myraid  defcontext            none                   default
myraid  rootcontext           none                   default
myraid  relatime              off                    default
myraid  redundant_metadata    all                    default
myraid  overlay               off                    default

[root@nas ~]# zpool get all
NAME    PROPERTY                    VALUE                       SOURCE
myraid  size                        10.9T                       -
myraid  capacity                    3%                          -
myraid  altroot                     -                           default
myraid  health                      ONLINE                      -
myraid  guid                        1068639342092444414         default
myraid  version                     -                           default
myraid  bootfs                      -                           default
myraid  delegation                  on                          default
myraid  autoreplace                 off                         default
myraid  cachefile                   -                           default
myraid  failmode                    wait                        default
myraid  listsnapshots               off                         default
myraid  autoexpand                  off                         default
myraid  dedupditto                  0                           default
myraid  dedupratio                  1.00x                       -
myraid  free                        10.5T                       -
myraid  allocated                   382G                        -
myraid  readonly                    off                         -
myraid  ashift                      0                           default
myraid  comment                     -                           default
myraid  expandsize                  -                           -
myraid  freeing                     0                           default
myraid  fragmentation               1%                          -
myraid  leaked                      0                           default
myraid  feature@async_destroy       enabled                     local
myraid  feature@empty_bpobj         enabled                     local
myraid  feature@lz4_compress        active                      local
myraid  feature@spacemap_histogram  active                      local
myraid  feature@enabled_txg         active                      local
myraid  feature@hole_birth          active                      local
myraid  feature@extensible_dataset  enabled                     local
myraid  feature@embedded_data       active                      local
myraid  feature@bookmarks           enabled                     local
myraid  feature@filesystem_limits   enabled                     local
myraid  feature@large_blocks        enabled                     local

[root@nas ~]# zdb | grep ashift
            ashift: 12
            ashift: 12
            ashift: 12
            ashift: 12

[root@nas ~]# lsblk  -t -e 11,1
NAME                ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE  RA WSAME
sda                         0    512      0     512     512    0 cfq       128 128    0B
+-sda1                      0    512      0     512     512    0 cfq       128 128    0B
+-sda2                      0    512      0     512     512    0 cfq       128 128    0B
+-sda3                      0    512      0     512     512    0 cfq       128 128    0B
  +-centos_nas-swap         0    512      0     512     512    0           128 128    0B
  +-centos_nas-root         0    512      0     512     512    0           128 128    0B
  +-centos_nas-home         0    512      0     512     512    0           128 128    0B
sdb                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdb1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdb9                      0   4096      0    4096     512    1 noop      128 128    0B
sdc                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdc1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdc9                      0   4096      0    4096     512    1 noop      128 128    0B
sdd                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdd1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdd9                      0   4096      0    4096     512    1 noop      128 128    0B
sde                         0   4096      0    4096     512    1 noop      128 128    0B
+-sde1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sde9                      0   4096      0    4096     512    1 noop      128 128    0B
sdf                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdf1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdf9                      0   4096      0    4096     512    1 noop      128 128    0B
sdg                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdg1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdg9                      0   4096      0    4096     512    1 noop      128 128    0B
sdh                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdh1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdh9                      0   4096      0    4096     512    1 noop      128 128    0B
sdi                         0   4096      0    4096     512    1 noop      128 128    0B
+-sdi1                      0   4096      0    4096     512    1 noop      128 128    0B
+-sdi9                      0   4096      0    4096     512    1 noop      128 128    0B

Моя проблема - это, когда я считал файл впервые по моему соединению на 10 Гбит в сек. (DAC ПК к Серверу), или использование rsync от пула до SSD в сервере я получаю чуть более чем 100 Мбайт/с. Если я считал тот же файл во второй раз, когда я получаю 1,2 Гбайт/с через 10 Гбит в сек. соединение DAC и 380 Мбайт/с от пула до SSD.

Я перезагружаю сервер и запускаю тест, читающий от пула до SSD:

[root@nas ~]# rsync -h --progress /myraid/testmovie.avi /home/samba/testmovie.avi
testmovie.avi
       1.08G 100%   79.59MB/s    0:00:12 (xfer#1, to-check=0/1)

sent 1.08G bytes  received 31 bytes  80.21M bytes/sec
total size is 1.08G  speedup is 1.00

Затем я делаю то же после того, как оно было считано однажды:

[root@nas ~]# rsync -h --progress /myraid/testmovie.avi /home/samba/testmovie.avi
testmovie.avi
       1.08G 100%  394.54MB/s    0:00:02 (xfer#1, to-check=0/1)

sent 1.08G bytes  received 31 bytes  433.13M bytes/sec
total size is 1.08G  speedup is 1.00

Какие-либо указатели? Разве я не должен получать скорость чтения четырех дисков на первом чтении?

3
задан 15 August 2016 в 21:50

1 ответ

Теоретически разговор

В очень теоретическом мире, из Вашей конфигурации пула (четыре vdevs, каждый зеркало с двумя дисками) Вы могли ожидать пропускную способность чтения, эквивалентную из восемь раз скорости одного диска. Поэтому:

  • В зеркале vdev, ZFS может считать различные блоки данных из обоих дисков одновременно
  • В пуле multi-vdev ZFS будет автоматически чередовать Ваши данные, таким образом, это будет мочь - снова - чтение от нескольких vdevs одновременно

Western Digital утверждает, что Красный диск на 3 ТБ может читать на уровне больше чем 140 МБ/с. Это не собирается происходить, по крайней мере, не все время. Поэтому давайте предположим, что можно получить 100 МБ/с от одного из тех дисков. Когда они объединены в Вашей конфигурации пула, Вы могли теоретически заниматься пропускной способностью чтения на 800 МБ/с.

Добро пожаловать в реальный мир

Теперь, позвольте мне быть ясным: 800 МБ/с, который, вероятно, не собирается происходить! Не потому что ZFS лжет Вам, но потому что то вычисление пропускной способности основано на предположении, что аппаратные средства не стоят на пути. Но это делает, таким образом, Вы не получаете теоретические скорости под реальной рабочей нагрузкой.

Конечно, я понимаю, что Вы все еще ожидаете некоторое разумное повышение производительности комбинацией многих дисков в один больший пул.

Что произошло затем?

Давайте смотреть на Ваши тесты: Вы получаете 80 МБ/с в первый раз, когда Вы копируете большой файл с rsync, затем во второй раз, когда Вы делаете то же самое, Вы получаете 400 МБ/с. Объяснение различия является Адаптивным заменяющим кэшем (ARC), и я полагаю, что Вы уже знаете это. Я просто скажу это ради полноты.

ZFS ARC обеспечивает механизм, чтобы хранить данные, к которым часто получают доступ, в RAM.

В первый раз, когда Вы читаете файл из набора данных ZFS, ZFS должен на самом деле считать данные с диска; тем временем это заполняет свой кэш считывания. Во второй раз, когда Вы читаете тот же файл, Вы получаете данные прямо из RAM - и Вы сказали, что у Вас есть достаточно в Вашей системе для содержания полного файла на 1,08 ГБ. Это означает скорость, которую Вы видите, когда копирование файла снова с rsync (400 МБ/с) не связано с Вашими физическими дисками в пуле ZFS. Мы можем думать о нем как о скорости записи Вашего SSD sda диск. Быть точным, не необработанная скорость записи Вашего SSD: это - скорость, которую Вы получаете при использовании rsync, чтобы считать данные с очень низкой задержки и широкополосных медиа (Оперативная память) и записать в твердотельный диск (который также имеет очень низкую задержку). Плюс, я полагаю, что мы должны полагать, что Linux, вероятно, использует всю эту доступную Оперативную память для кэширования асинхронных записей (делающий предположения здесь!) к разделу твердотельного диска.

Так, в этой точке возникает вопрос: если Ваша скорость записи RAM к SSD, кажется, составляет 400 МБ/с, почему Вы только получаете 80 МБ/с, когда ZFS на самом деле читает из диска? Это - меньше, чем скорость отдельного диска! Очевидно, сам SSD не может быть обвинен, и мы ожидали намного больше от всех тех дисков в пуле ZFS!

Так, чтобы быть абсолютно честным: у Меня нет полного ответа. После рассмотрения всего я сказал до сих пор, мой частичный ответ на Ваш вопрос:

  • Мне похоже, что пропускная способность является низкой из-за высокого действия ввода-вывода, означая, что rsync на самом деле не допускает прямое последовательное чтение большого файла, вместо этого генерирует много ввода-вывода, который может сильно повлиять на выполнение потоковой передачи, если диск имеет некоторую задержку, связанную с большим количеством ввода-вывода. Давайте помнить, что диски Western Digital Red для приложений NAS, что означает, что они предназначаются для достойной пропускной способности и хорошего $ / отношение ГБ, не для высокого IOPS. Когда Вы сделали ту же точную вещь от RAM (низкие медиа задержки), полное выполнение потоковой передачи было в порядке.
  • rsync НЕ является хорошим способом сравнить Вашего объединения ZFS - или что-либо еще. Если Вы гуглите для rsync производительности, Вы видите доказательство ее являющийся медленнее, чем нормальная копия файла - на серьезных основаниях, я думаю: скорость не то, для чего Вы используете rsync. Я искал бы некоторый другой способ сравнить. Даже просто dd или cp мог быть лучший выбор для последовательного теста чтения-записи. Можно посмотреть на эту статью для некоторого вдохновения.
  • Кроме того, я попытался бы выяснить реальную производительность чтения отдельного диска, запустив тесты, прежде чем диски будут даже добавлены к пулу ZFS. Уничтожьте пул (Вы потеряете данные: сначала сделайте резервное копирование при необходимости!), запущенные тесты на каждом диске, затем определяют пул снова и делают еще некоторое тестирование. Затем можно применить математику на основе реальной скорости, которую Вы наблюдали, и сделайте предположения - снова - о теоретической пропускной способности чтения, на основе Вашей конфигурации пула ZFS (4 vdevs * 2 дисковых зеркала = пропускная способность отдельного диска * 8).
  • Если Вы запускаете тесты на каждом диске - перед использованием их в пуле - Вы могли бы узнать, что один или несколько дисков не в хорошем состоянии. Если Вы просто купили диски, возвратите плохие и попросите замены.
  • Если Вы запускаете тесты на каждом диске и узнаете, что они все последовательно работают медленный, Вы могли сталкиваться со связанной с аппаратными средствами проблемой - или конфигурация, поддержка драйвера или другие подобные проблемы.
  • Я попробовал бы различные аппаратные конфигурации (если возможный), и запустите тесты против каждого. Запустите тесты с помощью единственного зеркала vdev пул, чем попытка, комбинирующая больше vdevs в соединение. Посмотрите, дает ли это Вам ожидаемые результаты.

Обернуть: необходимо систематически узнать, где узкое место. Не предполагайте, что это - сам ZFS; это, вероятно, нет. Попробуйте различные конфигурации и запустите тесты с помощью соответствующих инструментов для задания.

Я не сравнительный тест или эксперт по тестированию, таким образом, я не собираюсь давать Вам совет относительно того отношения. Интернет полон замечательного материала о теме. Я просто хотел затронуть некоторые аспекты, которые характерны для ZFS и надо надеяться дают Вам направление для взгляда на.

2
ответ дан 1 December 2019 в 16:57

Другие вопросы по тегам:

Похожие вопросы: