У меня есть набор файлов, которые я хочу разместить в файловой системе непрерывно. Я буду получать доступ ко всем этим файлам последовательно в одном чтении один за другим, и я хочу оптимизировать их чтение. Я не могу объединить их в один файл, и я ищу решение, которое позволит им быть отдельными файлами.
Я использую файловую систему ext4 и мне было интересно, есть ли какой-нибудь инструмент, который мог бы сделать это для меня, когда я узнал, что ext4 поддерживает онлайн-обмен и дефрагментацию блоков. Я пытался с помощью e4defrag
в моем каталоге файлов, хотя он гарантировал, что каждый отдельный файл был дефрагментирован, каждый сам файл находился в отдельном блоке, не обязательно смежном с другими файлами. (Я использовал filefrag -v file_name
проверить, были ли они расположены рядом друг с другом или нет)
РЕДАКТИРОВАТЬ: просто чтобы уточнить шаблоны доступа к файлам, эти файлы будут записаны ровно один раз и никогда не будут изменены снова. Они будут часто читаться, но таким образом, что, если какой-либо из них будет прочитан, все другие файлы в наборе также, вероятно, понадобятся для чтения. Что я собираюсь сделать, так это предварительно загрузить все эти файлы вместе в буфер / кэш файловой системы за один раз, чтобы последующие случайные чтения любого из этих файлов были очень быстрыми. (Общий размер файла достаточно мал, 100 ~ 200 МБ, чтобы поместиться в кэш). Сейчас я пытаюсь улучшить производительность чтения при попытке загрузить эти файлы в кеш. В настоящее время производительность чтения сильно падает при попытке предварительного извлечения их в кэш, так как существует несколько обращений к диску, поскольку они расположены в непересекающихся сегментах.
источник
Ответы:
Не совсем способ реорганизации блоков файловой системы, но ...
Вы хотите, чтобы файлы были в оперативной памяти, и вы сказали в комментариях, что вы уже экспериментировали с ramdisk. Мы можем улучшить этот подход.
Моя идея - читать файлы не напрямую из файловой системы, например
ext4
но из.tar
файл. Вы бы создали этот файл один раз, поместите его наext4
файловая система и дефрагментировать сe4defrag
, Тогда при каждой загрузкеЯ не думаю
tar
осмотритесь в данном файле, ищите туда-сюда. Но если вы так думаете, то вы всегда можете использоватьcat … | tar -x
, В этом случаеtar
может только читать входные данные непрерывно и не более одного раза.Я знаю, что вы не можете легко загрузить всю ОС таким способом, если, возможно, вы не подготовитесь
initramfs
сделать это. Я не знаю много об этом, но я нашел это: Пользовательские Initramfs , Оттуда:Увидеть примеры скриптов там , монтаж
ext4
, затемtmpfs
и заселение его из.tar
затем, используя это как/
- все это кажется возможным в целом.Очевидно, вы хотели бы ваш
custom-initramfs.cpio.gz
быть дефрагментированным, а также.tar
файл.источник