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