LINUX.ORG.RU
ФорумAdmin

zfs kvm windows тормоза при записи

 , ,


0

2

Поднимаю хост виртуализации, который будет хостить в т.ч. и винду. Вот с ней и проблемы - при записи возникает какое-то паразитное чтение, которое все адски тормозит. При этом в винде этого чтения в ресурс мониторе не видно. Винда стоит на zfs блочном устройстве. Пул создан из 2 SAS в zfs RAID1. virtio везде. В QEMU кеширование writeback (при умолчательном nocache тормозило сильнее, но статы не смотрел)

zpool iostat 2

               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool        215G   341G      1     46  12.0K   757K
rpool        215G   341G  1.31K      4  10.4M   516K
rpool        215G   341G  2.72K    913  21.8M  35.9M
rpool        215G   341G  2.33K  1.68K  18.3M  16.5M
rpool        215G   341G  2.36K  1.49K  18.9M  11.4M
rpool        215G   341G  1.46K  1.40K  11.6M  59.2M
rpool        215G   341G      0  2.25K  4.00K  17.9M
rpool        215G   341G  2.26K  1.62K  18.1M  12.7M
rpool        215G   341G  2.55K  1.70K  20.4M  13.5M
rpool        215G   341G  2.21K  1.77K  17.7M  14.2M
rpool        216G   340G  2.42K  1.44K  19.4M  11.1M
rpool        216G   340G  2.46K  1.72K  19.7M  13.8M
rpool        216G   340G  2.26K  1.76K  18.1M  14.1M
rpool        216G   340G  2.63K  1.84K  21.0M  14.7M
rpool        216G   340G  2.14K  1.31K  17.1M  10.1M
rpool        216G   340G  2.23K  1.74K  17.8M  13.9M
rpool        216G   340G  2.36K  1.77K  18.9M  14.2M
rpool        216G   340G  2.35K  1.75K  18.8M  14.0M
rpool        216G   340G  2.16K  1.59K  17.0M  12.8M
rpool        216G   340G  2.51K  1.74K  20.0M  13.9M
rpool        215G   341G  2.00K    785  16.0M  5.69M
rpool        215G   341G  2.43K  1.72K  19.4M  13.7M
rpool        215G   341G  2.35K  1.83K  18.8M  14.6M
rpool        215G   341G  2.30K  1.69K  18.4M  13.6M
rpool        215G   341G  2.42K  1.76K  19.3M  14.1M
rpool        215G   341G  2.33K  1.76K  18.5M  14.1M
rpool        215G   341G  2.15K  1.62K  17.2M  13.1M
rpool        215G   341G  2.33K  1.76K  18.7M  14.1M
rpool        215G   341G  1.87K  1.56K  14.9M  41.5M
rpool        215G   341G      0  1.01K      0   120M
rpool        215G   341G     13    988   112K   100M
rpool        215G   341G      0  1.12K      0  31.2M
rpool        215G   341G    867  1.42K  6.77M  11.3M
rpool        215G   341G  2.27K  1.74K  18.2M  13.9M
rpool        215G   341G  2.39K  1.75K  19.1M  14.0M
rpool        215G   341G  2.33K  1.47K  18.7M  11.8M
rpool        215G   341G  2.32K  1.80K  18.6M  14.3M
rpool        215G   341G  1.93K  1.50K  15.4M  16.8M
rpool        215G   341G    666  1.23K  5.21M   101M
rpool        215G   341G  2.29K  1.79K  18.3M  14.3M
При том видно, что иногда просирается и перестает читать - сразу начинает лить нормально (120-150 мб/с). Также если писать в этот пул на хосте - то все ок, чтения нет, запись на всю ивановскую.

Чего он там читает??

★★

Последнее исправление: Davyd (всего исправлений: 2)

На том же zpool сделай еще один zvol и погоняй запись из линукса, смотри статистику и делай выводы, если поведение такое же, то неправильно создан zpool, если все в порядке то ищи проблему в винде.

anonymous
()
Ответ на: комментарий от anonymous

Если бы эти иопсы не были бы заняты чем-то своим...

Davyd ★★
() автор топика

винду
Чего он там читает??

Не, ну вы реально смешной, всех много лет интересует вопрос: «чего это там винда хардом не по делу шуршит». Я серьезно. Вот прямо сейчас занимаюсь попыткой слить данные с виндового харда, при попытке подключить к уже существующей она чего-то начинает там шуршать и фиг вам а не доступ к харду, какого фига она там шуршит не понятно. В итоге сливаю с линукса.

