Как правильно настроить пул ZFS?

резюме: Я установил raidz массив из 4 жестких дисков с двумя SSD-кэш-устройствами, и я не получаю ожидаемых результатов в увеличении кэша и общей производительности.Кроме того, некоторые вещи, похоже, не складываются.

фон и конфигурации: я настраиваю рабочую станцию анализа для исследования: Ryzen 7 1800X, 64GB ECC RAM, GFX 1080Ti, Tesla K40 (спасибо за это, NVIDIA). Он установлен для общего назначения, будут вычисления CPU и GPU, а также некоторые из наборы данных состоят из очень больших файлов (50-100 файлов по 10-30 ГБ каждый). За счет распараллеливания, иногда некоторые из них будут доступны одновременно.
Есть задания с интенсивным использованием оперативной памяти, но не все из них, поэтому есть ситуации, когда ZFS будет иметь много доступной оперативной памяти, но не все время (5-10GB fpr 500GB l2arc, описанный ниже, будет в порядке).

у меня 2X 2TB SDD (Samsung 850 Evo) и 4X 8TB HDD (WD Red). 3.5 ТБ SDD будет RAID0, остальные 2 * 250 ГБ могут быть используется как кэш для ZFS. Для первого теста я добавил их как два устройства кэширования для RAIDZ над 4 HDD.

вот макет:

# zpool status -v
[sudo] password for administrator: 
  pool: data
 state: ONLINE
  scan: none requested
config:

        NAME                                                 STATE     READ WRITE CKSUM
        data                                                 ONLINE       0     0     0
          raidz1-0                                           ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX                ONLINE       0     0     0
            ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX                ONLINE       0     0     0
        cache
          ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1  ONLINE       0     0     0
          ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1  ONLINE       0     0     0

измерения и выходы команд: я сгенерировал случайный файл (чтобы обойти проблемы сжатия) с довольно хорошими характеристиками:

# dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero) of=filename bs=1M count=100000 iflag=fullblock
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 199,795 s, 525 MB/s

Итак, я ожидал, что этот файл попадет в мой кэш (l2arc, AFAIU), если к нему часто обращаются. Однако, то реально не случается (очень эффективно):

for i in 1 2 3 4;do dd if=filename of=/dev/null bs=1M iflag=fullblock;done
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 252,751 s, 415 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 215,769 s, 486 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 227,668 s, 461 MB/s
100000+0 records in
100000+0 records out
104857600000 bytes (105 GB, 98 GiB) copied, 224,469 s, 467 MB/s

вопросы:

  1. почему я получаю меньше читаю, чем пишу производительности? Разве запись не должна сходиться со скоростью 3 дисков и считываться со скоростью 4 дисков, как RAID5?

  2. почему не пнуть l2arc удар в? После нескольких чтений без чтения других данных я бы ожидал производительности чтения, подобной 1 ГБ / с SSD RAID0.

  3. почему zpool отчет iostat такая низкая пропускная способность чтения для отдельных устройств? Я запускал это несколько раз (это с последнего запуска), и это всегда похоже. Для жестких дисков просто добавить до ~ 160 МБ / с, в то время как DD сообщает более 400 МБ / с:

# zpool iostat -v
                                                        capacity     operations    bandwidth
pool                                                 alloc   free   read  write   read  write
---------------------------------------------------  -----  -----  -----  -----  -----  -----
data                                                  136G  28,9T  1,31K    152   167M  14,9M
  raidz1                                              136G  28,9T  1,31K    152   167M  14,9M
    ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX                    -      -    571     66  46,0M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X                    -      -    445     59  44,9M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX                    -      -    503     66  40,2M  5,18M
    ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX                    -      -    419     62  39,4M  5,18M
cache                                                    -      -      -      -      -      -
  ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1  34,0G   216G      1    266  8,23K  33,1M
  ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1  34,0G   216G      1    266  7,80K  33,0M
---------------------------------------------------  -----  -----  -----  -----  -----  -----

