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