Категорії
FreeBSD Linux Misc, staff, other Solaris

[zfs] Прискорюємо роботу ZFS

ZFS, це як FreeBSD, з базовими налаштуваннями її мало хто використовує. І є люди, які незаслужено її звинувачують у тому, що вона повільна. Так, в default конфігурація вона не швидка (в першу чергу створювалася не для швидкості, а для стабільності). Почнемо з простих і далі будемо рухатися до більш складних:

zfs set atime=off rpool/fs

Відключає постійне оновлення atime для файлів. Якщо ви його не використовуєте, то немає сенсу кожен раз витрачати ресурси для його оновлення

zfs set compression=lz4 rpool/fs

Вмикає компресію. Найбільш оптимальним з точки зору продуктивності є lz4. Але, якщо треба більше компресія з трохи більшими витратами на ресурси, то можна і виставити gzip-7.

zfs set sync=disabled rpool/fs

Відключає виконання sync() (так званий software flush), замість цього просто відповідає, що sync() виконаний успішно. Зазвичай, відключення цього параметру несе ризик втрати даних за останні 5 секунд.

zfs set logbias=throughput rpool/fs

Вказує на те, що не використовувати окремі диски для log’y транзакцій і оптимізує для того, щоб використовувати один диск і для даних і для журналу транзакцій. В 99% це так.

zfs set recordsize=X rpool/fs

Тут треба правильно вказати розмір блоку запису. Якщо вказати занадто малий, то буде більше транзакцій записати один і той же обʼєм даних. Якщо вказати занадто великий, то швидко буде закінчуватися місце для дуже маленьких файлів. Ще важливий момент для переповнених пулів, де вільного місця менше 10-15%: як не дивно, то треба трохи зменшувати значення, бо з кожною транзакцією ZFS буде все важче і важче знайти цілий вільний великий блок. Тобто, якщо у вас було recordsize=1M, то виставивши recordsize=512K, можна покращити роботу. Тут немає єдиної рекомендації, але можу сказати з досвіду, що інколи доводилося зменшувати в 4 рази recordsize, допоки ZFS не почала працювати краще.

zfs_nocacheflush = 1

Відключає виконання flush зі сторони дисків (так званий hardware flush). Ризики ті самі, якщо у вас немає BBU в дисковому контролері.

zfs_prefetch_disable = 1

Якщо у вас з диску читання даних довільне (а в 99% воно так і), то це допоможе не сканувати диски кожен раз і не “вгадувати” майбутні дані для віддачі.

zfs_txg_timeout
zfs_txg_synctime_ms
zfs_ssd_txg_synctime_ms

Ці параметри кажуть, скільки часу може бути відкрита група транзакцій (txg) перед тим, як записатися на диск. За замовчуванням це 5 сек. тобто, кожні 5 секунд на диск щось пишеться. Є відповідний параметр і для SSD. Можна збільшувати в 2-10 разів для того, щоб відчути різницю.

zfs_read_chunk_size

Який розмір чанку будет читатися за 1 раз. Дуже корисний параметр для SSD, коли треба пришвидшити читання з диску, який 99% не навантажений. Можна збільшувати в 2-10 разів для того, щоб відчути різницю.

zfs_vdev_max_pending

Аналогічно попередьому параметру, але збільшує кількість одночасних запитів до одного пристрою (HDD). Можна збільшувати в 2-10 разів для того, щоб відчути різницю.

Корисні посилання:

https://blogs.oracle.com/solaris/post/128k-suffice

https://blogs.oracle.com/solaris/post/dedup-performance-considerations

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff