[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 http://213.148.29.37/PipeBench, 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.

-Mike


More information about the freebsd-hackers mailing list