Это сбивает с толку меня, и я не знаю способа углубиться в то, что на самом деле делает ZFS.
Я использую чистую установку FreeNAS 11.1 с быстрым пулом ZFS (импортированные зеркала на быстрых 7200) и отдельным SSD UFS для тестирования. Конфиг в значительной степени "из коробки".
SSD содержит 4 файла размером 16 -120 ГБ, скопированных с помощью консоли в пул. Пул дедуплицирован (стоит того: экономия в 4 раза, размер на диске 12 ТБ), а система имеет много оперативной памяти (128 ГБ ECC) и быстрый Xeon. Памяти вполне достаточно - zdb
показывает, что пул имеет в общей сложности 121 МБ блоков (544 байта каждый на диске, 175 байтов каждый в ОЗУ), поэтому весь DDT составляет всего около 20,3 ГБ (около 1,7 ГБ на ТБ данных).
Но когда я копирую файлы в пул, я вижу это в zpool iostat
:
Это делает цикл из минут чтения низкого уровня и краткого всплеска записей. Прочитанная часть показана на рис. Общая скорость записи для задачи также невелика - пул пуст на 45%/10 ТБ и изначально может записывать со скоростью 300–500 МБ /с.
Не зная, как проверить, я подозреваю, что низкоуровневые чтения - это чтение DDT и других метаданных, так как они не загружаются в ARC (или постоянно выталкиваются из ARC при записи данных файла). Может быть.
Возможно, он обнаружил попадания дедупликации, так что не так много написано, только я не помню ни одной дублированной версии этих файлов, и он делает то же самое из /dev /random, насколько я помню (я проверю это и скоро обновлю). Может быть. Нет настоящей идеи.
Что я могу сделать, чтобы разобраться в том, что происходит более точно, с целью его оптимизации?
Обновление ОЗУ и дедупликация:
Я обновил Q, чтобы показать размер ДДТ после первоначального комментария. ОЗУ дедупликации часто указывается как 5 ГБ на ТБ х 4, но это основано на примере, который действительно не очень подходит для дедупликации. Вы должны рассчитать количество блоков, умноженное на байты на запись. "Х 4" часто цитируются просто "мягкий" предел по умолчанию только (по умолчанию метаданных ZFS ограничивает до 25% АРК , если не сказано , чтобы использовать больше - эта система specced для DeDup и я добавил 64GB что все полезные для ускорения кэширование метаданных).
Таким образом, в этом пуле zdb
подтверждает, что для всего ДДТ необходимо всего 1,7 ГБ на ТБ, а не 5 ГБ на ТБ (всего 20 ГБ), и я рад предоставить метаданные 70% ARC, а не 25% (80 ГБ из 123 ГБ).
При таком размере не нужно извлекать из ARC ничего, кроме "мертвого" содержимого файла. Поэтому я пытаюсь на самом деле проверить ZFS, чтобы выяснить, что происходит, и поэтому я могу видеть эффект от любых изменений, которые я делаю, потому что я действительно очень удивлен его огромным количеством "низкого уровня чтения", и ищу способ проверить и подтвердить реальность того, что он думает, что делает.