LINUX.ORG.RU

Проскакивала новсть, что btrfs уже стабильна. Я в этом не уверен.

 


0

2

Ядро 3.17.1 x86_64. Монтируем btrfs с опцией compress-force=lzo и пишем в 2-3 потока всего лишь на скорости гигабитной сетки. Через 10-30 минут (как повезёт), система наглухо виснет вот с таким выхлопом:


Call Trace:
Nov 3 03:21:49 DRIVE kernel: [ 859.630880] [<ffffffff817a3e05>] _raw_write_lock+0x25/0x30
Nov 3 03:21:49 DRIVE kernel: [ 859.630888] [<ffffffffc01be3a9>] btrfs_tree_lock+0xc9/0x1d0 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630891] [<ffffffff810b3eb0>] ? add_wait_queue+0x60/0x60
Nov 3 03:21:49 DRIVE kernel: [ 859.630896] [<ffffffffc015b92b>] btrfs_lock_root_node+0x3b/0x50 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630901] [<ffffffffc0160dd7>] btrfs_search_slot+0x787/0x880 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630907] [<ffffffffc0178048>] btrfs_lookup_file_extent+0x38/0x40 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630914] [<ffffffffc01983f1>] __btrfs_drop_extents+0x151/0xdf0 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630915] [<ffffffff8109da1c>] ? ttwu_do_wakeup+0x2c/0x100
Nov 3 03:21:49 DRIVE kernel: [ 859.630917] [<ffffffff811cd773>] ? kmem_cache_alloc+0x1b3/0x1f0
Nov 3 03:21:49 DRIVE kernel: [ 859.630922] [<ffffffffc015b3ba>] ? btrfs_alloc_path+0x1a/0x20 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630926] [<ffffffffc015b3ba>] ? btrfs_alloc_path+0x1a/0x20 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630932] [<ffffffffc018867b>] insert_reserved_file_extent.constprop.64+0xab/0x310 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630938] [<ffffffffc0185880>] ? start_transaction.part.35+0x80/0x530 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630944] [<ffffffffc018ee35>] btrfs_finish_ordered_io+0x475/0x580 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630951] [<ffffffffc01cd6d1>] ? end_compressed_bio_write+0x31/0xf0 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630957] [<ffffffffc018ef55>] finish_ordered_fn+0x15/0x20 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630964] [<ffffffffc01b49ae>] normal_work_helper+0x7e/0x1b0 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630971] [<ffffffffc01b4c52>] btrfs_endio_write_helper+0x12/0x20 [btrfs]
Nov 3 03:21:49 DRIVE kernel: [ 859.630972] [<ffffffff8108ce2e>] process_one_work+0x14e/0x460
Nov 3 03:21:49 DRIVE kernel: [ 859.630973] [<ffffffff8108d7ab>] worker_thread+0x11b/0x3f0
Nov 3 03:21:49 DRIVE kernel: [ 859.630975] [<ffffffff8108d690>] ? create_worker+0x1e0/0x1e0
Nov 3 03:21:49 DRIVE kernel: [ 859.630976] [<ffffffff810932b9>] kthread+0xc9/0xe0
Nov 3 03:21:49 DRIVE kernel: [ 859.630977] [<ffffffff810931f0>] ? flush_kthread_worker+0x90/0x90
Nov 3 03:21:49 DRIVE kernel: [ 859.630978] [<ffffffff817a46fc>] ret_from_fork+0x7c/0xb0
Nov 3 03:21:49 DRIVE kernel: [ 859.630979] [<ffffffff810931f0>] ? flush_kthread_worker+0x90/0x90
Nov 3 03:21:49 DRIVE kernel: [ 859.630980] Code: 90 8b 0a 84 c9 66 90 75 f6 89 ce 89 c8 83 ce 01 f0 0f b1 32 39 c8 75 e7 b9 ff 00 00 00 eb 0a 0f 1f 84 00 00 00 00 00 f3 90 8b 02 <83> f8 01 75 f7 f0 0f b1 0a 83
f8 01 75 ee eb b3 0f 1f 40 00 8b


Это просто сама стабильность.

★★★★★

Ответ на: комментарий от pedobear

Это слишком ресурсоёмко, нафиг надо.

Голословное заявление.

Не надо - не включай, никто с пистолетом у головы не заставляет. Включил и жрет слишком много - выключи, никто не заставляет продолжать жрать кактус, и новые блоки не будут сжиматься. Старые сжатые останутся сжатыми до тех пор, пока не перезапишут.

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

Это костыль. Анонимус выше более подробно разъяснил, что от размера раздела проблема не зависит. Дерево, которое используется в btrfs, не пригодно для хранения айтемов переменного размера. Поэтому любое количество костылей вроде «а ограничим-ка мы максимальный размер айтема» не способно полностью исключить описанный Шишкиным вариант дегенерации файловой системы.

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

Или алгоритм сжатия поменяй на менее ресурсоемкий. А то некоторые включат gzip-9 и ожидают, что все будет так же быстро и жрать столько же CPU, как и с lzjb.

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

Дерево, которое используется в btrfs, не пригодно для хранения айтемов переменного размера.

Как эту проблему решили в zfs? Блоки переменного размера?

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

Судя по вики, в zfs эту проблему «решили» неиспользованием B-деревьев (равно как и остальных деревьев: там хэш-таблицы).

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

Вот оно как, я ошибочно полагал, что во всех COW FS один и тот же матан.

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

Судя по вики, в zfs эту проблему «решили» неиспользованием B-деревьев (равно как и остальных деревьев: там хэш-таблицы).

А поподробнее - где именно там хэш-таблицы?

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

если что, процитированное тобой было в защиту ZFS, но это, безусловно, неважно, тебе же лишь бы поспорить.

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

Как эту проблему решили в zfs? Блоки переменного размера?

Там обычное дерево блоков фиксированного размера с блоками косвенной адресации. Пока дерево состоит из одного блока - размер его может меняться, как только блоков становится больше, чем один - размер блока фиксируется. Это позволяет хранить файлы, которые по размеру меньше recordsize в виде одного блока подходящего размера.

anonymous
()

Проскакивала новсть, что btrfs с нестабильной функциональностью уже стабильна. Я в этом не уверен.

Resolved Fixed :)

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

Они используются для хранения содержимого директорий.

Без этого уточнения твое изначальное утверждение некорректно.

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

если что, процитированное тобой было в защиту ZFS, но это, безусловно, неважно, тебе же лишь бы поспорить.

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

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

шататная функция

А получилось тонко :)

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

Ок, спасибо за уточнение. (Я там отметил, что сужу исключительно по вики.)

Кстати, а где там используются деревья?

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

с одной стороны соглашаешся, что дизайн zfs хорош

это ты сам выдумал, я такого не говорил

с другой стороны утверждаешь, что шататная функция rollback сделана для идиотов

не для идиотов, а по-идиотски

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

Это позволяет хранить файлы, которые по размеру меньше recordsize в виде одного блока подходящего размера.

Хорошее решение. iZEN залогинься наконец )

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

Это костыль

Это детский лепет. Костылём при желании можно назвать что угодно.

от размера раздела проблема не зависит

Никакой проблемы нет. Есть непонимание, продиктованное желанием, чтобы в Btrfs было «всё как у людей».

Дерево, которое используется в btrfs, не пригодно для хранения айтемов переменного размера

Даже если так - можно задать ограничение.

Поэтому любое количество костылей вроде «а ограничим-ка мы максимальный размер айтема» не способно полностью исключить описанный Шишкиным вариант дегенерации файловой системы.

Опять бестолковое блаблабла без пруфов. Короче, идите гуляйте на пару с Шишкиным и вашим детским лепетом. Я уже показал, что Btrfs что с max_inline, что без него ведёт себя совершенно предсказуемо.

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

Ща я запилю наглядное сравнение. Промежуточный вердикт таков: 16-MiB раздел на btrfs способен вместить в себя 20336 пустых файлов, а аналогичного размера раздел на reiser4 — 100263 пустых файла.

И вот только не надо тут кричать, что, мол, синтетический тест: это наглядная демонстрация длины МПХэффективности хранения метаданных :)

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

Через некоторое время. Тут один забавный баг в r4 отловился — надо посмотреть, это следствие моих допиливаний или нет.

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

На мой взгляд, всё норм.

Вот только очевидно, что 1000000 файлов по 2048 байт на двухгиговый раздел с btrfs не влезет, ибо ты создал около 720 тысяч файлов и уже начал испытывать проблемы со свободным местом, ибо его стало мало и оно стало очень фрагментированным (поэтому то твой старичок начал тарахтеть). Для еще 280 тысяч файлов тебе потребовалось бы еще около 550M только для данных, что уже превосходит размеры раздела, и это мы еще не учли метаданные для недостающих файлов.

А так все норм :)

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

Неет, в том-то и дело. Каждая из этих ФС предположительно умеет tail packing. Вот мы и проверяем, насколько хорошо они это умеют.

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

Неет, в том-то и дело. Каждая из этих ФС предположительно умеет tail packing. Вот мы и проверяем, насколько хорошо они это умеют.

Какой tail packing если ты ведешь речь о пустых файлах?

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

Как будто в случае пустого файла нечего паковать в дерево (или не паковать, если ФС тупая).

Паковать-то может и есть что, только какое это отношение имеет к хвосту, которого нет?

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

Ок, я не совсем корректно выразился. Мы рассматриваем ФС, которые хранят метаданные (включая хвосты) в дереве, и пытаемся выяснить, какая из ФС делает это эффективнее.

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

Сделал похожий эксперимент на ZFS, только включил сжатие:

<code> # mkfile -n 2g /var/tmp/pool # # zpool create -O atime=off -O compress=lzjb pool /var/tmp/pool # # for i in $(seq 1000000); do dd if=/dev/zero of=/pool/file_$i bs=2048 count=1 &>/dev/null; done # # zpool list pool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT pool 1.98G 183M 1.81G 8% 1.00x ONLINE - # zfs list pool NAME USED AVAIL REFER MOUNTPOINT pool 182M 1.77G 181M /pool # # zpool scrub pool # # mdb -k

ffffc10012e5c000::spa -v

ADDR STATE NAME ffffc10012e5c000 ACTIVE pool ADDR STATE AUX DESCRIPTION ffffc10012bd0800 HEALTHY NONE root ffffc10012b64800 HEALTHY NONE /var/tmp/pool


ffffc10012e5c000::zfs_blkstats

Dittoed blocks on same vdev: 39963

Blocks LSIZE PSIZE ASIZE avg comp %Total Type 1 512 512 1.50K 1.50K 1.00 0.00 object directory 1 512 512 1.50K 1.50K 1.00 0.00 object array 1 16K 1.50K 4.50K 4.50K 10.66 0.00 packed nvlist 151 856K 365K 1.06M 7.25K 2.34 0.58 SPA space map 30.7K 493M 47.2M 94.6M 3.07K 10.41 51.86 DMU dnode 2 4K 1K 2K 1K 4.00 0.00 DMU objset 1 512 512 1.50K 1.50K 1.00 0.00 DSL directory child map 2 1K 1K 3.00K 1.50K 1.00 0.00 DSL dataset snap map 4 2K 2K 6.00K 1.50K 1.00 0.00 DSL props 8.07K 129M 43.3M 86.6M 10.7K 2.97 47.52 ZFS directory 1 1K 512 1K 1K 2.00 0.00 ZFS master node 1 512 512 1K 1K 1.00 0.00 ZFS delete queue 1 128K 5.00K 15.0K 15.0K 25.60 0.00 SPA history 1 512 512 1.50K 1.50K 1.00 0.00 DSL dataset next clones 4 2K 2K 4K 1K 1.00 0.00 ZFS user/group used 1 512 512 1K 1K 1.00 0.00 SA master node 1 1.50K 512 1K 1K 3.00 0.00 SA attr registration 2 32K 3.50K 7.00K 3.50K 9.14 0.00 SA attr layouts 3 1.50K 1.50K 4.50K 1.50K 1.00 0.00 DSL deadlist map 1 512 512 1.50K 1.50K 1.00 0.00 DSL dir clones 39.0K 623M 91.0M 182M 4.67K 6.84 100.0 Total


</code>

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

Сделал похожий эксперимент на ZFS, только включил сжатие:

# mkfile -n 2g /var/tmp/pool
#
# zpool create -O atime=off -O compress=lzjb pool /var/tmp/pool
#
# for i in $(seq 1000000); do dd if=/dev/zero of=/pool/file_$i bs=2048 count=1 &>/dev/null; done
#
# zpool list pool
NAME   SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
pool  1.98G   183M  1.81G   8%  1.00x  ONLINE  -
# zfs list pool
NAME  USED  AVAIL  REFER  MOUNTPOINT
pool  182M  1.77G   181M  /pool
#
# zpool scrub pool
#
# mdb -k
> ffffc10012e5c000::spa -v
ADDR                 STATE NAME
ffffc10012e5c000    ACTIVE pool
    ADDR             STATE     AUX          DESCRIPTION
    ffffc10012bd0800 HEALTHY   NONE         root
    ffffc10012b64800 HEALTHY   NONE           /var/tmp/pool
>
> ffffc10012e5c000::zfs_blkstats
Dittoed blocks on same vdev: 39963

