mmap() incoherency on hi I/O load (FS is zfs)

Rick Macklem rmacklem at uoguelph.ca
Thu Jun 14 11:32:43 UTC 2012


Pavlo wrote:
> There's a case when some parts of files that are mapped and then
> modified getting corrupted. By corrupted I mean some data is ok (one
> that
> was written using write()/pwrite()) but some looks like it never
> existed.
> Like it was some time in buffers, when several processes
> simultaneously
> (of course access was synchronised) used shared pages and reported
> it's
> existence. But after time pass they (processes) screamed that it is
> now
> lost. Only part of data written with pwrite() was there. Everything
> that
> was written via mmap() is zero.
> 
> So as I said it occurs on hi I/O busyness. When in background 4+
> processes do indexing of huge ammount of data. Also I want to note, it
> never occurred in the life of our project while we used mmap() under
> same I/O stress conditions when mapping was done for a whole file of
> just
> a part(header) starting from a beginning of a file. First time we used
> mapping of individual pages, just to save RAM, and this popped up.
> 
> Solution for this problem is msync() before any munmap(). But man
> says:
> 
> The msync() system call is usually not needed since BSD implements a
> coherent file system buffer cache. However, it may be used to
> associate
> dirty VM pages with file system buffers and thus cause them to be
> flushed
> to physical media sooner rather than later.
> 
> Any thoughts? Thanks.
> 
With a recent kernel from head, I am seeing dirty mmap'd pages being written
quite late for the NFSv4 client. Even after the NFS client VOP_RECLAIM() has
been called, it seems. I didn't observe this behaviour in a kernel from
head in March. (I don't know enough about the vm/mmap area to know if this
is correct behaviour or not?)

I thought I'd mention this, since you didn't say how recent a kernel you
were running and thought it might be caused by the same change?

Sorry I can't help more, rick
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"


More information about the freebsd-fs mailing list