файловая система для миллионов маленьких файлов


44

Какую файловую систему Linux вы бы выбрали для лучшей скорости в следующем сценарии:

  • сто миллионов файлов
  • ~ 2К размер файла в среднем
  • > 95% доступ для чтения
  • довольно случайный доступ
  • высокий параллелизм (> 100 процессов)

Примечание: файлы хранятся в глубоком иерархическом дереве, чтобы избежать больших каталогов. Каждый листовой каталог содержит около тысячи файлов.

Как бы вы оценили это?


3
Нужна дополнительная информация. Например, вы храните все файлы в плоском каталоге или во вложенных (отсортированных) каталогах? Это может существенно повлиять на производительность при обращении к файлу. Просеивание 100 000 000 записей в «плоском» порядке повлечет за собой значительные накладные расходы независимо от типа FS; в лучшем случае вы просматриваете какой-то поиск по дереву, который все еще требует нескольких поисков для получения вашего файла. Если вы разделите файлы на подкаталоги, время доступа значительно ускорится, поскольку на каждом уровне будет меньше записей для поиска.
Эйвери Пейн

Доступ к файлу осуществляется последовательно или одновременно?
Стив Шнепп

Ответы:


19

Вот некоторые результаты, сравнивающие все основные ОС Linux с bonnie ++, которые вы можете использовать в качестве отправной точки.

С точки зрения случайных поисков выигрывает Рейзер, затем EXT4, а затем JFS. Я не уверен, будет ли это точно соответствовать поиску в каталоге, но похоже, что это будет индикатор. Вы должны будете сделать свои собственные тесты для этого специально. EXT2 отбивает все за время создания файла, вероятно, из-за отсутствия журнала, но EXT4 побеждает все, кроме Reiser, которое вы можете не использовать из-за текущего статуса Ханса Райзера.

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

Наконец, убедитесь, что ваша машина имеет тонну оперативной памяти. Поскольку файлы не часто обновляются, linux заканчивает кэширование большинства из них в ram, если у него есть свободное место. Если ваши шаблоны использования верны, это даст вам огромный прирост скорости.


1
проблема Бонни ++ в том, что он даже не тестирует мой сценарий использования
бен

2
У вас есть точка зрения о том, что не нужно проверять каталоги, но, честно говоря, если это ваша проблема, вам лучше сбросить данные в реальную базу данных. Файловые системы работают не так хорошо на небольших объектах, для которых разработано большинство баз данных
Эндрю Чолакян,

7
@AndrewCholakian Ссылка теперь мертва.
Дон Скотт

8

Я согласен с большей частью того, что сказал Эндрю, за исключением того, что я бы порекомендовал Reiser4 или более старый (но лучше поддерживаемый) ReiserFS . Как показывают эти тесты (и документация для ReiserFS), он предназначен для более точной ситуации, о которой вы спрашиваете (большое количество небольших файлов или каталогов). Раньше я использовал ReiserFS с Gentoo и Ubuntu без проблем.

Что касается статуса Ханса Рейзера, я не вижу в этом проблемы с кодом или стабильностью самой файловой системы. Reiser4 даже спонсируется как DARPA, так и Linspire, поэтому, хотя я согласен с тем, что дальнейшее развитие файловой системы Reiser не определено, я не думаю, что это должно стать решающим фактором в отношении того, должен ли кто-либо его использовать или нет.


3
Я использовал ReiserFS в течение длительного времени. На самом деле, я все еще использую его на более старом сервере Gentoo, который еще не успел переустановить. Этой установке исполнилось 4 года в мае. Что я могу вам сказать, так это то, что он значительно замедлился. Это явление происходило с течением времени во всех файловых системах, использующих ReiserFS, которые активно используют чтение и запись на всех машинах, на которых были такие файловые системы, без исключений - поэтому, если вы хотите использовать его в течение продолжительного периода времени, это то, что нужно сохранить в уме. Я отошел от этого, используя XFS для больших файловых систем.
Михай Лимбашан

3

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


