LINUX.ORG.RU
ФорумAdmin

Ох BTRFS, ну сколько можно

 , , , ,


0

6

Сколько лет прошло, думал BTRFS довели до ума, решил использовать её в продакешене, но прошло два дня и …

2 недели тестировал все возможные способы репликации виртуальных машин с одного места в другое, без простоя. Протестировал кучу разных способов и остановился на BTRFS, как на единстрвенной COW которая не ест SSD. Кстати, фанатам ZFS ничего не скажу, живите спокойно в блаженном неведении :)

Что я проверил:

  1. ZFS, мучал около недели, как быстродействием так и оверхедом на диск не доволен, ещё RAM жрёт, а без RAM совсем печально всё. Мне не подходит, так как вся RAM отдаётся виртуалкам, хосту с ZFS ничего не останется, почти.
  2. LVM, да, у неё есть возможность как у ZFS сделать онлайн инкрементальную реприкацию, почти как в zfs send/recieve, но об этом мало известно. Отказался из-за чудовищно низкой скорости при наличи снапшотов, которые необходимы для репликации, в остальном терпимо.
  3. LVM thin, очень похожа на ZFS, те-же недостатки, мало тестировал
  4. BTRFS - почти не ест SSD, огромные проблемы с фрагмантацией, но я нашел способ их решить, поэтому остановился на ней

Дано:

  1. сервер с qemu/libvirt, Debian bookworm
  2. одна виртуалка, с ext4 mysql innodb блекджеком и шл ну в общем сайт PHP, данных всего 100Гб, довольно активная - 20ГБ записей на диск в сутки, диск, 70% из них блоками <=4k, 20% 8k, и так далее. Как видите много random write. RAW диск виртуалки на разделе BTRFS.

Перенёс всё со старого хоста ext4 на новую виртуалочку с RAW на btrfs разделе. Всё работало полтора дня и началось:

  1. начали биться индексы у таблиц
  2. данные в таблицах начали исчезать Долго не терпел, сразу всё откатил назад, у юзеров стресс, пьют валериану.

Не ожидал такого. Запустил btrfs scrub - ошибок не обнаружено. Да как так то? BTRFS raid1, значит ошибка внутри BTRFS или в интерфейсе между KVM и BTRFS.

Вот такой вот опыт.

А я уже и дефрагментатор для неё новый написал, офигенный, который не жрёт ни диск ни SSD, но видимо не судьба.

Игрался со снапшотами создавал, удалял, создавал, удалял, в общем тестировал дефрагментатор на снапшотах, основной раздел с виртуалкой не трогал, возможно это повлияло, хотя значения не имеет, сломать основной раздел я не мог никак, значит где-то баг в BTRFS.

Что теперь делать даже не знаю, рисковать с BTRFS больше не хочу, а других подходящих COW c онлайн репликацией снапшотами не существует …



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

тестировал дефрагментатор на снапшотах

и что могло бы пойти не так…

SSD

фрагментация

CoW-файлухи фрагментируются по определению, с SSD на фрагментацию можно наплевать

RAW диск виртуалки на разделе BTRFS

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

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

Мне COW нужна исключительно для репликации, отключать COW нельзя :) Дефрагментатор основан на стандартном btrfs fi defragment, так что если я что-то и сломал, то с его помощью.

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

Это видимо устаревшие или неверные данные, у меня другая информация, а даже софт написал с помощью которого измерил write amplification для всех описанных способов. А также для LVM, ext4, xfs, в общем про это я знаю всё :)

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

Да, я тестировал также для всех recordsize (ZFS) начиная c 4к и выше и для всех блоков fio начиная с 4к и выше. Так как у меня 70% это 4к блоки random write у виртуалки (а чтобы это измерить мною был написан ещё один софт лол), я всё тестировал в этом контексте.

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

Опять в заблуждение вводишь, аноним. Вот по твоей же ссылке:

On a NOCOW file the first write to a fileblock (4096 bytes) after a snapshot must still be COW, because the snapshot locks the old version in place, and now the fileblock has changed, so it MUST be written elsewhere despite the NOCOW in ordered to keep the snapshot as it was. However, the file does retain the NOCOW attribute and additional writes to the same fileblock will be in-place… until the next snapshot of course.

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

Да нет, это ОЧЕНЬ частый сценарий у всякого говнософта на электроне и у firefox. Fsync опционален.

Вот тебе пример такого поведения, которое реально убило диски: https://bgr.com/tech/spotify-has-been-quietly-killing-your-ssds-life-for-months/

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

я имел в виду: включится при создании снапшота

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

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

Да, с фрагментацией на SSD жить можно, тесты показали, что скорость линейного чтения на фрагментированной BTRFS падает всего в 2 раза, терпимо. Но у меня другой случай - я её хотел реплицировать на другой хост, а там HDD. Так вот при HA на этот хост с HDD, сайт просто не поднимется, так как не сможет достаточно быстро прочитат фрагментированные таблицы mysql. С фрагментированной BTRFS на HDD неюзабелен, это черепаха, поэтому и работал над дефрагментатором.

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

Это последний вариант, самый геморойный в моём случае. Я хотел всё упростить, реплицируя только диск и не возиться с mysql master-slave, gluster, и другими тараканами.

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

Да, COW значительно, на порядки ускоряет случайную запись, превращая её в линейную, но за это в результате нужно платить скоростью линейного чтения…

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

Значит почитал я эту статью https://ar5iv.labs.arxiv.org/html/1707.08514 там действительно всё правильно указано с одним большим НО, о котором говорится в статье. Write amplification из таблички в начале статьи показано при записи одного 4кб блока и сразу sync. То есть они измерили то, что в реальности почти не бывает, чисто академический интерес. А на графике ниже показано, что при записи большего количества данных, write amplification падает до приемлемых значений, в том числе и для BTRFS.

Я измерял похожим образом но для записей по 100*4кб блоков (8кб и +), затем sync, так ближе к реальности. В этой кстати это не измеряли. Я перерыл весь интернет прежде чем начать тесты, думал это уже кто-то проверил, но нет. Вот думаю может статью черкануть, лень только, да и обескуражен неудачей с BTRFS.

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

Редко какая БД пишет 4к а потом sync, разве только в финансах где это очень важно, обычно все включают оптимизацию БД при которой изменения пишутся вместе с журналом каждые 5 секунд, а это тысячи 4к блоков…

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

Также замечу, что есть огромная разница в значении write amplification при наличии и отсутствии снапшота. А также при наличии или отсутствии свободной памяти (в основном актуально для ZFS) Результаты отличаются радикально. Таких тестов я вообще нигде не видел, я первопроходец :)

Nohack
() автор топика

Убери виртуалку, перепроверь. Несколько нагруженных БД на btrfs живут уже много лет без единого разрыва (c).

А я уже и дефрагментатор для неё новый написал, офигенный, который не жрёт ни диск ни SSD, но видимо не судьба.

Код в студию.

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

Бэ те ер эф эээээсссс ТУДУДУДУДУДУДУ
У ю зе ров стрееeеесс ДЫДЫДЫДЫ
Предложи им БУЭЭЭЭ РДРДРДЫЩ
Крысиный ЯЯЯЯЯЯЯЯДДД (соло)

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