Непрерывное физическое распределение набора файлов в файловой системе linux (ext4)

4

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

Я использую файловую систему ext4 и мне было интересно, есть ли какой-нибудь инструмент, который мог бы сделать это для меня, когда я узнал, что ext4 поддерживает онлайн-обмен и дефрагментацию блоков. Я пытался с помощью e4defrag в моем каталоге файлов, хотя он гарантировал, что каждый отдельный файл был дефрагментирован, каждый сам файл находился в отдельном блоке, не обязательно смежном с другими файлами. (Я использовал filefrag -v file_name проверить, были ли они расположены рядом друг с другом или нет)

РЕДАКТИРОВАТЬ: просто чтобы уточнить шаблоны доступа к файлам, эти файлы будут записаны ровно один раз и никогда не будут изменены снова. Они будут часто читаться, но таким образом, что, если какой-либо из них будет прочитан, все другие файлы в наборе также, вероятно, понадобятся для чтения. Что я собираюсь сделать, так это предварительно загрузить все эти файлы вместе в буфер / кэш файловой системы за один раз, чтобы последующие случайные чтения любого из этих файлов были очень быстрыми. (Общий размер файла достаточно мал, 100 ~ 200 МБ, чтобы поместиться в кэш). Сейчас я пытаюсь улучшить производительность чтения при попытке загрузить эти файлы в кеш. В настоящее время производительность чтения сильно падает при попытке предварительного извлечения их в кэш, так как существует несколько обращений к диску, поскольку они расположены в непересекающихся сегментах.

phininity
источник
Не могли бы вы подробнее рассказать о своем сценарии? Например, эти файлы записаны один раз, а затем прочитаны один раз? ... читать / писать много и часто? Вы хотите улучшить производительность чтения или чтения / записи? Как «случайное» размещение файлов препятствует достижению требований к производительности?
rickhg12hs
@ rickhg12hs Файлы статичны и не изменятся, поэтому не нужно учитывать производительность записи. Я беспокоюсь только об улучшении производительности чтения и факта. Я всегда буду пытаться предварительно выбрать весь набор файлов, чтобы прозрачно улучшить производительность нескольких других процессов, которые сразу же будут использовать несколько из них.
phininity
Самый простой способ, который я могу придумать, - создать отдельный раздел, достаточно большой для файлов. В качестве дополнительного бонуса, если вы создадите раздел в начале диска, это будет еще быстрее.
Lawrence
1
Просто интересно ... это преждевременная оптимизация? Может ли помочь запись / копирование этих файлов на виртуальный диск? Или ваша предварительная выборка будет отлично работать, если она завершена до того, как понадобятся данные.
rickhg12hs
Я не уверен, каковы цели @ phininity, но я пришел сюда, потому что я надеюсь поместить все мои торрент-файлы физически рядом друг с другом, отсортированными в соответствии с логическим расположением торрент-блоков; Я хочу избежать поиска накладных расходов + износа при посеве торрентов. Было бы здорово прочитать хотя бы часть текста.
JamesTheAwesomeDude

Ответы:

0

Не совсем способ реорганизации блоков файловой системы, но ...

Вы хотите, чтобы файлы были в оперативной памяти, и вы сказали в комментариях, что вы уже экспериментировали с ramdisk. Мы можем улучшить этот подход.

Моя идея - читать файлы не напрямую из файловой системы, например ext4 но из .tar файл. Вы бы создали этот файл один раз, поместите его на ext4 файловая система и дефрагментировать с e4defrag, Тогда при каждой загрузке

cd /mnt/target_tmpfs/ &&  tar -xf /mnt/ext4/defragmented_archive.tar

Я не думаю tar осмотритесь в данном файле, ищите туда-сюда. Но если вы так думаете, то вы всегда можете использовать cat … | tar -x, В этом случае tar может только читать входные данные непрерывно и не более одного раза.

Я знаю, что вы не можете легко загрузить всю ОС таким способом, если, возможно, вы не подготовитесь initramfs сделать это. Я не знаю много об этом, но я нашел это: Пользовательские Initramfs , Оттуда:

Вот несколько примеров того, что вы можете сделать с initramfs:

  • Смонтировать корневой раздел (для зашифрованных, логических и других специальных разделов);
  • [...]

Увидеть примеры скриптов там , монтаж ext4, затем tmpfs и заселение его из .tarзатем, используя это как / - все это кажется возможным в целом.

Очевидно, вы хотели бы ваш custom-initramfs.cpio.gz быть дефрагментированным, а также .tar файл.

Kamil Maciorowski
источник