2012-05-10 6 views
0

Я на Ubuntu 12.04 используя ext4. Я написал программу python, которая делает небольшой размер (в основном 512 байт) для чтения и записи с некоторым шаблоном произвольного доступа. Я обнаружил, что по мере того, как файл становится все больше и больше. Требуется все больше времени на то же количество операций ввода-вывода. Связь является линейной. Другими словами, я получаю O (n), где n - совокупное количество операций ввода-вывода.Маленький файл чтения/записи файлов медленнее, когда файл становится больше?

Интересно, существует ли неотъемлемая причина, по которой маленький ввод-вывод медленнее по мере увеличения размера файла.

Еще одно наблюдение: когда я установил ramdisk и выполнил ввод/вывод файлов в ramdisk, я НЕ наблюдаю это ухудшение производительности.

+0

fyi, O (2n) = O (n) – aioobe

+0

Я имел в виду n квадратов. - Не знаю, как делать надписи здесь. – dividebyzero

+0

Тогда я не вижу, как отношение является линейным. – aioobe

ответ

0

В зависимости от того, как вы выполняете IO, возможно, вы пытаетесь перечислить слишком много памяти, прежде чем сэкономить.

+0

Я создаю небольшие 512-байтовые куски и записываю их сразу в файл. – dividebyzero

0

Когда вы читаете 512 байт из большого файла с 1024 байтами, весь файл находится в кеше. По мере увеличения размера файла в кэше находится меньшая часть файла, и данные считываются с диска все чаще и чаще. То есть вы получаете больше промахов в кеше, когда файл растет. Возможно, это то, что вы испытываете.

+0

Я думаю, что это, вероятно, связано с поиском. Поскольку я делаю случайный доступ к файлам. Время, необходимое для поиска, увеличивается с размером файла. И да, система также не может хранить все в кеше файлов. – dividebyzero

+0

@dividebyzero поиск не очень подходит для жестких дисков. Попробуйте выполнить тот же тест на накопителе SDD. –

Смежные вопросы