@q27off

Как оптимизировать скорость записи множества больших файлов в linux?

Есть необходимость параллельно записывать данные в множество (~100) файлов, результирующий размер которых будет достаточно большим, но приблизительно известным. Как можно подсказать ядру о том, какой ожидается размер результирующих файлов, чтобы не выполнялись лишние операции перемещения файлов на диске при их росте?

Заранее признателен за ответы.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
@rPman
Используя fallocate создать файл нужного размера, если файловая система не поддерживает sparse files (дырявые файлы, не занимающие место на диске) то эта операция мгновенна а файл будет заполнен мусором (данными, которые лежали в секторах).

К сожалению (а точнее к счастью, ибо безопасность важнее) все современные файловые системы поддерживают дыры (они будут возвращать нули), т.е. физически файл не будет занимать место, и вам нужно будет либо самим заполнить файл нулями либо использовать опцию fallocate - FALLOC_FL_ZERO_RANGE, это физически записывает данные на диск, так что операция тратит время.

p.s. файловые системы со сжатием или online deduplication (типа zfs) тем более не позволят вам управлять процессом создания, точнее это нужно будет делать утилитами файловой системы.

upd. забыл еще напомнить, на файловых системах Copy On Write (типа zfs/btrfs/...) предварительное размещение файла бессмысленно, даже вредно, так как любая запись будет проходить в новое место на диске.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Что это за "перемещение файлов на диске"? Вы дефрагментацию имеете в виду, что ли?

Если критично иметь файл в виде непрерывной (как можно более) области на диске - дожидайтесь, пока запись закончится и копируйте данные на не занятое устройство, всё будет лежать красивенько. Ну или выделяйте место на основном диске сразу, а не по мере увеличения файлов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы