riv
в гипервизоре в свойствах диска vm
Ivan
всегда пользую cache=none
Ivan
сейчас погоняю fio, посмотрю что к чему.
riv
Хм. просадка в 0 появлятся ведь когда zfs сбрасывает данные на диск, если к этому моменту память на буфер кончилась.
riv
А сколько vdev в пуле?
Ivan
пул состоит из raid10 на 34 диска + special + log
Ivan
памяти свободной гигов 130
riv
Значит просадка - это поведение самой винды. Она быстро сбрасывает данные на диск (а он их быстро поглащает), а потом начинает читать и в како-то момент винда это интерпретирует как скорость 0
riv
Вообще я такое тоже наблюдаю, даже на ssd-пулах (кроме optane ssd, там не замечал) но я специально с этим не боролся. А какой тип диска в виртуальных машинах? virtio scsi?
Ivan
тип диска virtioscsi с discard
riv
Я всегда думал, что это из-за writeback, я его использую (уже давно и ничего не упало), и по этому не боролся с этой виртуальной просадкой, т.к. считал, что без writeback средняя производительность будет в любом случае меньше, т.к. очередь к диску не будет заполняться, а без очереди, по идее, и iops-ов диски меньше выдают.
riv
По моему, 10-ка и на реальном железе ведёт себя так-же.
Ivan
Я всегда думал, что это из-за writeback, я его использую (уже давно и ничего не упало), и по этому не боролся с этой виртуальной просадкой, т.к. считал, что без writeback средняя производительность будет в любом случае меньше, т.к. очередь к диску не будет заполняться, а без очереди, по идее, и iops-ов диски меньше выдают.
на обычном и тонком lvm я наблюдал что в виндовых машинах с writeback неприлично вырастает latency, поэтому я отказался от использования writeback везде.
riv
ПК с мех диском нет под рукой, но даже на SSD видны эти "волны", хоть и не до 0 в данном случае.
Ivan
riv
riv
на обычном и тонком lvm я наблюдал что в виндовых машинах с writeback неприлично вырастает latency, поэтому я отказался от использования writeback везде.
в zfs все сильно не так как в lvm. Приведу пример. Была система виртуализации с дисковой подсистемой на на 8-ми 15k RPM-дисках. И там был mdadm+lvm, снепшоты делали обычные, но только на время бекапа, потом сразу удаляли. Система при многопоточной нагрузке стала тупить, причем очень сильно. Тогда была ещё 6-я версия zfsonlinux и просто смена lvm на zfs сняла все проблемы производительности. Так я и заинтересовался zfs.
Если включить writeback, то данные будут мгновенно передаваться в пул и задержки не будут. Writeback в случае с zfs означает, что виртуалка получит сигнал об окончании записи, до того как данные покинут writeback-кэш zfs. Но сама zfs загрузит очереди дисков по возможности максимально. При заполненном буфере многие диски могут делать больше одной опреации ввода-вывода за оборот диска и кол-во iops могут вырастать в разы относительно незаполненной очереди.
А может быть попробовать включить writeback в порядке эксперимента?
Ivan
riv
Неее, именно writeback должен переключить на соотвествующем vdev значение sync в disabled - в этом смысл.
riv
Это нужно проверить. Вдруг баг в интерфейсе
riv
при этом значение sync файловой системы в которой лежат vdev не должно на них наследоваться
Fedor
Кстати, синк олвейс это же каждая операция записи становится по поведению с точки зрения пула синхронной?
Fedor
Если хороший слог поставить, можно отказаться от рисков врайтбека при сохранении надёжности и приемлемой отзывчивости. Или путаю? @gmelikov
riv
С sync=disablrd тоже безопасное сочетание с той лишь оговоркой, что безопасное в данном случае имеется в виду, что базы данных не будут разрушены. Но если вы будите записывать большой поток транзакций, то например система может успеть записать 1000 транзакций и сообщить об этом наружу (другой системе), а после неожиданного отключения питания с потерей writeback-буфера, с базой все будет нормально, но может оказаться, что зафиксировано только 948-транзакций, а данные за последнюю секунду откатились. Время принудительного сброса writeback-буфера на диск настраивается, чем больше интервал, тем больше производительность, но и возможный откат увеличивается.
Я считаю, что если у вас файловое хранилище профилей пользователе, например, то writeback не только безопасен но и рекомендуется, чтобы снизить нагрузку и оставить запас для других операций по производительности. В случай с одиночной 1с, взаимодействующей с человеком - тоже 1-2 сек активности ничего не мешает. Но если это кластер, нужно уточнить как он относится или протестировать.
Fedor
Насколько слышал, во время сброса грязных страниц пул не обрабатывает другие операции.
riv
Fedor
Fedor
Надо будет сесть смоделировать это вот все.
Fedor
Fedor
Физический оборудования или питания
riv
И ещё. Если вы пишите линейно, то это при sync=enable не попадает в slog, но это и не страшно, т.к. переключение на slog не даст выигрыша, в линейной скорости массив и дисков часто не уступает, а бывает и превосходит при долговременной нагрузке SSD
Сергей
riv
riv
Ivan
https://bsdio.com/fio/
а что с fio случилось ? он просто ни на что не реагирует, хоть fio ekjheuheirufherigfhe ему пиши
riv
Ivan
что-то с новыми билдами не так или пользоваться разучился ?
Сергей
то что вы описываете через sync=disabled достигается тем, что KVM/QEMU "забывает" про fsync и пишет всё по-сути асинхронно
George
Writeback это не про синхронность, а про o_direct же
Сергей
Writeback это не про синхронность, а про o_direct же
про оба:
cache=writeback
host do read/write cache
guest disk cache mode is writeback
Warn : you can loose datas in case of a powerfailure
you need to use barrier option in your linux guest fstab if kernel < 2.6.37 to avoid fs corruption in case of powerfailure.
This mode causes qemu-kvm to interact with the disk image file or block device with neither O_DSYNC nor O_DIRECT semantics,
so the host page cache is used and writes are reported to the guest as completed when placed in the host page cache,
and the normal page cache management will handle commitment to the storage device.
Additionally, the guest's virtual storage adapter is informed of the writeback cache,
so the guest would be expected to send down flush commands as needed to manage data integrity.
Analogous to a raid controller with RAM cache.
George
А, тю, writethrough без o_direct
riv
я думаю что это учтено и там не будет ошибок. Просто на zvol с опцией writeback не будет операций требующих синхронную запись. Поэтому эффект будет достигнут, но без необходимости менять свойства zvol
Вообще к тому в каком порядке эти операции применяются надо внимательно относится. Приведу другой пример: тестировал ceph vs sheepdog на слабых серверах, еще с ddr2. На гигабитной сети производительность у ceph была так себе а sheepdog получше работало. Разница была в том как они были настроены: ceph отдавал информацию о завершении записи после того как получал сигнал от всех osd что данные записаны. А sheepdog можно настроить так, что данные будут считаться записаны после того как они оказались во writeback буфуре удаленных нод, но не на диске. Т.к. единовременное отключение целого датацентра представляется маловероятным, это, на мой взгляд не плохой компромисс. Жаль что sheepdog выпилили из qemu недавно. И вообще, на фоне многочисленных потерь данных в ceph мне на понятно почему никто не пробует вернутся к sheepdog, он не показался мне настолько плохим.
ЗЫ: Я в фоновом режиме читаю переписку в русскоязычном канале ceph. Читаю и радуюсь что отказался от этого "счастья" в пользу zfs. Как же хорошо что мне эти муки с рассыповшимися пулами не касаются, как же хорошо спроектирована zfs 😊
Сергей
А, тю, writethrough без o_direct
а разве o_direct уже поддерживается? вроде его в 2.0 собирались добавить или я что-то пропустил?
https://github.com/openzfs/zfs/pull/10018
George
Сергей
а directsync ставит и O_DIRECT + O_DSYNC
riv
я понял. в части qemu/kvm - O_DIRECT используется при режиме cache=none
Ну а если вернуться к вопросу с которого началась дискусия. Может быть вы знаете, чем вызвана просадка в 0 при копировании файла проводником в вирутальной машине в пределах одного диска (да и разных по помему тоже)? И как этого избежать и чем придётся пожертвовать? Пользователи действительного говорят о подвисаниях в таком случае, имея в виду подвисание копирования.
riv
Ivan
riv
не понимаю о чем конкретно речь )
zfs объективно сложен. Нужно изучить 300-страничное руководство по администрированию, кроме того, вырастает пиковая производительность, но сырая средняя все-же падает, без slog и special. Ещё нужна опративка в больших количествах, и во многих сценариях возникает двойное кэширование.
riv
Сергей
Ivan
Ivan
кстати, log имеет смысл в зеркале держать ?
riv
Кэшироаться тоже будет только случайный io причем не так как linux это делает, запихивая в кэшь все подряд, вымывая часто используемые данные, а только после неоднократного чтения с диска и случайного io.
Сергей
@simubishi, а вы попробуйте отключить buffer flushing в видне и проверить ещё раз копирование для разных параметров cache= для диска ВМ
Сергей
Ivan
Сергей
4г
есть возможность отключить buffer flushing на винде (скриншот выше, либо погуглить) и проверить ещё раз?
Ivan
сейчас сделаю. а тестировать со всеми видами кэширования вм диска ?
riv
Так как меня это тоже волнует я сейчас на своем пуле протестирую.
Сергей
Сергей
если возможно - выложить сюда результаты, у меня +2МСК, и я с дороги. Прошу понять и простить) - хочу немного поспать. Утром посмотрю
Ivan
раз уж мы наблюдлаем за поведением виндового проводника, дам текстовый комментарий с результатами.
Ivan
8 гигов выдал
riv
выдам тогда 4, для разнообразия.