anc ★★★★★
()
Ответ на: комментарий от GAMer

Да, размер recordsize надо БЫ ставить величиной с блок данных, которыми идёт обмен с диском, но на ZOL 4k говорят тормозит...

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

Да, размер recordsize надо БЫ ставить величиной с блок данных, которыми идёт обмен с диском, но на ZOL 4k говорят тормозит...

Можно сделать его ближе к 4K; сейчас при блоке 128K имеет место быть тридцатидвухкратное раздувание объема при чтениях. Если сделать размер блока 16K, то раздувание будет только четырехкратное, что в восемь раз лучше. А если венда читает за раз больше, чем 1 блок, то в среднем оно может быть еще меньше.

anonymous
()
Ответ на: комментарий от anonymous

но ZVOL для венды придется таки создать новый с volblocksize поменьше, и скопировать в него содержимое старого, а потом старый удалить.

anonymous
()
Ответ на: комментарий от anonymous

хотя если венда уже в ZVOL'е и ты при создании не указывал нестандартный размер блока, то он уже должен быть 8K. В самом деле:

               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
rpool        216G   340G  2.26K  1.76K  18.1M  14.1M

2.26 * 8 - это приблизительно 18.1

anonymous
()

крутить volblocksize, рамы скока, отложенная запись - добавочный тормоз

axelroot
()

В QEMU кеширование writeback (при умолчательном nocache тормозило сильнее, но статы не смотрел)

Если у тебя винда на zvol, то попробуй использовать: nocache. Зачем тебе двойное кеширование? Оно ни к чему.

DALDON ★★★★★
()

Небольшой оффтоп... а ZFS умеет live migration всей системы с одного винта на другой, чтобы не приходилось отрываться от работы и выключать комп? Вот pvmove умеет.

ns_ramesses
()
Ответ на: комментарий от ns_ramesses

ZFS умеет live migration всей системы с одного винта на другой, чтобы не приходилось отрываться от работы и выключать комп? Вот pvmove умеет.

пулы зфс это как правило зеркала, замена диска в них не проблема, да и страйп можно превратить в зеркало на ходу

vxzvxz ★★★
()
Ответ на: комментарий от GAMer

Создал раздел с recordsize 8k, новую ntfs тоже 8к. Ничего не изменилось :(

Интересно, что на свежесозданный раздел первый раз запись прошла нормально (30 гигов). Удаляю файл, перезагружаю виртуалку, начинаю писать другой файл - и на тебе, начинается это странное чтение. ARC 10 гигов., свободной памяти - 15.

Davyd ★★
() автор топика
Последнее исправление: Davyd (всего исправлений: 1)
Ответ на: комментарий от DALDON

А вот с nocache заглавной проблемы не возникает. Возникает другая - виртуалка просто замирает на 3-5 секунд переодически. При большой записи. Даже часы останавливаются, а потом нагоняют упущенное. И в итоге один и тот же файл получается пишется примерно одно и тоже время, что writeback, что nocache. Только WB виртуалку не вешает.

Davyd ★★
() автор топика
Последнее исправление: Davyd (всего исправлений: 1)
Ответ на: комментарий от Davyd

recordsize

На всякий случай - volblocksize надо менять для zvol.

EvgGad_303 ★★★★★
()
Ответ на: комментарий от Davyd

В общем, я предполагаю, что имеет смысл уменьшить blocksize до 64к, посмотреть чего по оперативной памяти на сервере (посмотреть сколько ARC) - не менее 2-4 гб. для zfs должно быть в общем случае, и использовать nocache

DALDON ★★★★★
()
Ответ на: комментарий от EvgGad_303

Ты вопрос вообще понял?

Ответил он, конечно, немножко в сторону, но в принципе правильно. zpool replace можно сделать и для диска с загрузочным пулом без остановки системы. Не далее как пару дней назад проделывал это.

anonymous
()
Ответ на: комментарий от DALDON

В общем, я предполагаю, что имеет смысл уменьшить blocksize до 64к

У него уже volblocksize для ZVOL'а равен 8K - он по умолчанию такой.

anonymous
()

Интересно. Накатил свежую 7, гоняю - пока работает. Не исключено, что проблема и в видавшем виды win2008, который пережил P2V на hyper-v, а потом v2v на KVM. Пока тестирую дальше. Спасибо всем за советы!

Davyd ★★
() автор топика
Ответ на: комментарий от anonymous

Эээм, это какбэ очевидно, что рэйд умеет такое делать, иначе какой смысл, но pvmove это не о замене диска.

EvgGad_303 ★★★★★
()
Ответ на: комментарий от ns_ramesses

Ну так добавить диск и сделать зеркало, после завершения синхронизации отцепить первый диск, в чём проблема?

EvgGad_303 ★★★★★
()
Ответ на: комментарий от EvgGad_303

Ну так добавить диск и сделать зеркало, после завершения синхронизации отцепить первый диск, в чём проблема?

Слишком много ненужных действий. Можно тупо сделать 'zpool replace <poolname> <olddisk> <newdisk>' - одна команда и всего делов!

anonymous
()
Ответ на: комментарий от erzenteded

А для ZFS есть какое-нибудь приложение, которое на юниксовый mailbox пришлет письмо о том, что чек-суммы где-то перестали совпадать и винт пора перепроверять и менять?

ns_ramesses
()
Ответ на: комментарий от ns_ramesses

это лучше к нашему эстонскому вымогателю денег, я лично пользуюсь заббиксом, качество проверки оценить сложно.

erzenteded
()
Ответ на: комментарий от ns_ramesses

хотя никто не мешает сделать шаблон в заббиксе который через агент будет выполнять скрипт по проверке чек сумм и тд, и в случае большой разницы отправлять тебе смс.

erzenteded
()
Ответ на: комментарий от EvgGad_303

В общем то да. Есть какие-либо точные сведения о том, какими блоками оперирует ОС Windows, при записи или чтении? На файловом уровне?

DALDON ★★★★★
()
Ответ на: комментарий от DALDON

Обнаружил отключенный кеш на SAS дисках, что вносило ощутимую лепту в тормоза. Кеш включил. Теперь в виртуалке с кешем в режиме nocache уже можно жить. Хотя все равно рывки ощущаются, когда на сервер по rdp сидишь и тестируешь массированную запись. Заглавной проблемы в режиме Nocache не наблюдается. Результат CrystalDiskMark тут https://yadi.sk/i/BNP1PnLSqgCbh (диски 2 SAS 10K, RAID1)

По поводу writeback. Похожую проблему нашел тут https://github.com/zfsonlinux/zfs/issues/824

Реально создаем новый zvol, цепляем к винде, заполняем его почти полностью - все ровно. Стираем и начинаем писать заново - жопа с левым чтением в полный рост. Почему это происходит, пока не понял. Изменение volblocksize на это в моем случае не влияет. Чуть лучше становится с volblocksize=4K, но все равно читает. Меньше не пробовал, больше - все плохо.

Davyd ★★
() автор топика
Последнее исправление: Davyd (всего исправлений: 2)
Ответ на: комментарий от Davyd

и начинаем писать заново - жопа с левым чтением в полный рост

COW — говно! Тебе надо скопироват-при-записи 4к — читаем volblockszie, меняем 4к и записываем в новое место volblockszie

anonymous
()
Ответ на: комментарий от axelroot

нет у lvm козырей против zfs

Простой, проверенный, работает не требуя никаких ресурсов.

Молоток vs бульдозер --- фанаты бульдозера им даже гвозди забивают и другим советуют

anonymous
()
Ответ на: комментарий от anonymous

Почему же оно тогда при nocache не проявляется? Я же кроме кеширования ничего не меняю, а чтение уходит.

Поменял на тестируемом zvol logbias на throughput - практически полностью ушли заедания интерфейса на nocache. В тесте тоже стало все повеселее на записи: https://yadi.sk/i/n4Lt_80NqgJvY (класно все-таки кеш в zfs работает...).

Пожалуй данный результат для данного сервера меня уже устраивает, но если сообщество еще чего посоветует - с радостью опробую.

Davyd ★★
() автор топика
Последнее исправление: Davyd (всего исправлений: 1)
Ответ на: комментарий от Davyd

Я люблю zfs, но столкнувшись с проблемой, о которой я писал выше, я решил попробовать связку:

md1 - ssd (Intel) md2 - hdd (7200rpm) lvm cache: writeback + smq.

Затем, я тупо отформатировал всё это хозяйство в ext4, и положил туда raw образы. Плюс включил cache=none.

Затем, в Windows, результат таков: https://db.tt/14PQYzW0

Да, без zfs я не могу иметь сжатие. Но никто мне не запрещает включать сжатие внутри вирт. машин. Но зато, я думаю, что, lvm + mdadm + dm-cache, стабильный стек. Кеширование заработало сразу, без всяких костылей.

DALDON ★★★★★
()
Ответ на: комментарий от DALDON

Да, без zfs я не могу иметь сжатие.

я так понимаю, аналога zfs send -i в LVM тоже нет.

Твой результат с SSD кешем? Собственно я был мотивирован в сторону ZFS твоей же темой :) (ovirt localstorage zfs). До этого я строгал mdadm/lvm сервера и в ус не дул, но там меня производительность почти не волновала. Правда пока до 1С у меня дело пока не дошло, но из-за нее и начал zfs крутить.

