Прочитавши оригінальну нитку електронної пошти та відповідь @ ewwhite, які її пояснили, я думаю, що це питання потребує оновленої відповіді, оскільки відповідь вище стосується лише половини.
Як приклад, давайте скористаємося результатами мого пулу. Я використав команду zdb -U /data/zfs/zpool.cache -bDDD My_pool
. У моїй системі мені знадобився додатковий -U
аргумент, щоб знайти файл кешу ZFS для пулу, який FreeNAS зберігає в іншому місці від звичайного; ви можете або не повинні цього робити. Як правило, спробуйте zdb
без -U
першого, і якщо ви отримаєте помилку файлу кешу, тоді використовуйте find / -name "zpool.cache"
або подібне, щоб знайти потрібний йому файл.
Це був мій фактичний результат, і я його інтерпретував нижче:
DDT-sha256-zap-duplicate: 771295 entries, size 512 on disk, 165 in core
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
2 648K 75.8G 68.6G 68.8G 1.39M 165G 149G 149G
4 71.2K 8.07G 6.57G 6.62G 368K 41.7G 34.1G 34.3G
8 28.1K 3.12G 2.34G 2.36G 281K 31.0G 23.1G 23.4G
16 5.07K 424M 232M 241M 110K 9.10G 5.06G 5.24G
32 1.09K 90.6M 51.8M 53.6M 45.8K 3.81G 2.21G 2.28G
64 215 17.0M 8.51M 8.91M 17.6K 1.39G 705M 739M
128 38 2.12M 776K 872K 6.02K 337M 118M 133M
256 13 420K 21.5K 52K 4.63K 125M 7.98M 18.5M
512 3 6K 3K 12K 1.79K 3.44M 1.74M 7.16M
1K 1 128K 1K 4K 1.85K 237M 1.85M 7.42M
2K 1 512 512 4K 3.38K 1.69M 1.69M 13.5M
DDT-sha256-zap-unique: 4637966 entries, size 478 on disk, 154 in core
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 4.42M 550G 498G 500G 4.42M 550G 498G 500G
DDT histogram (aggregated over all DDTs):
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 4.42M 550G 498G 500G 4.42M 550G 498G 500G
2 648K 75.8G 68.6G 68.8G 1.39M 165G 149G 149G
4 71.2K 8.07G 6.57G 6.62G 368K 41.7G 34.1G 34.3G
8 28.1K 3.12G 2.34G 2.36G 281K 31.0G 23.1G 23.4G
16 5.07K 424M 232M 241M 110K 9.10G 5.06G 5.24G
32 1.09K 90.6M 51.8M 53.6M 45.8K 3.81G 2.21G 2.28G
64 215 17.0M 8.51M 8.91M 17.6K 1.39G 705M 739M
128 38 2.12M 776K 872K 6.02K 337M 118M 133M
256 13 420K 21.5K 52K 4.63K 125M 7.98M 18.5M
512 3 6K 3K 12K 1.79K 3.44M 1.74M 7.16M
1K 1 128K 1K 4K 1.85K 237M 1.85M 7.42M
2K 1 512 512 4K 3.38K 1.69M 1.69M 13.5M
Total 5.16M 638G 576G 578G 6.64M 803G 712G 715G
dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39
Що це все означає, і розробка фактичного розміру таблиці дедупінгу:
Вихідні дані показують дві підтаблиці , одна для блоків, де існує дублікат ( DDT-sha256-zap-duplicate ) і друга для блоків, де немає дубліката ( DDT-sha256-zap-унікальний ) /. Третя таблиця під ними дає загальний підсумок для обох цих груп, а під цим є підсумковий рядок. Переглядаючи лише "загальні" рядки, а резюме дає нам те, що нам потрібно:
Розмір DDT для всіх блоків, які з’являються не один раз ("DDT-sha256-zap-duplicate") :
771295 entries, size 512 bytes on disk, 165 bytes in RAM ("core")
Розмір DDT для унікальних блоків ("DDT-sha256-zap-унікальний") :
4637966 entries, size 478 bytes on disk, 154 bytes in RAM ("core")
Загальна статистика DDT для всіх записів DDT, дублікат + унікальний ("гістограма DDT, агрегована за всіма DDT") :
allocated referenced
(= disk space actually used) (= amount of data deduped
into that space)
______ ______________________________ ______________________________
blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
Total 5.16M 638G 576G 578G 6.64M 803G 712G 715G
Підсумок :
dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39
Давайте зробимо деяку кількість хрускіт.
Кількість записів працює так: Кількість записів, що відносяться до повторюваних блоків = 771295, кількість записів, пов’язаних з унікальними блоками = 4637966, загальна кількість записів у таблиці DDT повинна становити 771295 + 4637966 = 5409261. Отже кількість блоків у мільйонах (двійкові мільйони тобто!) було б 5409261 / (1024 ^ 2) = 5,158 мільйона. У підсумку ми знаходимо, що всього 5,16 млн блоків .
Оперативної пам’яті потрібні такі роботи: 771295 записів для дублікатів блоків кожен займає 165 байт в оперативній пам’яті, а 4637966 записів для унікальних блоків кожен займає 154 байти в оперативній пам’яті, тому загальна оперативна пам’ять, необхідна для таблиці зведення, зараз = 841510439 байт = 841510439 / (1024 ^ 2) Мбайт = 803 МБ = 0,78 ГБ оперативної пам’яті .
(Використовуваний розмір диска можна опрацювати аналогічно, використовуючи фігури "розмір на диску". Очевидно, ZFS намагається ефективно використовувати введення / виведення диска і скориставшись тим, що дисковий простір, зайнятий DDT isn Як правило, це проблема. Отже, схоже, що ZFS просто виділяє повний сектор 512 байтів для кожного запису, або щось уздовж цих рядків, а не лише 154 або 165 байт, щоб забезпечити його ефективність. Це може не включати жодних припусків для кількох копії, що зберігаються на диску, що зазвичай робить ZFS.)
Загальний обсяг збережених даних та вигода від його виведення: Із загальної статистики DDT 715 Гбайт ("715G") даних зберігається, використовуючи всього 578 Гбіт ("578G") виділеного сховища на дисках. Таким чином, наш коефіцієнт економії місця - 715 ГБ даних / (578 ГБ простору, який використовується після виведення даних) = 1,237 х, про що говорить нам резюме ("дедуппіт = 1,24").