ZFS интерпретирует вывод zdb -S tank

ZFS интерпретирует вывод zdb -S tank

Я хотел узнать, окупится ли активация дедупликации ZFS, поэтому я выполнил команду, zdb -S tankно понимаю, что мне понадобится помощь, чтобы интерпретировать вывод.

Simulated DDT histogram:

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     1    49.2M   6.15T   6.15T   6.14T    49.2M   6.15T   6.15T   6.14T
     2     352K   42.0G   42.0G   42.0G     725K   86.3G   86.3G   86.4G
     4    7.99K    913M    913M    916M    37.7K   4.20G   4.20G   4.21G
     8    1.43K    161M    161M    161M    14.6K   1.58G   1.58G   1.58G
    16      623   67.1M   67.1M   67.4M    12.2K   1.32G   1.32G   1.33G
    32       73   7.37M   7.37M   7.43M    2.65K    268M    268M    270M
    64      717   4.23M   4.23M   7.46M    48.3K    392M    392M    611M
   128        4    257K    257K    266K      689   40.9M   40.9M   42.6M
   256        2    128K    128K    133K      802   57.8M   57.8M   59.3M
   512        2      1K      1K   10.7K    1.37K    703K    703K   7.32M
    4K        1    128K    128K    128K    7.31K    935M    935M    934M
   16K        1    512B    512B   5.33K    20.0K   10.0M   10.0M    107M
   64K        1    128K    128K    128K    93.0K   11.6G   11.6G   11.6G
  512K        1    128K    128K    128K     712K   89.0G   89.0G   88.9G
 Total    49.6M   6.19T   6.19T   6.18T    50.9M   6.34T   6.34T   6.33T

dedup = 1.02, compress = 1.00, copies = 1.00, dedup * compress / copies = 1.03

Заранее спасибо.

решение1

На этой гистограмме есть две вещи, на которые стоит обратить внимание. Первая и самая очевидная — это dedupвыражение в конце. Тут особо нечего сказать, так как это простая математика. В вашем случае дедупликация обеспечит экономию места всего на 2%, а поскольку вы не используете сжатие (которое вы должны использовать в первую очередь, потому что оно экономит место и обеспечивает производительность, поскольку ввод-вывод намного дороже процессорного времени с эффективным алгоритмом вроде LZ4), это и есть тот предельный выигрыш, который вы получите после включения дедупликации: 2~3%.

Дедупликация начинает быть ценной, когда эффективная экономия пространства выше 2.0, а ваша подсистема хранения настолько дорогая, что память и ЦП можно тратить только на обработку дедупликации. Например, мы говорим о корпоративных пулах NVMe.

Но какой ценой это достигается?

Это второе, о чем я упомянул. Первое попадание будет в вашу оперативную память. Вам нужно будет хранить таблицы дедупликации в оперативной памяти. Если оперативной памяти для этого не будет, система просто рухнет, и вы не сможете смонтировать пул. Есть некоторые улучшения в новых версиях ZFS (например, OpenZFS 2.0), но я не знаю, изменилось ли что-нибудь в этом отношении.

Учитывая это, вы просто получаете общее количество блоков, которое находится в последней строке первого столбца:49.6M

Поскольку для каждой дедуплицированной таблицы требуется 320 байт, вам просто нужно умножить количество блоков на требуемое пространство для данной дедуплицированной таблицы, и вы получите необходимый объем оперативной памяти:

49.6M * 320 bytes = 15.872MB ~ 15.5GB

Так что вы потратите почти16 ГБсистемной оперативной памяти только для дедупликации ваших недедуплицируемых данных. Эти 16 ГБ будут удалены из жизненно важных частей системы, таких как ARC, которые просто ускоряют ваш пул.

Так что нет. Дедупликация не имеет смысла, за исключением случаев, когда:

  • У вас чрезвычайно дорогая подсистема хранения данных
  • Ваши данные можно легко дедуплицировать

Связанный контент