

В последнее время мне часто попадались новости о Btrfs. Какая файловая система классная и какая функциональная. Решил загуглить информацию о практическом опыте пользования. К сожалению, всё, что в сети смог найти - субъективная вкусовщина без цифр и без сравнений. Никакой прагматической пользы я не нашёл, поэтому решил провести собственные опыты, сравнить btrfs с ext4.
4 теста:
1. Скорость загрузки системы.
2. Чтение множества маленьких файлов.
3. Чтение одного большого файла.
4. Внезапное отключение электропитания.
Тесты проводились на идентичных виртуальных машинах virtualbox.
Хост:
Debian: 13.4
DE: GNOME 48
CPU: AMD Athlon 2 280 3.4GHz (частота занижена на 0.2 потому что барахлит БП)
RAM: 16GB (2x8)
GPU: AMD Radeon HD 7770
Накопитель HDD SATA2
Виртуалки:
- 2 ядра (100% загрузки)
- 10 ГБ ОЗУ
- 5 ГБ диск (root)
Подготовка:
Было создано 2 виртуальные машины с дисками по 5ГБ каждая. На каждой была установлена базовая система Debian 13 (без DE). На одной машине была ФС ext4 со стандартными параметрами монтирования, а на другой btrfs с параметром compress (при установке ставится алгоритм lzo).
На машине с btrfs я сразу поменял параметры монтирования в fstab с compress на compress=zstd:1 и выполнил дефрагментацию чтобы пережать с новым алгоритмом.
После этого я начал одновременно устанавливать типичный набор программ (DE, браузер, офис, просмотрщики файлов). Делал это параллельно, чтобы системы были идентичны друг другу.
Занимаемое пространство привлекает внимание. На ext4 это 3.71ГБ, а брат близнец на btrfs всего 2.08ГБ, что составляет 56% от первоначального объёма. Даже если взять информацию от btrfs filesystem usage, где указывается 3.55ГБ, всё равно получается солидно 58%.
Следующим этапом была дефрагментация .vdi файлов. Как оказалось, не зря. Один из файлов дисков был разбит на 400+ частей, что существеннно замедляло работу дисковой подсистемы хоста. После его дефрагментации, машина начала включаться в полтора раза быстрее.
Завершающим этапом стала дефрагментация внутри самих машин.
Тест 1: Boot
Я не просто так выше написал про дефрагментацию. Из-за фрагментации файлов, машина с ext4 грузилась примерно за 1:30. Ниже прикладываю выборку тестов уже после дефрагментации vdi. Время замера от момента выбора ОС в grub до появления ярлыков рабочего стола.
ext4
1. 0:57
2. 0:58
3. 0:58
btrfs
1. 0:54
2. 0:56
3. 0:55
Изменения мизерные. Без секундомера незаметно.
Тест 2: Чтение множества мелких файлов
(Верхняя горизонтальная строка на скриншоте)
Для этого я выделил по 10ГБ ОЗУ на каждую виртуалку и организовал RAM диски, чтобы исключить влияние медленной записи. В качестве кучи мелких файлов я использовал всё, что было в системе (копировал её в оперативу).
Тестовый bash скрипт:
#!/bin/bash
rm -R -f /home/user/RAM/* #Очистка рам диска
sudo sync #Принудительный слив буфера записи
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches #Очистка кешированных данных
time cp -a -x / /home/user/RAM/ #Замер времени копирования
exit 0Перед каждой выборкой, на хостовой машине выполнялась команда очистки кеша sudo echo 3 | sudo tee /proc/sys/vm/drop_caches.
Результаты из 5 выборок:
ext4:
1. 3m18s
2. 3m10s
3. 3m4s
4. 3m9s
5. 3m6s
btrfs:
1. 2m40s
2. 2m20s
3. 2m21s
4. 2m19s
5. 2m20s
В условиях данного теста, btrfs даёт выигрыш примерно 25%.
Тест 3: Чтение одного большого файла
(Нижняя горизонтальная строка на скриншоте)
Для этого теста я создал дополнительный диск .vdi на 5ГБ и примонтировал его /home/user/TST/. Порядок действий был следующий.
Так как tar прерывает свою работу из-за недоступных файлов и ссылок, я решил скопировать всё возможное в RAM, а уже оттуда сжимать на тестовый раздел.
В итоге я получил файлы root.tar с максимально похожим содержимым. Размеры файлов 3.62ГБ на ext4 и 2.12ГБ на btrfs что составляет 59%.
Тестовый скрипт:
#!/bin/bash
rm -R -f /home/user/RAM/* #Очистка рам диска
sudo sync #Принудительный слив буфера записи
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches #Очистка кешированных данных
time cp -a -x /home/user/TST/root.tar /home/user/RAM/root.tar #Замер времени копирования
exit 0Как и в предыдущем тесте, перед каждой выборкой выполнялась команда очистки кеша sudo echo 3 | sudo tee /proc/sys/vm/drop_caches.
Результаты из 5 выборок:
ext4
1. 1m1s
2. 1m4s
3. 1m3s
4. 1m3s
5. 1m42s (предположительно какой-то процесс на хосте занял время)
btrfs
1. 0m48s
2. 0m49s
3. 0m48s
4. 0m44s
5. 0m46s
Здесь выигрыш от btrfs ещё солиднее, примерно 30-35%.
Тест 4: Внезапное отключение электропитания
(Данный тест для галочки и не моделирует реальную нагрузку)
Чтобы не засорять подопытных мусором, этот тест проводил завершающим. Хочу предупредить, что я не знаю, как можно провести его максимально приближённо к реальности, а потом сделал следующее.
Попытался скачать старую версию ядра и на разных этапах отключал машину. Отключения были во время распаковки, initramfs, updategrub, а также initramfs и updategrub при удалении ядра.
Обе системы успешно пережили это и продолжили работать как ни в чём не бывало.
Вывод
Сжатие данных минимизирует воздействие бутылочного горлышка системы ввода-вывода. Бонусом +40% памяти накопителя почти бесплатно.
Что касается снапшотов и откатов, я таким не пользуюсь и не знаю, как провести тестирование. Да и не нужно оно мне.
Для моих нужд btrfs превосходит ext4.
Как бы я хотел провести этот эксперимент на реальной машине с AMD K8 и накопителями PATA (обзор на это железо я выкладывал ещё в 2020), но, к сожалению, у меня сейчас нет доступа к тому компьютеру.
Комментарии
10:21
Главному Метрологу Спасибо за инфо !
1-По простому...BTRFS...для жадных ! ))
2-ЕХТ4...для Юзеров и чтобы система работала надежно... !
3-А эти опыты и драка за СЕКУНДУ с зависимостями...а портить SSD...
не желательно...для Опытов и Тестов Можно ! ))
12:41
Ну спасибо)
Старался как мог. Сам пока не готов переходить на btrfs на рабочих машинах (их у меня 4). Там слишком много важной информации. Но уже присматриваюсь. Возможно первой реальной машиной станет мой нетбук с атомом и ssd с алиэкспресс (обзор про этот нетбук уже был на сайте и твердотельник кстати 7 лет исправно работает).
Интересно, как атом будет пережёвывать сжатие.
Вангую просадку пропускной способности, но при 32ГБ выбор у меня не сильно большой.
09:28
18:02
Пишу на них фильмы при пережатии, то есть там речь идёт про десятки ГБ.
10:43
11:04
12:49
Я скорее open-zfs попробую.
11:52
12:45
zstd:9 имхо это слишком. Ниже на странице, я оставил комментарий с замерами разрядности системы и степени сжатия. Выигрыш в сжатии мизерный, а потеря скорости существенная даже на декомпрессии.
01:55
07:10
Особенность работы zstd в btrfs в принудительном разбиении на чанки по 128кБ (немного иначе чем в архиваторах). Информация на носителях хранится блоками по 4кБ, то и сжимать нужно не меньше чем на 4кБ, иначе просто сжатый файл будет занимать такое же количество блоков. Проверяется первый чанк, если он сжался хотя бы до 124кБ, то и остальные сжимает. Ибо, какой смысл сжимать информацию, если на носителе она занимает то же самое место.
Имхо, решение разбить на чанки по 128 очень правильное, несмотря на то что компрессия страдает. Это позволяет сжимать информацию задействуя все ядра независимо друг от друга. И 128кБ умещается в кеш L2 всех существующих процессоров.
Почти нет шансов сжать уже сжатые архивы, изображения, музыку, видео.
Превосходно сжимаются конфиги, текстовые файлы как например html, php, js, базы данных mysql.
09:54
08:30
09:55
11:53
А тем временем Ext4 продолжают шлифовать и вносят правки в ядро.
"В 6.19 файловая система ext4 получила поддержку размеров блоков, превышающих размер страницы системной памяти (4 КБ). Это нововведение повышает эффективность операций с большими файлами, архивами и при сохранении данных. Производительность буферизированной записи может возрасти до 50% в зависимости от сценария использования.
Другие улучшения ext4:
Кэширование ACL: Ядро теперь запоминает отсутствие списков контроля доступа (POSIX ACL) у файлов и папок, исключая повторные проверки и ускоряя загрузку директорий с большим количеством файлов.
Кэширование на уровне CPU: Для дисковых запросов внедрено кэширование, привязанное к конкретным ядрам процессора, что снижает нагрузку на CPU за счет устранения очередей ожидания.
Онлайн-дефрагментация: Механизм переведен на использование фолио (folios) вместо буферных голов, что улучшает управление памятью и повышает пропускную способность при реорганизации файлов."
12:47
12:31
Влияние разрядности системы на производительность. 32 и 64 бит.
Тест проводился командой
zstd -b1 -e22 --long=17
-b1 - бенчмарк и начальная степень сжатия 1
-e22 - завершающая степень сжатия бенчмарка (в btrfs максимум 15, но мне было интересно продлить)
--long=17 - принудительно установленный параметр указывающий на размер окна выборки. В данном случае 17 что равняется 128 килобайт. Как раз такое окно используется в btrfs
Разница, как видите, существенная
Первая степень сжатия
32bit comp: 34.6MB/s decomp: 131.6MB/s
64bit comp: 63.7MB/s decomp: 315.9MB/s
Полный отчёт на скрине в гуглдрайве.
https://drive.google.com/file/d/1EsVvEo11bUwymc9Lqfc_byK5fODeW6gv/view?usp=sharing
14:01
Compress — штука опасная, тк оно происходит в фоне. Особенно если активно шифрование. Тем паче, на небольших дисках.
Переполнение диска с последующим издыханием btrfs — самый частый кейс полоумных хейтеров.
14:18
Я уловил вашу мысль.
Получается что если вместо виртуалки будет реальная машина, скорее всего разница во времени работы системы ввода-вывода будет ещё существеннее.
14:49
Создать тестовые разделы в tmpfs.
Хоть и результат будет и теоретическим, зато разница будет нагляднее.
Правда, понадобится хотя бы 32ГБ ОЗУ.
07:02
16:00
17:52
18:18
21:07
Аналогично проверял, да и так понятно - бесплатный сыр (40+) только в мышеловке
21:47
Интересно было бы узнать полный конфиг системы, железо + параметры сжатия.
22:55
compress=zstd:1
06:52
Интересно было бы узнать результаты бенчмарка с вашим cpu.
Что выдаёт следующая команда?
zstd -b1 -e22 --long=17
09:41
1#Lorem ipsum : 10000000 -> 3337930 (x2.996), 950.4 MB/s 4200.8 MB/s
1#Lorem ipsum : 10000000 -> 3337930 (x2.996), 480.7 MB/s 4100.4 MB/s
22#Lorem ipsum : 10000000 -> 2600249 (x3.846), 10.3 MB/s, 4240.4 MB/s
22#Lorem ipsum : 10000000 -> 2600249 (x3.846), 3.5 MB/s, 4150.2 MB/s
Похоже проблемы на седьмом ядре. На 6.19 потом проверю
13:25
Жду 6.19. Сомневаюсь что картина сильно изменится, в вашем случае упор в процессор.
14:36
На седьмом ядре так и не получилось стабильности добиться. Они похоже намудрили с планировщиком.
p.s. C выключенным xmp результат стабильнее
p.p.s. разобрался. шина залипает из за синтетики теста. на реальных файлах все тип топ
20:48
23:32
17:48
https://www.phoronix.com/review/linux-615-filesystems/6
Сравнительный анализ файловых систем Linux: ZFS, XFS, Btrfs против ext4
https://linuxcommunity.io/t/benchmarking-linux-filesystems-zfs-xfs-btrfs-vs-ext4/6405
Спасибо за проведённые опыты и эксперименты. Выбираю по умолчанию и по инерции Ext4, может есть уже смысл вновь попробовать Btrfs?.. И да, у многих дома системы установлены на SSD.
21:43
Потому для меня они неинформативны.
07:25
19:35
В btrfs тамшифт неплохо работает полезная штука
20:15
10:07
10:23
Сам долго присматриваюсь к btrfs и zfs. И хочется и колется. Надо чтобы и винда и линукс читали, а ещё чтобы в случае потери данных можно было легко восстановить популярными реаниматорами.
Пока не придумал ничего лучше NTFS ((.
06:14
11:29
ИМХО для дома абсолютно не нужная лотерея с btrfs!
12:00
12:09
А вот когда один блок с первого снапшота помрёт - Вы ощутите всю мощь и прелесть btrfs)) Каждый инструмент нужно использовать по назначению, хотите btrfs - не проблема, меняйте диски по регламенту, отслеживайте целостность данных и избегайте множество мелких файлов, про бд и нжмд забудьте вообще и будет Вам счастье! Как то так!:)
12:36
Сжатие. Снапшоты. Кстати не упомнял еще, что в btrfs снапшоты мгновенные, помимо того, что легкие.
12:38
12:40
12:43
"Снапшоты (снимки) Btrfs изначально занимают практически 0 байт места, так как используют технологию Copy-on-Write (CoW). Они хранят только разницу между текущими данными и моментом создания снимка. Размер снимка растет только тогда, когда оригинальные файлы изменяются или удаляются".
12:48
Я бы вынес это в заголовок сайта, обычная тут практика)
12:54
12:58
12:46
12:55
12:33
Для домашнего использования я точно не вижу никаких причин отказываться от btrfs, хотя и навязывать ее никому не собираюсь.
Я также btrfs поднял на NAS в локальной сети - чисто файлопомойка, зато с нативным сжатием. Буду наблюдать сколько она проживет :) До сих пор никаких проблем не было.
00:27
07:43
09:22
09:22
10:00
15:45
Что еще надо? Делаю вывод , что как по мне BTRFS на сегодня весьма надёжная. Я так и не столкнулся с проблемами лично.
19:12
12:31
09:31
P.S. Да-да, правильные и своевременные бэкапы. Но в реальной жизни с таким всё равно рано или поздно придётся столкнуться на любой ФС.
07:14
https://github.com/danthem/undelete-btrfs
Как я тестировал? rm -rf ~/.config
06:50
Я использую такие: rw,noatime,compress=zstd:2,ssd,discard=async,space_cache=v2,subvol=/@
Ключевые здесь:
compress=zstd:2 - компрессия zstd, lvl=2
space_cache=v2 - алгоритм кэширования вер. 2
21:03
ИМХО, это единственный, универсальный и самый выигрышный вариант.
Не на каждой машине есть смысл ставить более сильное сжатие.
Проводил ещё один эксперимент на разных машинах, тестировались степени сжатия.
Если коротко, чем больше кеш процессора - тем меньше падает скорость сжатия при повышении ступени.
Мой атлон 280, при переходе с 1 на 3, теряет 40% скорости. (Конфигурация кеша 2МБ, разделён по одному на каждое ядро)
А пентиум p6200 только 15%. (Есть общий кеш 3 уровня размером 3МБ)