1

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

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

У меня есть 2x 2 ТБ SDD (Samsung 850 Evo) и 4x 8 ТБ HDD (WD Red). 3,5 ТБ SDD будут RAID0, оставшиеся 2 * 250 ГБ могут использоваться в качестве кеша для ZFS. Для первого теста я добавил их как два кеширующих устройства для RAIDZ на 4 жестких диска.

Вот макет:

# 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 сообщает о такой низкой пропускной способности чтения для отдельных устройств? Я запускал это несколько раз (это из последнего запуска), и это всегда похоже. Жесткие диски для for просто добавляют до ~ 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? Я мог бы также сэкономить несколько десятков ГБ от SSD OS M.2 для этого. По крайней мере, если я смогу добавить устройство LVM, так как сейчас все это требует установки Kubuntu. Я еще этого не сделал, потому что понял, что это поможет только с небольшими синхронизированными записями, чего я не ожидаю. В основном, большая дата будет записана обратно поочередно.

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

zpool add data cache [devices]

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

1 ответ1

1

Производительность RAIDZ1 по сравнению с обычным RAID5

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

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

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

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

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

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


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

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

Посмотрите на этот список рассылки:

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

а также

Пост Марти Скоулза Некоторые из чтений являются последовательными? Последовательные чтения не идут в L2ARC.

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

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

Различные вопросы

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .