8.1-STABLE: zfs and sendfile: problem still exists

Kostik Belousov kostikbel at gmail.com
Fri Oct 29 22:59:56 UTC 2010


On Fri, Oct 29, 2010 at 06:22:54PM +0300, Andriy Gapon wrote:
> on 29/10/2010 18:17 Kostik Belousov said the following:
> > On Fri, Oct 29, 2010 at 06:05:26PM +0300, Andriy Gapon wrote:
> >> on 29/10/2010 17:53 Kostik Belousov said the following:
> >>> Could it be the priming of the vm object pages content ?
> >>
> >> Sorry, not familiar with this term.
> >> Do you mean prepopulation of vm object with valid pages?
> >>
> >>> Due to double-buffering, and (possibly false) optimization to only
> >>
> >> What optimization?
> > On zfs vnode read, the page from the corresponding vm object is only
> > populated with the vnode data if the page already exists in the
> > object.
> 
> Do you mean a specific type of read?
> For "normal" reads it's the other way around - if the page already exists and is
> valid, then we read from the page, not from ARC.
Let me repeat it once more:
zfs does not properly caches the vnode data content in the page cache
(the cache is used in a weaker sence, not meaning the freebsd 'cached'
memory, but a cache in more common sence). Not doing the optimization
I mentioned would mean always allocating the pages and making it
(partially) valid for each read call.
> 
> > Not doing the optimization would be to allocate the page uncoditionally
> > on the read if not already present, and copy the data from ARC to the page.
> >>
> >>> perform double-buffering when vm object already has some data cached,
> >>> reads can prime vm object page list before file is mmapped or
> >>> sendfile-ed.
> >>>
> >>
> >> No double-buffering is done to optimize anything. Double-buffering
> >> is a consequence of having page cache and ARC. The special
> >> "double-buffering code" is to just handle that fact - e.g. making
> >> sure that VOP_READ reads data from page cache instead of ARC if it's
> >> possible that the data in them differs (i.e. page cache has more
> >> recent data).
> >>
> >> So, if I understood the term 'priming' correctly, no priming should
> >> ever occur.
> > The priming is done on the first call to VOP_READ() with the right
> > offset after the page is allocated.
> 
> Again, what is priming?
Filling the cache with an appropriate content.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20101029/a0af9782/attachment.pgp


More information about the freebsd-stable mailing list