to post messages and comments.

← All posts tagged zfs

Завершил перенос всего и вся. Думал сделаю дня за два, получилось чуть больше двух недель.
Как же хорошо, что я когда-то давно разделил стор и апликухи. Даже самба, раздающая этот стор в отдельной виртуалке, что говорить о всяких торрентах.
Сейчас бы заколебался все это обновлять. А так переподсунул по старым путям nfs и все взлетело.

А кто умеет zfs по nfs?
У меня он сначала ругался, то fsid= не выставлен, теперь говорит что /xxx/aaa and /xxx/bbb have same filehandle for 192.168.0.0/16 using first.
И, короче, что не монтируй, получаешь содержимое только первого xxx/aaa.

Теперь вопрос стоял, какую выбрать компрессию для домашней файлопомойки.
Сравнил экстремальные варианты: недавно появившийся в zfs lz4 и gzip-9.
Lz4 в интернете поют дифирамбы, очень быстрый, хороший, жмет только то что может жать, скорость чтения и записи заметно ускоряется и т.п.
В нашей работе с виртуалками у меня очень хорошие показатели, примерно 1:2 сжатие lz4 на рабочих сторах, и примерно 1:6 сжатие gzip-5 на баккапе.

Другое дело с файлопомойкой, в большинстве своем забитой несжимаемым контентом — музыка, фото, видео, кое-какой софт.
Записав первые 2Tb инфы я получил 2% выигрыша на lz4. Честно говоря, я ожидал хотя бы 10%. Но, впрочем, тоже плюс.
А т.к. большинство инфы записывается редко, а читается то же не сказать что бы часто — решил попробовать максимум — gzip-9.
Скопировал еще раз и получил.. те же 2%! (я проверял. если писать легко-компрессируемые файлы, то все работает, разница lz4/gzip видна)
То есть на моих данных смысла в gzip нет вообще никакого. Плюс такая картина по скорости чтения/записи:
на lvm — 222/128 mb/s
на zfs с lz4 — 238/110 mb/s,
на zfs с gzip-9 — 186/10 mb/s
Ну, собственно, в данном случае gzip никак не подходит, максимальная компрессия не дает выигрыша (или дает менее 1%), но при этом скорость записи падает до 10 mb/s, что за пределами комфорта.

Вот это вообще выносит мозг тем, кто классические рейды хорошо знает:
12x 2TB:
raid10, 6x2pairs 10 terabytes ( w=569MB/s , rw=230MB/s , r=687MB/s )
raid50, 2x6raid5 17 terabytes ( w=494MB/s , rw=252MB/s , r=616MB/s )
raid50, 4x3raid5 14 terabytes ( w=459MB/s , rw=245MB/s , r=623MB/s )
24x 2TB:
raid10, 12x2pairs 20 terabytes ( w=511MB/s , rw=214MB/s , r=673MB/s )
raid50, 2x12raid5 38 terabytes ( w=492MB/s , rw=276MB/s , r=971MB/s )
raid50, 8x3raid5 28 terabytes ( w=463MB/s , rw=245MB/s , r=870MB/s )
Пятый рейд практически не отличается по скорости от 10-ки! Особенно скорость записи. Неужели они действительно победили write drawback пятого?
Я, кстати, у себя подобное наблюдал, что в raidz1 у меня не было большой разницы с 10, но точных измерений провести не успел.

Очень полезные бенчмарки zfs в различных конфигурациях дисков и рейдов calomel.org
На многодисковых конфигах видно, что не смотря на заявления, что скорость растет только в страйпах, на raidz(1,2,3) она то же неплохо растет.
Так что можно увеличивать трансфер добавляя дисков, а не увеличивая кол-во vdev.

Получилось на zfs провести фокус с созданием raid5 массива только на 2 дисках из трех, как я привык это делать на mdraid.
Делается фейковый фаил, который занимает пару килобайт, но репортит полный размер:
# dd if=/dev/zero of=/tmp/disk.img bs=1 seek=4T count=1
создаем пул:
# zpool create poolA raidz1 /dev/sda /dev/sdb /tmp/disk.img
и фейк сразу выводится в оффлайн, что бы туда ничего не начало писаться:
# zpool offline poolA /tmp/disk.img
Все, имеем пул в дегрейде из 2 дисков, можно залить данные, высвободить еще один диск и добавить к пулу, после ресильвера будет ок.

Вечером таки закончился ребилд, так что я вынул пару винтов с бедами и прокатился до юлмарта.
Пессимистично получилось, старой базы серийников у них нет в нерабочее время, но гарантия на такие винты должна быть около 2 лет, по словам товарища на приемке.
Если это действительно так (поищу сегодня чек), то я попал на два 2tb винта.
Посмотрел за одно ценник текущий — 6.5-7 тыр за винт! Это 13-14 тысяч. Помнится покупал я их чуть ли не по 2.5 тыр.

Так, 10 часов на dd_rescue на 2tb, 10 часов на ребилд mdadm 2tb, (тут место для еще одной итерации, если еще один диск взбрыкнет), ~30 часов на копирование 6Tb на временный zfs, ~30 часов на копирование обратно на переделанный zfs.
Итого — неделя и золотой ключик у нас в кармане.

Создал пул из 3 дисков, поставил копироваться с lvm на zfs.
Вижу четко, как zfs упирается в скорость одного диска. Один постоянно висит с io 200-500, трансфер 40-100mb/s, остальные два раз в 4 секунды пишут 700 io 60-100mb/s и тишина.
Диски хорошие, новые. Контроллер sas один, отдельный канал до каждого диска.
Может еще как подтюнить стоит?

О, я нашел, в чем было дело.
Если сделать
zfs set sync=disabled %poolname%
то "dd if=/zero of=/dev/sdb bs=1M" в виртуалке превращается из 3-5mb/s в нормальные 500-600mb/s.
Но почему? dd без указания o_direct должен лить нормальный асинком, в отличии от тестов fio, который специально запускаются direct=1.

И совсем другое дело, если делать не zvol (девайс) а просто писать на zfs.
Создал файлик, пишу туда dd, скорость стабильная 120-150 мб.с. Немного плавает, то же, но не падает ниже 120.
Уже записал 100гб, за десяток минут, а в прошлый раз больше 50 гб за час не накапало.
Значит придется делать тесты на файлике, создавая его каждый раз.