здесь что-то принципиально не так, или я что-то неправильно понял? Должен ли я использовать часть SSD для ZIL? Я мог бы также сэкономить несколько десятков ГБ от OS M. 2 SSD для этого. По крайней мере, если я могу добавить устройство LVM, так как прямо сейчас, все это востребовано установкой Kubuntu. Я еще этого не сделал, потому что понял, что это поможет только с небольшими синхронизированными записями, которых я действительно не ожидаю. В основном, большая дата будет записана последовательно.

PS: почему кэш похож на пул с именем cache, а не на то, что принадлежит данным пула?
Я использовал

zpool add data cache [devices]

поэтому он должен принадлежать пулу данных, не так ли?

10
задан user23563
28.12.2022 15:28 Количество просмотров материала 2887
Распечатать страницу

1 ответ

производительность RAIDZ1 против обычных RAID5

почему я получаю меньше читаю, чем пишу производительности? Разве запись не должна сходиться со скоростью 3 дисков и считываться со скоростью 4 дисков, как RAID5?

смотрите эту тему на ServerFault:

RAIDZ с одним диском четности даст вам производительность IOPS одного диска, но N-1 раз совокупную пропускную способность одного диска.

и этого комментарий:

у меня есть значительный опыт в этом, и я могу подтвердить для вас, что в большинстве ситуаций RAIDZ не будет превосходить то же количество дисков, брошенных в традиционный RAID5/6 эквивалентный массив.

ваши диски могут поддерживать около 145 МБ/с последовательно, поэтому ваши теоретические результаты должны быть 435 МБ / с. Я бы сказал, что довольно близко соответствует вашим результатам.


l2arc кэш для последовательных читает

почему не пнуть l2arc удар в? После нескольких чтений без чтения других данных я бы ожидал производительности чтения, подобной 1 ГБ / с SSD RAID0.

посмотреть это список рассылки post:

удовлетворяет ли ARC потребности кэширования?

и

сообщение от Marty Scholes Некоторые из чтений последовательны? Последовательное чтение не L2ARC.

Итак, ваши основные причины:

  • ваша (случайная) нагрузка уже подается из ARC, и L2ARC не нужен (потому что ваши данные всегда были одинаковыми и могут оставаться в ARC полностью). Идея этого: ARC намного быстрее, чем L2ARC (RAM и SSD), поэтому ваш первый выбор для чтения всегда ARC, вам нужен L2ARC только потому, что ваши активные данные слишком велики для памяти, но случайный доступ к диску слишком медленный на вращающихся дисках.
  • ваш тест был последовательный характер и, следовательно, не подается из L2ARC. Идея этого: последовательное чтение отравит кэш, потому что одно чтение большого файла полностью заполнит кэш и удалит миллионы небольших блоков от других пользователей (ZFS оптимизирована для одновременного случайного доступа многих пользователей), не оказывая никакого влияния на вашу скорость при первом чтении. На втором чтение было бы ускорить, но обычно вы не читаете большие файлы дважды. Возможно, вы можете изменить поведение с помощью ZFS tuneables.

разные вопросы

должен ли я использовать часть SSD для ZIL?

отдельное устройство SLOG поможет только для случайных синхронизированных записей, больше ничего. Проверить это довольно просто-установите свойство файловой системы benchmark sync to disabled:zfs set sync=disabled pool/fs, затем снова benchmark. Если ваше представление теперь внезапно большое, то вы поможете. Если это не сильно изменится, то и не изменится.

PS: почему кэш похож на пул с именем cache, а не на то, что принадлежит данным пула?

Я думаю, что это так, потому что эти дополнительные устройства (запчасти, кэши, устройства slog) также могут состоять из нескольких vdev. Например, если у вас есть зеркальное slog-устройство, у вас будут те же 3 уровня, что и у обычного диска (log - mirror - disk1/disk2).

1
отвечен user121391 2022-12-29 23:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх