Налаштування zfs на freebsd - мій блог

Що ви будете знати ...
• Як оптимізувати ZFS для різних додатків і робочих навантажень
• Як виміряти і оцінити ефективність кеша ZFS

Що ви повинні знати ...
• Базові навички адміністрування ZFS системи
• Працювати з параметрами налаштування sysctl (8) і loader (8)

Основні поради по тюнінгу

На FreeBSD, кожен раз, коли відбувається звернення до файлу час доступу (atime) оновлюється. Це може сформувати велику кількість записів на диск на сервері працює з великим числом файлів. В такому випадку ви захочете відключити atime (час доступу) для постраждалих даних або для всього пулу. Відключення atime може поліпшити продуктивність всіх типів додатків серевер.

# Zfs set atime = off dataset

Використання стиснення даних в ZFS зберігає простір але має негативний ефект на продуктивність CPU системи і чуйності. З іншого боку, включення стиснення (головним чином LZJB) може підвищити продуктивність ваших даних, особливо на повільних носіях. Зокрема вартість стиснення gzip істотно більше процесорного часу, чим менший рівень стиснення LZJB стиснення. Тому я рекомендую використовувати стиснення даних тільки якщо ви маєте стискають дані і набори даних це не пляшкове горлечко продуктивності або якщо у вас мало дискового простору. Набори даних з низькою активністю містять, наприклад, журнальні файли хороші кандидати для gzip стиснення. Якщо ви маєте швидкий накопичувач з достатнім простором і потрібна первоклассаная продуктивність, вимкніть стиснення набору даних для пошкоджених наборів даних.

# Zfs set compression = [on | off] dataset

ZFS дедуплікація відносно нова характеристика, яка включається вами для збереження простору зберіганням єдиною копії даних, які доступні на ваших ZFS наборах даних в множинних копіях. Дедуплікація необхідна при величезній кількості оперативної пам'яті. Ідеальна ситуація якщо ваша вся таблиця дедуплікаціі вписується в пам'яті, в іншому випадку ви можете отримати досвід зниження продуктивності системи. Дедуплікація може бути включена і / або відключена на основі набору даних:

Для відображення аптайма і реального часу активності ARC і ефективності, будь ласка зверніться до розділу цієї статті zfs-stats і zfs-mon.

Другий рівень адаптивної заміни кеша (L2ARC)

# Zfs add pool cache device

# Zfs remove pool device

L2ARC надає кілька системних параметрів настройки, я наведу такий приклад:

vfs.zfs.l2arc_feed_again: turbo warmup

vfs.zfs.l2arc_feed_secs: interval secs

vfs.zfs.l2arc_write_max: max write size

vfs.zfs.l2arc_write_boost: extra write during warmup

vfs.zfs.l2arc_headroom: number of dev writes to precache

vfs.zfs.l2arc_noprefetch: do not cache prefetch bufs

zfs-stats і zfs-mon: інструменти статистики ZFS

kstat.zfs sysctl (8) параметр надає доступ до безлічі змінних лічильників ZFS. Ці змінні містять вихідні дані і роблять деякі висновки з цих змінних, проміжні значення повинні бути обчислені. Perl скрипти zfs-stats і zfs-mon обробляють ці дані і надають висновок в зручному для людини вигляді. Zfs-stats утиліта заснована на arc_summary.pl Бена Роквуд і включає зміни зроблені Джейсоном Гелленталь і мною. Обидва ці інструменту доступні в портах FreeBSD в sysutils / zfs-stats. Дані з zfs-stats підсумовуються і / або середні значення лічильників, які збирають дані з системи після того як вона загрзілась. Приклад уривка виведення з zfs-stats: Лістинг 1.

Середній uptime не говорить багато про дійсної продуктивності системи. Для відображення кешу ефективності (або початкової кількості) в реальному часі я написав утиліту zfs-mon. Вона відстежує ARC, L2ARC і zfetch в реальному часі і виводить 10 секундні, 60 секундні і загальне середні значення в секунду (загальне = з тих пір як програма була запущена).
Приклад zfs-mon -a висновок після збору 120 секундних даних: Лістинг 2.

