[kern/sys_pipe.c] PIPE_NODIRECT and pipe throughput

Mike Silbersack silby at silby.com
Sat Mar 8 08:48:31 UTC 2008

On Sat, 8 Mar 2008, Antipov Dmitry wrote:

> [originally posted to freebsd-stable@]
> Hello all,
> recently I've tried a few benchmarks around pipe throughput on Linux vs. FreeBSD.
> Everyone interesting can see my stuff at, and
> initial post to Linux kernel developers mailing list at
> http://www.uwsg.iu.edu/hypermail/linux/kernel/0803.0/1837.html
> 1) It was noticed (http://www.uwsg.iu.edu/hypermail/linux/kernel/0803.0/1842.html) that
> the page flipping may be a reason of FreeBSD advantage. I've looked at kern/sys_pipe.c
> and found that defining PIPE_NODIRECT should disable it. Is that correct ?

Yes, that is correct.

> 2) When I've tried to run the kernel (7.0-STABLE) with PIPE_NODIRECT defined,
> I didn't see any slowdown (note 30% is promised in kern/sys_pipe.c comments)
> even for I/O buffer sizes >= PIPE_MINDIRECT. So, what should be done with a pipe
> to see a difference between PIPE_NODIRECT enabled and disabled ?
> Thanks,
> Dmitry

Why don't you add another sysctl that is incremented every time page 
flipping is used?  That would prove how much it is being used during your 
tests.  Just add:

static int page_flips;
SYSCTL_INT(_kern_ipc, OID_AUTO, page_flips, CTLFLAG_RD,
            &page_flips, 0, "Pipe page flips");

and then put page_flips++ at the appropriate points in the code.

You should really use gnuplot or some other tool to graph your results. 
That will make them much easier to understand.


More information about the freebsd-hackers mailing list