Що ви будете знати ...
• Як оптимізувати 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% від загального розміру диска). Залежно від ваших даних, може увілічіть навантаження на ваш пул при заповненні даними (наприклад, багато дрібних файлів). Так що це ефективний компроміс між продуктивність і вільним дисковим простором і вам доведеться вирішувати, що для вас важливіше.