Date: Tue, 1 Feb 2011 14:23:32 +0200 From: Stefan Lambrev <stefan.lambrev@moneybookers.com> To: Slawa Olhovchenkov <slw@zxy.spb.ru> Cc: freebsd-performance@freebsd.org, Julian Elischer <julian@freebsd.org>, Bruce Evans <brde@optusnet.com.au> Subject: Re: Interrupt performance Message-ID: <CAE4CCBC-F934-45E7-AAE6-BD914C3F5577@moneybookers.com> In-Reply-To: <20110201121803.GT18170@zxy.spb.ru> 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> <20110201121803.GT18170@zxy.spb.ru>
index | next in thread | previous in thread | raw e-mail
On Feb 1, 2011, at 2:18 PM, Slawa Olhovchenkov wrote: > 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. Well, according to the man pages in linux and fbsd the bsd behavior is right. I was looking into this long time ago with some red hat linux. -- Best Wishes, Stefan Lambrev ICQ# 24134177help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAE4CCBC-F934-45E7-AAE6-BD914C3F5577>
