резюме: Я установил 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
вопросы:
-
почему я получаю меньше читаю, чем пишу производительности? Разве запись не должна сходиться со скоростью 3 дисков и считываться со скоростью 4 дисков, как RAID5?
-
почему не пнуть l2arc удар в? После нескольких чтений без чтения других данных я бы ожидал производительности чтения, подобной 1 ГБ / с SSD RAID0.
-
почему 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]
поэтому он должен принадлежать пулу данных, не так ли?