1

У меня проблема с производительностью моего массива ZFS, которая, по-моему, связана с дефрагментацией. У меня полосатый массив из 20 устройств с 2 зеркальными дисками в каждом. Я недавно добавил несколько устройств в этот чередующийся массив, которые больше (в 2 раза), чем оригинальные.

Использование zpool iostats показывает, что даже если некоторые старые устройства заполнены на 90%, а новые заполнены только на 50%, записи распределяются поровну между всеми устройствами независимо от свободного% или пространства каждого диска.

Ожидает ли ZFS устройства одинакового размера для чередующегося массива? Это причина, почему диски не используются подобным образом, или это совершенно не имеет значения?

1 ответ1

1

Я проверил это с помощью zdb -ddddd [см. Http://www.cuddletech.com/blog/pivot/entry.php?id=980 ].

Я создал два файла с именами disk1 и disk2, которые были 400M, а затем disk3 и disk4 на 650M, и я создал zpool "tank", используя их:

zpool create tank mirror disk1 disk2
zpool add mirror disk3 disk4

(Я предполагаю, что вы использовали zpool add mirror для включения дисков в пул, а zpool attach не подключал диски к существующему зеркалу vdev; последнее является универсально плохой идеей и не увеличит емкость в любом случае, просто добавит еще один зеркальное устройство)

Когда я заполнил пул на 100 миллионов за раз w/ mkfile, я проверил zdb -ddddd tank <inode#> чтобы увидеть, в какие записи vdevs записывались, и zfs балансировал нагрузку между ними; из 400 адресов блоков в среднем около 300-350 записывались на меньшие "диски" и 450–500 на большие, даже в последнем файле, который заполнил пул.

Это означает, что ZFS будет балансировать блоки, которые он записывает между каждым vdev в пуле. (В этом случае между каждым из ваших 11 зеркал). OTOH, если вы добавите диск большего размера к существующему зеркалу с помощью zpool attach, ZFS не сможет использовать это дополнительное пространство, так как записывает одинаковые блоки на каждый диск в зеркале.

Обычно рекомендуется использовать одни и те же диски в пуле, но это, очевидно, не обязательно. Не добавляйте более быстрый диск в пул с более медленными дисками; в пуле ваш самый медленный диск - это ваше узкое место (хотя добавление журнала SSD для ZIL может смягчить эту проблему).


Кроме того, я бы не стал беспокоиться о дефрагментации в ZFS, это характер зверя - поскольку ZFS является файловой системой копирования при записи , это неизбежно. (Это означает, что вместо перезаписи блока с новыми данными он записывает новые данные в новый блок, а затем обновляет указатели метаданных и контрольные суммы для использования нового блока.) Я не ожидал бы, что это снизит производительность.

То, что снизит производительность, будет заполнено на 90% (мешает копирование при записи). Рекомендуется сохранять загрузку на уровне или ниже 80% для пиковой производительности.

Что заставляет меня думать о чем-то другом - ваш пул уже существует, а затем вы добавили два новых диска - существующие данные НЕ будут распределены по этим дискам, пока они не будут перезаписаны, поэтому я ожидаю увидеть меньше общих данных на новых дисках в течение некоторого времени.

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