Davyd ★★
() автор топика
Ответ на: комментарий от Davyd

До этого я строгал mdadm/lvm сервера и в ус не дул, но там меня производительность почти не волновала.

Я был очень приятно удивлён, но: mdadm+lvm+lvmcache (writeback+smq)+банальный ext4+raw(qcow2 - пока не пробовал, но разницы думаю не будет), дали ОЧЕНЬ приятный результат. Попадание в кеш SSD - 100% (ну вестимо пока он не переполнится).

Win2008R2+MSSQL2008+1c 8.2+Гилёв - дали мне 31-37 попугаев. Вирт машине отдавал: 3ядра (3,4 ГГц), 2ГБ ОЗУ. По количеству пользователей, Гилёв мне давал разные оценки в зависимости от изменения настроек. Максимально что выдавал: 77пользователей.

В dmesg - никаких намёков на ошибки и нету, в отличии от zfs. Zfs on linux - очень, очень крутая штука. Но, я не могу просто позволить себе допустить фейлы - с остановкой вирт. машины в продакшене...

Чем заменить сжатие: ну можно использовать сжатие NTFS в видне. Или на линукс вирт. машинах, внутри машины - ставить zfs, и монтировать её как файловую систему (т.е. без zvol).

zfs send -i в LVM

Есть! С костылями, но есть. :) Мне на форуме в своё время тут её рекомендовал эту штуку с github (блин, не сохранил ссылку). Там в общем есть набор скриптов, которые это умеют делать. Сейчас погляжу.

Из плюсов mdadm+lvm+cache+ext4, над zfs:

  • Нативно
  • Не нужно выделять памяти для ARC
  • ext4 не фрагментируется - и есть средство для дефграментации онлайн. Скажем, zfs, через пол годика работы со снепшотами - фрагментируется процентов так на 80... Против 4-6% - у ext. Но у zfs, кроме как пересоздавать том - нету особых средств для лечения.
  • Работает очень быстро и предсказуемо (пока не нашёл проблем, во всяком случае)
  • Можно уменьшать

Из минусов:

  • Не умеет сжатие (лечится файловыми системами, с оным внутри виртуалок)
  • Реализация снепшотов - плохая. (Зато нету фрагментации! Лечится тем, что можно положить на ext4 - qcow2 образы виртуалок и там снепшотить)
  • zfs send -i отсутствует... Как класс. (лечится скриптами, с github. Пока не проверял.)
  • mdadm в имплементации raid1/10 - не умеет делать scrub. Точнее делать то его умеет, но будет выдавать тучу ошибок, о якобы битых блоках. И это нормально - такая вот реализация. (лечится дисками с TLER, и регулярным скраббингом, чтобы выбивать из массива диски которые не успели отозваться за 7сек)

В общем то, всё остальное в zfs on linux - все фичи, вроде прав доступа, nfs и т.д. - в лучшем случае в Linux работают на половину, а в остальном - часть фич или не работает вовсе, или работает хреново (например, планировщик чтения, с массива, работает только в round robin и т.д.).

Это не значит, что я теперь хейтер zfs, но надо всё же взвесить все за и против... Скажем так... - Я с zfs (без zvol), в продакшене, живу больше года. На zvol вот увидел проблему. Фатальную проблему. Так что надо всё ещё раз взвесить. Ибо в случае факапа, я буду писать сюда из горящего танка и срать кирпичами...

DALDON ★★★★★
()
Последнее исправление: DALDON (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.