Как определить, поможет ли включение дедупликации, которая удаляет избыточные данные из файловых систем ZFS, сэкономить место на диске без снижения производительности.
Что такое дедупликация ZFS?
В Ubuntu 22.04 появилась возможность установки на файловую систему ZFS. Напомним, что ZFS родом из операционной системы Solaris, которая сейчас под ведением Oracle. В ZFS можно использовать свойство дедупликации (dedup) для удаления избыточных данных из файловых систем ZFS. Если в файловой системе ZFS включено это свойство dedup, тогда повторяющиеся блоки данных удаляются по мере их записи на диск. В результате на диске хранятся только уникальные данные, а общие компоненты совместно используются файлами.
В некоторых случаях дедупликация может привести к экономии дискового пространства и снижении стоимости хранения. Однако перед включением свойства dedup необходимо учитывать требования к оперативной памяти. Кроме того, подумайте, не станет ли вместо dedup, включение сжатия в ваших файловых системах отличным способом уменьшить потребление дискового пространства.
Выполните следующие оценочные действия перед тем как включить дедупликацию. Обратите внимание, что важно выполнить первые два шага, прежде чем пытаться использовать дедупликацию.
Шаг 1. Определите, можно ли дедуплицировать ваши данные
Определите, выиграют ли ваши данные от экономии места при дедупликации с помощью инструмента отладки ZFS, zdb. Если ваши данные не поддерживают дедупликацию, нет смысла включать файлы dedup.
Дедупликация выполняется с использованием контрольных сумм. Если блок имеет ту же контрольную сумму, что и блок, который уже записан в пул, он считается дубликатом и, таким образом, на диск записывается только указатель на уже сохраненный блок.
Таким образом, процесс дедупликации данных, которые не могут быть дедуплицированы, впустую будут тратить ресурсы ЦП. Дедупликация ZFS является внутренней. Это означает, что дедупликация происходит при записи данных на диск и влияет как на ресурсы ЦП, так и на ресурсы памяти.
Посмотрим какие есть пулы. И в примере ниже нам интересно рассматривать rpool.
$ zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT bpool 1.88G 241M 1.64G - - 0% 12% 1.00x ONLINE - rpool 232G 121G 111G - - 2% 51% 1.00x ONLINE -
Теперь собираем информацию о характере данных. Например, если предполагаемый коэффициент дедупликации больше 2, вы можете увидеть экономию места при дедупликации. В примере, показанном в листинге ниже, коэффициент дедупликации меньше 2, поэтому включать dedup не рекомендуется.
$ zdb -S rpool Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 1.17M 129G 104G 105G 1.17M 129G 104G 105G 2 73.9K 6.49G 5.45G 5.50G 153K 13.5G 11.3G 11.4G 4 7.42K 857M 711M 713M 33.0K 3.70G 2.97G 2.98G 8 1019 87.2M 43.8M 44.7M 10.9K 993M 502M 511M 16 151 9.06M 5.50M 5.70M 3.11K 186M 113M 118M 32 109 1.50M 1.21M 1.29M 5.16K 68.6M 55.5M 59.3M 64 14 1.16M 1.03M 1.04M 1.26K 113M 102M 103M 128 4 258K 10K 16K 812 58.6M 2.19M 3.17M 256 1 128K 4K 4K 445 55.6M 1.74M 1.74M Total 1.25M 136G 111G 111G 1.37M 147G 120G 120G dedup = 1.08, compress = 1.23, copies = 1.00, dedup * compress / copies = 1.33
Шаг 2. Определите, достаточно ли памяти в вашей системе для поддержки операций дедупликации
Этот шаг имеет решающее значение, поскольку таблицы дедупликации потребляют память и в конечном итоге переполняются ещё и занимают место на диске. В этот момент ZFS должна выполнять дополнительные операции чтения и записи для каждого блока данных, для которого выполняется дедупликация, что приводит к снижению производительности. Система с большими пулами и небольшими объёмами памяти плохо выполняет дедупликацию. Некоторые операции, такие как удаление в большой файловой системе с включённым dedup сильно снижают производительность системы, особенно если система не соответствует требованиям к памяти.
Рассчитайте потребность в памяти следующим образом:
- Каждая запись внутренней таблицы дедупликации (DDT) занимает примерно 320 байт.
- Умножьте количество выделенных блоков на 320.
Для примера берём данные из листинга zdb, который мы делали выше:
Размер встроенного DDT (1.25M) x 320 = 400 MB памяти потребуется.
Шаг 3. Включение в ZFS свойства dedup
Убедитесь, что вы включаете свойство dedup только для тех файловых системы, в которых есть данные с возможностью дедупликации, и убедитесь, что в ваших системах достаточно памяти для поддержки операций дедупликации.
Какие точки монтирования у вашей файловой системы:
$ zfs list
Посмотрите, как в Ubuntu 22.04 была развёрнута по-умолчанию файловая система ZFS на картинке ниже:
Дедупликацию легко включить в файловой системе, например так (rpool/home замените на нужное):
$ zfs set dedup=on rpool/home
Резюме
После того как вы оцените два ограничения на дедупликацию, коэффициент дедупликации и требования к памяти, вы можете принять решение о том, следует ли внедрять дедупликацию и какова вероятная экономия.
Заметим, что в примере приведённом в этой статье включение опции dedup для файловой системы ZFS не потребовалось.
Ссылки
- См. официальный блог Oracle Solaris
- Ознакомьтесь с советами и рекомендациями The Observatory for Oracle Solaris.
- Следите за новостями Oracle Solaris в Facebook и Twitter