1
Что такое файловая система, если не просто иерархическая база данных? Ваше предложение добавляет уровни абстракции, сложности и программного обеспечения, которые, вероятно, не гарантированы. Кроме того, владелец вопроса выполняет свою задачу с помощью «философии UNIX», которая, как я подозреваю, вам не нравится, когда вы больше относитесь к Windows.
Стю Томпсон

3
Прежде всего, я ничего не имею против Unix или чего-либо еще в этой области. Между файловыми системами и базами данных есть большие различия, и поэтому обе технологии были разработаны. Базы данных предназначены для работы с огромным количеством мелких объектов, в которых они работают лучше, чем большинство файловых систем. Я просто указывал, что может быть другой путь, по которому вы можете пойти с этим.
Jeroen Landheer

1
И гораздо проще "очистить / очистить" файл базы данных, чем дефрагментировать файловую систему в Linux. Большинство / все fs не предоставляют такую ​​функциональность, говоря, что в этом нет необходимости. Принимая во внимание комментарий Михая выше, вы можете видеть, что он не совсем правдив.
Гринго Суаве

3

Кто-то из Unix StackExchange создал тест (с исходным кодом) для тестирования только этого сценария:

В: Какая файловая система Linux является самой высокопроизводительной для хранения большого количества маленьких файлов (HDD, а не SSD)?

Лучшая производительность при чтении, похоже, исходит от ReiserFS.


Btrfs выглядит лучше или сопоставимых результатов во всем, кроме удаления. Но как часто вы удаляете файлы размером 300 Кб? Мне нравились RFS в прошлом, но Btrfs может быть лучше в будущем.
Гринго Суаве

3

По моему опыту, ext2 выдувает ext4 из воды для маленьких файлов. Если вас не волнует целостность записи, это здорово. Например, Subversion создает много-много-много мелких файлов, которые блокируют ext4 и другие файловые системы (XFS) (запустите задание cron, которое rsyncs данных в ext4 из ext2 каждые полчаса или около того фактически решает проблему).

Выполнение этих команд делает ext2 еще быстрее (даже если большинство этих параметров делают файловую систему нестабильной после сбоя, если вы не запустите синхронизацию до ее сбоя). Эти команды практически не влияют на ext4 с небольшими файлами.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure

1

Я думаю, ext3 (или ext4), может быть, JFS будет хорошим решением. Я был бы осторожен с ext4 и btrfs (файловые системы хитры - будьте готовы к резервному копированию, если вы хотите использовать новейшие, самые новые вещи).

Существуют также различные параметры, которые вы можете настроить во время mkfs, чтобы настроить файловую систему по своему вкусу.

Я бы определенно рекомендовал против XFS. Не потому, что это плохая файловая система, но создание / удаление - дорогостоящая операция над ней.


Чтобы избежать проблем с поиском в каталоге, используйте интеллектуальную схему именования, например:

<first letter of id>_<last letter of id>/<id>

или аналогичные, более сложные схемы. Это ускорит ваш поиск в каталоге и, следовательно, общую скорость доступа. (Это старый трюк Unix, я думаю, из V7)


1
В чем преимущество использования первой и последней буквы, а не только первых n букв?
Бене

это всего лишь одна из возможных схем - будет ли это преимуществом, зависит от «ключа», используемого для индексации. Эта конкретная схема, на которую я смотрел, связана с приложением, в котором хранятся данные о людях в организации, и таким образом у них улучшена индексация. Как всегда, вам нужно адаптировать его к вашим данным, а затем профилировать, пока вы не найдете точные ответы :)

1

Большинство FS будут задыхаться с более чем 65K файлами в директории, я думаю, что это все еще верно для ext4. Файловые системы Reiser не имеют этого ограничения (люди на mp3.com заплатили, чтобы убедиться в этом). Не уверен ни в чем другом, но это один из сценариев использования, для которых был создан ReiserFS.


1
Это ReiserFS, а не RieserFS
Даниэль Риковски

В эти выходные у меня был каталог на ext4 с 1000000 файлами в нем. До тех пор, пока вы не сделаете lsили завершение табуляции, это работает быстро. Вероятно, из-за индекса.
Оле Танге

ext4 имеет расширение dir_index, которое ускоряет множество файлов в одном каталоге.
alfonx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.