Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Feb 2011 15:18:03 +0300
From:      Slawa Olhovchenkov <slw@zxy.spb.ru>
To:        Stefan Lambrev <stefan.lambrev@moneybookers.com>
Cc:        freebsd-performance@freebsd.org, Julian Elischer <julian@freebsd.org>, Bruce Evans <brde@optusnet.com.au>
Subject:   Re: Interrupt performance
Message-ID:  <20110201121803.GT18170@zxy.spb.ru>
In-Reply-To: <8979148D-8F2E-49E3-86EE-41CE6F57CDA4@moneybookers.com>
References:  <20110128143355.GD18170@zxy.spb.ru> <22E77EED-6455-4164-9115-BBD359EC8CA6@moneybookers.com> <20110128161035.GF18170@zxy.spb.ru> <CDBFAB7F-1EBC-4B3A-B2F5-6162DD58A93D@moneybookers.com> <4D42F87C.7020909@freebsd.org> <20110128172516.GG18170@zxy.spb.ru> <20110129070205.Q7034@besplex.bde.org> <20110201113724.GS18170@zxy.spb.ru> <8979148D-8F2E-49E3-86EE-41CE6F57CDA4@moneybookers.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 01, 2011 at 02:07:51PM +0200, Stefan Lambrev wrote:

> > I do some more test and build kernel with KTR.
> > Now I don't think that inetrrupt overhead on FreeBSD weight: I try
> > polling and don't see any difference.
> > 
> > I see many reported by netperf send errors. I found this
> > http://docs.freebsd.org/cgi/mid.cgi?E1Aice9-0002by-00.
> > 
> > After insert into src/nettest_bsd.c usleep(1000) if ENOBUF I see 53%
> > idle and ./loop 2000000000 "Elapsed 15188006 us" -- this near to linux
> > (Elapsed 14107670 us).
> > 
> > 10% of difference may be by more weight network stack (only 32104
> > ticks from 126136 in interrupt handler and task switching, and 94032
> > -- UDP processing in network stack and passing datagram to driver).
> > May be weight SOCKBUF_LOCK/SOCKBUF_UNLOCK and/or
> > INP_INFO_RUNLOCK/INP_RUNLOCK.
> 
> Try to run with the same network buffers on FreeBSD and Linux.
> I think, the default values in freebsd are much, much lower.

Set large buffers on FreeBSD -- the first that I try.
Also, netperf use setsockopt() and netperf run on linux with same
options (include -s 128K -S 128K). 

> Also in the past ENOBUF was not handled properly in linux.
> 
> http://wiki.freebsd.org/AvoidingLinuxisms - Do not rely on Linux-specific socket behaviour. In particular, default socket buffer sizes are different (call setsockopt() with SO_SNDBUF and SO_RCVBUF), and while Linux's send() blocks when the socket buffer is full, FreeBSD's will fail and set ENOBUFS in errno.

Yes, about ENOBUFS with udp socket I told.
And this behaviour (block on udp socket send) in Solaris too.
I don't know what behaviour is right.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110201121803.GT18170>