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

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



Aleksey Cheusov wrote:

Sergei Olonichev <olonichev@scnsoft.com> writes:

Привет Всем!

Вот какой вопрос:

У меня есть файл размером больше 4G. И есть приложение которое иногда
читает этот файл по разным смещениям - как правило не более 50k.
Причем одни смещения используются значительно чаще чем другие (а
большинство возможных смещений не используется вообще).

Мне бы хотелось максимально ускорить этот процесс чтения.

Очевидно что использовать mmap на весь файл не получится.
Это почему это?

потомучто указатель как был 32 bit так и остался как __off_t не определяй
void * ptr = mmap (...);


Тут у меня мысль появилась вот какая - я в этом файле все данные пересортирую таким образом чтобы те блоки куда обращенее происходит чаще всего находились вначале файла - друг за другом. И отображать в память буду только первые N - блоков - так чтобы размер отбражения не превосходил какою-то константу.

Работа ускорится - плохо только что будет смесь из fred и *ptr


0,~>echo '#include <sys/mman.h>' | cpp -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURC>
typedef long int __off_t; typedef __quad_t __loff_t; typedef __loff_t __off64_t;
typedef __off64_t off_t;
0 0 0,~>

Есть ли
смысл использовать mmap (c точки зрения производительности) перед
непосредственным чтением определенного куска (те на ~50k) или нет?
Не перед, а вместо.








Reply to: