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

760
user23563

Описание : Я настроил массив 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] пароль для администратора:  пул: данные состояние: онлайн сканирование: не запрашивается конфигурации:  НАИМЕНОВАНИЕ ГОСУДАРСТВЕННОЙ ЧИТАЙТЕ НАПИСАТЬ CKSUM данные онлайн 0 0 0 raidz1-0 ОНЛАЙН 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 кэш ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1 ОНЛАЙН 0 0 0 ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1 ОНЛАЙН 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 пропускная способность операций пропускная способность Выделите пул бесплатно читать писать читать -------------------------------------------------- - ----- ----- ----- ----- ----- ----- данные 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 кеш - - - - - - 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
Пожалуйста, покажите нам конкретную планировку вашего бассейна. Вывод `zpool status` с импортированным пулом будет работать хорошо. a CVn 6 лет назад 0
Я добавил это. Из любопытства, так как я ничего не вижу? Что там, чего нет у iostat для макета? Я все еще путаюсь с тем, что кеш не связан с пулом данных, хотя команда add предлагает это. Но о, хорошо, «данные» также записаны в первой строке, так что я думаю, что весь этот вывод будет дублирован для другого пула? user23563 6 лет назад 0
Обновление относительно zpool iostat: iostat из пакета sysstat ТАКЖЕ сообщает об этих низких значениях, в то время как виджет пропускной способности диска KDE сообщает о реалистичной пропускной способности ... странно. user23563 6 лет назад 0

1 ответ на вопрос

1
user121391

RAIDZ1 performance vs. conventional RAID5

Why do I get lower read than write performance? Shouldn't write converge to the speed of 3 discs and read to the speed of 4 discs, like a RAID5?

See this thread on ServerFault:

RAIDZ with one parity drive will give you a single disk's IOPS performance, but n-1 times aggregate bandwidth of a single disk.

And this comment:

I have a significant amount of experience with this, and can confirm for you that in most situations, RAIDZ is NOT going to outperform the same number of disks thrown into a traditional RAID5/6 equivalent array.

Your disks can sustain about 145 MB/s sequentially, so your theoretical results should be 435 MB/s. I would say that pretty closely matches your results.


L2ARC cache for sequential reads

Why doesn't kick the l2arc kick in? After multiple reads with no other data being read, I would have expected a read performance similar to the 1GB/s of the SSD RAID0.

Have a look at this mailing list post:

Is ARC satisfying the caching needs?

and

Post by Marty Scholes Are some of the reads sequential? Sequential reads don't go to L2ARC.

So, your main reasons are:

  • Your (random) load is already served from ARC and L2ARC is not needed (because your data was always the same and can stay in ARC completely). Idea behind that: ARC is much faster than L2ARC (RAM vs. SSD), so your first choice for reads is always ARC, you need L2ARC only because your active data is too big for memory, but random disk access is too slow on spinning disks.
  • Your benchmark was sequential in nature and thus not served from L2ARC. Idea behind that: sequential reads would poison the cache, because a single big file read would fill the cache completely and remove millions of small blocks from other users (ZFS is optimized for concurrent random access of many users), while not having any effect on your speed on the first read. On the second read it would be speed up, but normally you do not read large files twice. Maybe you can modify the behavior with ZFS tuneables.

Various questions

Should I use part of the SSDs for ZIL?

A separate SLOG device will only help for random synchronized writes, nothing else. To test this it is quite simple - set your benchmark file system property sync to disabled: zfs set sync=disabled pool/fs, then benchmark again. If your performance is now suddenly great, you will benefit. If it does not change much, you won't.

PS: Why does cache look like a pool named cache, not something that belongs to the pool data?

I think it is that way because those extra devices (spares, caches, slog devices) can also consist of multiple vdevs. For example, if you have a mirrored slog device, you would have the same 3 levels like your normal disk (log - mirror - disk1/disk2).

Ну, это не совсем отвечает на мои вопросы. Еще отличная ссылка, спасибо! Я был более удивлен, что написание было быстрее, чем чтение. В ответе ServerVault, похоже, нет различия. Но ладно, меня больше всего озадачивают следующие вещи: 1) Кажется, l2arc не имеет никакого эффекта? Я прочитал файл сто раз за ночь. Теперь каждому кеш-диску выделено 50 ГБ, поэтому он может быть чередующимся, но я все еще читаю с 450 МБ / с, хотя SSD может обеспечивать 1 ГБ / с (и делать это как mdRAID0). 2) Почему zpool iostat такой низкий? user23563 6 лет назад 0
@ user23563 Пожалуйста, смотрите мой обновленный ответ, я надеюсь, что это полезно. user121391 6 лет назад 0
Да, это помогает LOL, я отмечу это как ответ. Благодарю. Теперь остается открытым только один, вероятно, косметический вопрос (хотя это может быть индикатор проблем?): Почему zpool iostat сообщает о скорости 160 МБ / с от vdev, в то время как я фактически извлекаю 450 МБ / с, см. Добавленный комментарий :) user23563 6 лет назад 0
@ user23563 В общем случае запись будет быстрее чтения при использовании устройств кэширования. Вызовы записи могут возвращать момент, когда все данные копируются в кеш - каким бы ни был этот кеш. Вызовы чтения могут быть возвращены только тогда, когда все данные были скопированы в буфер чтения вызывающей стороны - * с диска *, если это необходимо. И при последовательном чтении больших объемов данных, шансы на то, что данные должны будут поступать с диска. Andrew Henle 6 лет назад 1
Что ж, для записи в кэш с двумя SDD 500 МБ / с немного медленны, с другой стороны ... А поскольку это файл размером 100 ГБ, это также не относится к дисковым кэшам. user23563 6 лет назад 0
@ user23563 Так вы знаете, в чем причина разницы в производительности? Andrew Henle 6 лет назад 0
@ Эндрю Хенле Нет? Почему ты так думаешь? user23563 6 лет назад 0

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