[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: mmap на больших файлах ?



Victor B. Wagner wrote:
On 2003.11.03 at 20:28:01 +0200, Sergei Olonichev wrote:


А зачем вам больше? 32 бита вполне хватит для Ваших 50k.


Так в этом то и вопрос. Просто вызывать mmap на каждый блок (условно 50k) - это, здается мне, ни чем не лучше чем вызывать fread (с точки зрения скорости), а может еще и хуже.


Ну, во-первых, стоило бы протестировать. Все-таки минус одно копирование
kernelspace -> userspace.

Во-вторых, можно (если есть основания полагать, что следующие 50К будут
в пределах осмысленного куска от предыдущих) делать mmap на, скажем,
полгига, и запоминать смещение начала и конца. И делать unmap и другой
map только если следующее чтение оказывается за пределами этого окна.

Или, как вариант - держать два mmap-ленных окна - одно фиксированное,
там где живут наиболее часто читаемые блоки, второе - там, где
понадобилось прочесть блок за пределами этого окна.
что-то это все напоминает задачу моей веселой юности, когда много памяти
в машины уже начали ставить, а программы писали в 16 бит... По-хорошему, как
тогда перешли на 32бит адреса, надо перейти на 64. Или сделать "кэш" этак на 100 окон по 100КБ. Считать запросы на новые блоки и так автоматически иметь "одно фиксированное, там где живут наиболее часто читаемые блоки" только круче :) И не надо пересортировывать данные. Наиболее часто используемые и так окажутся в памяти навечно после небольшого периода работы проги. (Если не ввести "остывание" счетчиков запросов от времени)


ЗЫ а что может иметь пользу -- так это сказать O_DIRECT дабы очередные 50к, которые все равно скоро уйдут не вытесняли более статические данные...



Reply to: