sendfile and page usage statistics

Igor Sysoev is at rambler-co.ru
Wed Oct 10 10:36:07 PDT 2007


On Wed, Oct 10, 2007 at 03:27:56AM -0700, David G Lawrence wrote:

> > > But I think that the actual patch is wrong. The PG_REFERENCED bit shall
> > > be set when hardware access bit is set on pte. You patch would set it in
> > > advance.
> > 
> > The problem is that ethernet card that does TX chsum, DMA and TSO never
> > sets PG_A, so sendfile() should set it in advance.
> > 
> > I'm going to test the patch on machine where all files takes more memory
> > than physical memory and there are some popular files.
> > 
> > I espect to see
> > 1) increased active memory.
> > 2) decreased number i/o.
> 
>    I would say that it is far from clear that this change would result in
> better performance. It is generally the case in FreeBSD that we bias in
> favor of executable pages (usually the image itself as its pages are
> executed, but also the image data pages). Pages involved in regular file
> I/O take a back seat. This is because a regular file is accessed typically
> in one burst, whereas an executable page is accessed in small chunks over
> a much larger period of time (and thus is affected more by a cache miss).
> Thus, PG_REFERENCED gets set for pages that are mmaped, but not for
> pages involved in read, write, sendfile, etc. Different workloads of
> course will have different behavior. 
>    One side effect of this will likely be much more system paging activity
> as sendfile causes process pages to be pushed out of memory in favor of
> cached file data. This is generally a bad thing and would result in reduced
> interactive performance.

The read() from file certainly updates vnode pages' PG_A/PG_REFERENCED,
because coping to userland is made by CPU. I think write() does the same.

I consider sendfile() as send() of mmap()ed file with the difference that 
user process does not see this mmap().


-- 
Igor Sysoev
http://sysoev.ru/en/


More information about the freebsd-current mailing list