Blocks  LSIZE   PSIZE   ASIZE     avg    comp   %Total  Type
     1    512     512   1.50K   1.50K    1.00     0.00  object directory
     1    512     512   1.50K   1.50K    1.00     0.00  object array
     1    16K   1.50K   4.50K   4.50K   10.66     0.00  packed nvlist
   151   856K    365K   1.06M   7.25K    2.34     0.58  SPA space map
 30.7K   493M   47.2M   94.6M   3.07K   10.41    51.86  DMU dnode
     2     4K      1K      2K      1K    4.00     0.00  DMU objset
     1    512     512   1.50K   1.50K    1.00     0.00  DSL directory child map
     2     1K      1K   3.00K   1.50K    1.00     0.00  DSL dataset snap map
     4     2K      2K   6.00K   1.50K    1.00     0.00  DSL props
 8.07K   129M   43.3M   86.6M   10.7K    2.97    47.52  ZFS directory
     1     1K     512      1K      1K    2.00     0.00  ZFS master node
     1    512     512      1K      1K    1.00     0.00  ZFS delete queue
     1   128K   5.00K   15.0K   15.0K   25.60     0.00  SPA history
     1    512     512   1.50K   1.50K    1.00     0.00  DSL dataset next clones
     4     2K      2K      4K      1K    1.00     0.00  ZFS user/group used
     1    512     512      1K      1K    1.00     0.00  SA master node
     1  1.50K     512      1K      1K    3.00     0.00  SA attr registration
     2    32K   3.50K   7.00K   3.50K    9.14     0.00  SA attr layouts
     3  1.50K   1.50K   4.50K   1.50K    1.00     0.00  DSL deadlist map
     1    512     512   1.50K   1.50K    1.00     0.00  DSL dir clones
 39.0K   623M   91.0M    182M   4.67K    6.84    100.0  Total
>

Что можно сказать:

  • потребовалось 182M для метаданных о миллионе файлов вместе с метаданными каталога, в котором они находятся
  • за счет компрессии ни одного блока для этих файлов не было выделено (нет строки ZFS file data)
  • На метаданные каталога на диске ушло 86,6М
  • На метаданные собственно файлов - 95,4 (182 - 86,6)
  • Миллион файлов по 2К без сжатия тоже не влез бы на пул ZFS на двухгиговом устройстве :)
anonymous
()
Ответ на: комментарий от anonymous

Да, всё норм. Проблемы, которые становятся актуальными только в специально созданных феерических условиях - это не проблемы вовсе. Это всё равно, что затолкать человека в ящик 0,5х0,5х0,5 метра и удивляться, почему он превратился в не очень живую кашицу.

pedobear
()

С этим вашим тредом мне какая-то убийственная херь под утро снилась: будто бы тотальный зомбоапокалипсис, я был укушен, и кто-то из здешних одминов в обмен на антидот предлагал угадать, какую ФС со снапшотами он использует на боевых серверах. Я сказал «NILFS4» (такая вообще существует?), а какая-то маленькая девочка покрутила у виска и сказала «Tux3». И выиграла. А я сдох.

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

так райзер на разделе в 4 тб явно проиграет btrfs, потому он и приводит разделы, под которые создавалась эта фс.

erzent ☆☆
()
Ответ на: комментарий от pedobear

Ну так я в тесте не включал сжатие.

Ну тут сжатие привело только к тому, что блоки для файлов сжались в дырки, поэтому место для них не выделялось. Можно повторить без сжатия, результат будет примерно такой же, за исключением того, что создать удастся тысяч так 900+ файлов.

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

так райзер на разделе в 4 тб явно проиграет btrfs, потому он и приводит разделы, под которые создавалась эта фс.

слова, слова...

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

У меня лишних четырёх терабайтов нет (и лишней недели, в течение которой эти четыре терабайта будут заполняться пустыми файлами, тоже нет). Разупорись.

intelfx ★★★★★
()

В общем погонял я ещё немного эту бажную btrfs, которая вся стабильна. Баг с compress-force не только в ядре 3.17.1, но также прекрасно себя чувствует в ядре 3.16.0-24 (дефолтное ядро в убунте 14.10). Скорее всего для большинства это не так важно, как я понял всем пофиг, что многие данные btrfs даже не пытается сжать, но проблема в том, что это базовый функционал, который на поверхности, я даже представить боюсь что же там наколбашено внутри. Яркий, кстати, пример разработки софта по ущербной парадигме devops (а также agile и прочий шлак), получите распишитесь. Потыкаю ещё немного «это», потому как есть подозрения, что когда при серъёзной нагрузке эта штука делает sync она фризит систему, хотя система установлена на отдельном ssd.

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

наверное, мне от этого будет очень прискорбно!
О нет, только не игнор, умоляю!! :D

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

iZEN залогинься наконец )

ты кастани его и спроси, он ли это

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

у меня без проблем было много файлов и данных на btrfs, снапшоты всё делались, она конечно не замена zfs, но под свои задачи она подходит хорошо.Представь сколько надо было бы оперативы под файлопомойку с ≈5 тб данных....

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

Да работает оно, вроде как, гоняю потихоньку суровыми стресс-тестами, живёт, если compress-force не включать. Просто я впервые в жизни решил эту btrfs попробовать и словил эпичный баг через 30 минут использования, обидно ))

King_Carlo ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.