Як загальний кеш ефективності L2ARC кеш доступний тільки на системі без ARC, так ваш загальний кеш ефективності обчислюється використовуючи наступну формулу:

[ARC efficiency] + (100 [ARC efficiency]) * ([L2ARC efficiency] / 100).

Результат для прикладу вище:

89,96 + (100-89,96) * (71,15 / 100) = 97,10.

Інтерпретація виведення zfs-stats і zfs-mon

Висновок zfs-stats і zfs-mon може допомогти вам відкрити місця вузького горлечка і вирішити змінити деякі недостатні значення. Головне відображається значення це використання і ефективність різних кешів. Значення ефективності 100% означає, що всі читання з диска виконані. Для моїх цілей, ефективність вище 80% вважається ефективним, а вище 90% вважається високоефективним. Пам'ятайте, що L2ARC займає деякий час для розігріву і призначений для загального поліпшення вашого кешу. При використанні zfs-mon, спробуйте збирати дані за тривалий період часу і посмтріте колонку tot.

Ось деякі основні значення:

Неефективний кеш даних ARC:
• Якщо ви маєте лімітований розмір ARC, збільште або видаліть ліміт
• Вимкніть ARC для деяких наборів даних

Лістинг 2. Приклад виведення zfs-mon (час запуску 120 секунд)

• Облік зниження межі медалі ARC
• Додайте більше ОЗУ в вашу систему
• Враховуйте використання додаткового L2ARC пристрій кеша

Неефективний кеш метаданих ARC:

• Враховуйте підвищення межі метаданих ARC
• Додайте більше ОЗУ в вашу систему

Неефективний кеш L2ARC:

• Це залежить від дуже багатьох чинників в структурі вашого читання
• Якщо ваш ARC вже дуже ефективний, L2ARC може на деякий час додати тільки невелику перевагу
• Якщо ваш ARC неефективний, теж, врахуйте підвищення системної пам'яті і L2ARC
• У деяких сценаріях еффектівеность в 30-40% L2ARC може вже бути доступна

• Врахуйте відключення zfetch

Неефективність попереднього завантаження vdev:

• Врахуйте відключення попереднього завантаження vdev
• Якщо включено, чистка та ресілвер можуть працювати значно швидше
• Змініть додаткові налаштування попереднього завантаження vdev (тільки для експертів)

Тюнінг ZFS для додатків

На FreeBSD, досвідчений користувач може побачити, що це перевага відключення SendFile і mmap на вашому веб-сервері, якщо ви обслуговуєте ваші сторінки з набором даних ZFS. В іншому випадку ваші дані можуть кешуватися в пам'яті двічі, а це знижує системну пам'ять.

Ось приклади конфігураційних директив для популярних веб-серверів:

EnableMMAP Off
EnableSendfile Off

Сервери баз даних

Для баз даних таких як PostgreSQL і MySQL, користувачам рекомендується зберігати їх в наборі даних, створених різними розмірами запису, ніж задано за замовчуванням 128 кілобайт.

Для PostgreSQL і MySQL (MyISAM сховище), встановлюється розмір запису в 8 кілобайт перед популярним набором даних:

На налаштуванні з 4к блоком, невеликі файли до 4к завжди займають один цілий блок. Метаданих ZFS у багато разів менше ніж 4Кб. Будь ласка, зверніть увагу, що використання ashift = 12 збільшує початкове простір необхідне для метаданих до досить великої кількості (близько 5% від загального розміру диска). Залежно від ваших даних, може увілічіть навантаження на ваш пул при заповненні даними (наприклад, багато дрібних файлів). Так що це ефективний компроміс між продуктивність і вільним дисковим простором і вам доведеться вирішувати, що для вас важливіше.

Навігація по публікаціям

Схожі статті