On Wed, Oct 09, 2013 at 03:42:27PM +0400, Dmitry Sivachenko wrote: > Hello! > > I have a program which mmap()s a lot of large files (total size more that RAM > and I have no swap), but it needs only small parts of that files at a time. > > My understanding is that when using mmap when I access some memory region OS > reads the relevant portion of that file from disk and caches the result in > memory. If there is no free memory, OS will purge previously read part of > mmap'ed file to free memory for the new chunk. > > But this is not the case. I use the following simple program which gets list > of files as command line arguments, mmap()s them all and then selects random > file and random 1K parts of that file and computes a XOR of bytes from that > region. > After some time the program dies: > pid 63251 (a.out), uid 1232, was killed: out of swap space > > It seems I incorrectly understand how mmap() works, can you please clarify > what's going wrong? > > I expect that program to run indefinitely, purging some regions out of RAM > and reading the relevant parts of files. >
You did not specified several very important parameters for your test: 1. total amount of RAM installed 2. count of the test files and size of the files 3. which filesystem files are located at 4. version of the system.
pgpu_xJMm2QsF.pgp
Description: PGP signature