Стоит ли выращивать файлы в Linux? - PullRequest
0 голосов
/ 22 июля 2010

Есть ли заметная разница в скорости между этими 2 сценариями?

Сценарий 1: У меня есть файл размером 1024 байта, заполненный нулями для каждого байта. Я открываю файл и записываю 1024 байта 1 с помощью fwrite.

Сценарий 2: У меня есть файл размером 512 байт, заполненный нулями для каждого байта. Я открываю файл и записываю 1024 байта 1 с помощью fwrite.

Очевидно, что я получаю одинаковые файлы, но есть ли штраф за изменение размера 2-го файла на диске?

Я пытаюсь определить, будет ли изменение размера моих файлов перед их использованием иметь какую-либо ценность. Бонус указывает любому, кто может показать мне некоторую документацию по Linux, чтобы доказать это в любом случае.

Ответы [ 2 ]

6 голосов
/ 22 июля 2010

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

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

4 голосов
/ 22 июля 2010

Если размеры, о которых вы говорите, меньше, чем минимальный размер выделения (который, по-видимому, будет), тогда это действительно не будет ощутимой разницы.

Будет ли это измеримо для больших значений? Возможно.

Это имеет значение? Профилируя, вы можете сказать, что это узкое место для вашего приложения.

...