ZFS dedupe (знову ж таки): Чи залежить використання пам'яті від фізичних (виведених, стислих) даних, що зберігаються чи використовуються логічно?


5

Я дуже багато в цьому гугла, але не можу отримати достатню інформацію про це. Як правило, правило становить 5 Гб оперативної пам’яті для 1 ТБ пам’яті. Але що таке сховище насправді? Фізичне чи логічне вживання?

Скажімо, у мене 6 ТБ жорсткого диска, ні дедупінгу, ні стиснення. У мене є 6TB фактичних даних. Припустимо, що це призведе до 2: 1, аж до 3 ТБ даних. Чи нам (приблизно) потрібно 3 * 5 Гб пам'яті або 6 * 5 Гб?

Як я розумію, це залежить від запису. Оскільки я не можу зберігати більше 6 ТБ фактичних записів на диску, приблизно 30 Гб повинно бути достатньо, незалежно від коефіцієнта стиснення / дедупликації, звичайно залежно від реальних розмірів записів?

Річ у тому, що ми хотіли б порахувати, що дешевше: замініть 6 * 6 ТБ диски (3-кратне зберігання / дзеркало / гаряча запасна частина, 3-кратний офсет, у нас немає більше слотів у цих коробках) більшими на резервні копії, або придбати трохи оперативної пам’яті для обох ящиків.

(Відмова: Я не системдмін, але комусь потрібно було надіти цю шапку, щоб ми могли продовжувати створювати резервні копії.)


Як ви говорите, як правило, воно може працювати і з меншою кількістю оперативної пам’яті. Це просто зайняло б більше часу. Крім того, це залежатиме від того, скільки ви насправді збираєтеся відновити за допомогою дедупування. Може, це може вам допомогти?
Сет

Я спробував запустити його в VM для тестування на 16GiB ОЗУ. Імпортували близько місяця резервних копій, і все закінчилось повзанням :) Коефіцієнт вичерпання був вражаючим, але для повного набору даних оцінюється в 2,3.
Даніель

Відповіді:


4

Хоча відповідь user121391 здебільшого правильна, обмеження 1/4 для метаданих вже не є / давно не було:

Існує обмеження на те, скільки кешу ZFS ARC може бути виділено для метаданих (і таблиця дедуптації підпадає під цю категорію), і вона обмежена на 1/4 розміру ARC

Перш за все, zfs_arc_meta_limit (обсяг пам'яті кешування, який може бути використаний для метаданих, включаючи таблицю дедукції), завжди був налаштований (iirc). Тож навіть у дуже старих версіях ZFS, де 25% за замовчуванням могло бути, ви можете використовувати це налаштування для налаштування кількості кешу, доступного для метаданих. У випадку створення резервної системи, де більшість даних користувачів рідко доступні,> = 75% для метаданих + <= 25% для даних користувача може бути більш підходящим. Будь ласка, майте на увазі, що зазначена настройка - це наявний обсяг пам'яті в байтах, а не відсоток.

Залежно від вашої реалізації ZFS, будь ласка, врахуйте наступне:


Для ZFS в Oracle Solaris 11 ліміт давно повністю знято:

До впровадження цієї зміни ARC обмежив метадані однією чвертю пам'яті. Яке б обґрунтування цього не було, воно зараз має серйозний негативний вплив на ефективність дедуптування. Оскільки DDT вважається метаданими, він підпадає під обмеження 1/4. На даний момент ця межа є анахронізмом; його можна усунути (вірніше, встановити в arc_c).

Тож поки ви МОЖЕТЕ встановити ліміт, це більше не рекомендується.


Для ZFS в Linux до 0,6.x , наприклад, для Ubuntu 16.04, за замовчуванням 75%:

zfs_arc_meta_limit (ulong) : Максимально дозволений розмір у байтах, які буфери метаданих можуть використовувати в ARC. Коли ця межа буде досягнута, буфери метаданих будуть повернені, навіть якщо загальна arc_c_max не була досягнута. Це значення за замовчуванням до 0, яке вказує на те, що 3/4 ARC може використовуватися для метаданих.

Ви також можете налаштувати, якщо ви хочете, щоб мінімальний об'єм пам'яті завжди був зарезервований для метаданих:

zfs_arc_meta_min (ulong) : мінімальний дозволений розмір у байтах, які буфери метаданих можуть споживати в ARC. Це значення за замовчуванням до 0, яке вимикає підлогу на кількість виділених мета-даних ARC.

У ZFS на Linux 0.7.0 , схоже, знайдеться спосіб налаштування обсягу пам’яті з обмеженням у відсотках:

zfs_arc_meta_limit_percent (ulong) : відсоток буферів ARC, які можна використовувати для метаданих. Дивіться також zfs_arc_meta_limit, який виконує подібну мету, але має більш високий пріоритет, якщо встановлено ненульове значення.


Якщо ви плануєте використовувати реалізацію ZFS на базі Linux, перш ніж витрачати багато $$$ на обладнання, подумайте про моделювання вашого випадку використання у віртуальній машині. Я рекомендую протестувати найгірший випадок на дедупцію (= 100% випадкових даних). Якщо у вас немає під рукою необхідних ресурсів для віртуалізації, зауважте, що ви можете завжди просто розкручувати шалено величезні екземпляри більшості хмарних постачальників за пару годин за дуже маленькі гроші.

Останнє, що слід врахувати: Ви завжди можете налаштувати розмір ZFS. Взагалі кажучи, невеликі розміри записів дадуть кращі коефіцієнти зменшення (але, очевидно, вимагають більше оперативної пам’яті для таблиці виведення). Більші розміри записів принесуть гірші коефіцієнти зменшення, але потребують меншої оперативної пам’яті для таблиці виведення. Наприклад: Поки ми не використовуємо дедуппію на нашому резервному сховищі ZFS, я встановив розмір запису ZFS до 1М, щоб відповідати розміру блоку, з яким працює наша програма для резервного копіювання.

Не впевнений, чому я щойно написав дисертацію PHD про кешування метаданих ZFS, але я сподіваюся, що це допомагає. :)


Це насправді дуже допомогло! Дякую! 1/4 річ була основним вбивством від кайфу. Це, безумовно, зробить це дешевше, ніж більш жорсткі диски для нашого випадку використання.
Даніель

3

Розрахунок проводиться від фактичного розміру пулу до виведення даних або, точніше, від кількості збережених блоків у пулі (кожному блоку потрібно близько 320 байт простору в DDT, кількість необхідних блоків змінюється залежно від фактичних даних, що зберігаються). Тому ви вважаєте, що як правило, 6 * 5 = 30.

Але це ще не все, що потрібно, як сказано в цьому чудовому посібнику з дедупування :

Загальна вартість оперативної пам’яті дедуплікації

Але знати розмір таблиці дедупликації недостатньо: ZFS потрібно зберігати більше, ніж просто таблицю дедупірування, в пам’яті, наприклад, інших метаданих та, звичайно, кешованих даних блоку. Існує обмеження на те, яка частина кешу ZFS ARC може бути виділена для метаданих (а таблиця дедукцій підпадає під цю категорію), і вона обмежена на 1/4 розміру ARC .

Іншими словами: Який би ви не оцінювали розмір таблиці дедупінгу, вам знадобиться принаймні в чотири рази більше, ніж у оперативній пам’яті, якщо ви хочете зберегти всю свою таблицю заміщення в оперативній пам’яті. Плюс будь-яку додаткову оперативну пам’ять, яку ви хочете присвятити іншим метаданим, таким як покажчики блоків та інші структури даних, тому ZFS не повинен визначати шлях через структуру даних на пулі для кожного блоку, до якого він хоче отримати доступ.

Тому правило великих пальців поширюється:

  • На кожну туберкульоз даних пулу слід очікувати 5 Гб даних таблиці таблиць, припускаючи середній розмір блоку 64 Кб.
  • Це означає, що ви повинні планувати щонайменше 20 ГБ оперативної пам’яті на ТБ даних пулу, якщо ви хочете зберегти таблицю виведення в оперативну пам’ять, плюс будь-яку додаткову пам’ять для інших метаданих, а також додатковий ГБ для ОС.

У вашому випадку це приблизно 120+ ГБ оперативної пам’яті, тому не варто говорити про поточні серверні плати Xeon E5 (128 - 512 ГБ звичайного розміру оперативної пам’яті на процесор). Стаття також містить приклад із реального світу з доларами, які повинні вам добре служити.


Ах, дякую! Нарешті зрозумів це. Ми проводили оцінку DDT, і насправді було б ближче до 5,5 ГБ / ТБ. Якщо припустити, що використання не перевищує 80% (дедуптація складе близько 2,3, стиснення 1,5 => достатньо даних) 128 ГБ буде добре. Хоча ми можемо пропустити це і просто запустити RaidZ1 в обох місцях на даний момент. Менше надмірності, насправді менше місця, але гроші, на жаль, проблеми. Останнє: ми можемо запустити L2ARC. Це може містити таблицю дедуптування. Оскільки нам не потрібно бути високопродуктивними, можливо, насправді це буде нормально. Але скільки пам'яті вистачає тоді? 16 GiB - це не :)
Даніель

@Daniel Якщо ви спробуєте це, було б добре, якщо ви могли б повідомити про свій досвід тут, здається, що вже не багато людей намагалися це зробити. Звичайно, спочатку майте резервну копію;)
user121391

1
У мене нарешті є значення :) Ми придбали додаткову систему з 64 ГБ пам’яті ECC, 4x 10 ТБ жорстких дисків, без L2ARC, працює в дзеркальному режимі, систему Debian Stretch з включеною версією ZFS (0,6.що-то) поверх лукс. Зниження та стиснення увімкнено. Працюючи на три роки частково уточнених даних rsnapshot здебільшого Debian VM, включаючи дані, створені користувачем, як тонна зображень, які, швидше за все, були перейменовані, скопійовані, переміщені час від часу, таким чином, вони не потрапляли на rsnapshot.
Даніель

1
Ми отримали в цілому 25,4 мільйонів виділених блоків, коефіцієнт виведення 2,45x, коефіцієнт стиснення 1,6x (порівняно з 1,8x за невідведеними даними). Логічні дані - 7,28T, фізичні дані на дисках - 2,24T. Якщо я зробив розрахунок правильно, ми сидимо лише на рівні 7,6 Гбіт, що використовується для DDT. Я встановив zfs_arc_max 58GiB. Я більше не робив жодної подальшої настройки. Якщо ви хочете дізнатися щось інше, я з радістю допоможу.
Даніель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.