Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Sep 2011 22:59:26 +0900
From:      Takuya ASADA <syuu@dokukino.com>
To:        "owner-freebsd-net@freebsd.org" <owner-freebsd-net@freebsd.org>
Cc:        "support@pvd.citizen.co.jp" <support@pvd.citizen.co.jp>, "jfv@freebsd.org" <jfv@freebsd.org>, John Baldwin <jhb@freebsd.org>, "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Subject:   Re: Adding Flow Director sysctls to ixgbe(4)
Message-ID:  <8C8C6061-2BD8-4B38-843E-A0BA1218B773@dokukino.com>
In-Reply-To: <OF20882789.90B73961-ON48257906.000A66BA-48257906.000AA7D1@sml.citizen.co.jp>
References:  <CALG4x-W99OZxd=1ZDvW4=MBqeE3RPOazc7jc_3O30X-Pou3k8Q@mail.gmail.com> <1315221674.3092.282.camel@deadeye> <201109080834.11607.jhb@freebsd.org> <20110908184928.GA87872@hub.freebsd.org> <37419C45-4436-4738-851B-2B765BC2C60F@neville-neil.com> <1315529074.2804.63.camel@bwh-desktop> <OF20882789.90B73961-ON48257906.000A66BA-48257906.000AA7D1@sml.citizen.co.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

On Sep 9, 2011, at 10:56 AM, owner-freebsd-net@freebsd.org wrote:

> On Fri, Sep 09, 2011 at 01:44:34AM +0100, Ben Hutchings wrote:
>> On Thu, 2011-09-08 at 20:13 -0400, George Neville-Neil wrote:
>>> On Sep 8, 2011, at 14:49 , Navdeep Parhar wrote:
>>>=20
>>>> On Thu, Sep 08, 2011 at 08:34:11AM -0400, John Baldwin wrote:
>>>>> On Monday, September 05, 2011 7:21:12 am Ben Hutchings wrote:
>>>>>> On Mon, 2011-09-05 at 15:51 +0900, Takuya ASADA wrote:
>>>>>>> Hi,
>>>>>>>=20
>>>>>>> I implemented Ethernet Flow Director sysctls to ixgbe(4), here's a d=
etail:
>>>>>>>=20
>>>>>>> - Adding removing signature filter
>>>>>>> On linux version of ixgbe driver, it has ability to set/remove perfe=
ct
>>>>>>> filter from userland using ethtool command.
>>>>>>> I implemented similar feature, but on sysctl, and not perfect filter=

>>>>>>> but signature filter(which means hash collision may occurs).
>>>>>> [...]
>>>>>>=20
>>>>>> Linux also has a generic interface to RX filtering and hashing
>>>>>> (ethtool_rxnfc) which ixgbe supports; wouldn't it be better for FreeB=
SD
>>>>>> to support something like that?
>>>>>=20
>>>>> Some sort of shared interface might be nice.  The cxgb(4) and cxgbe(4)=
 drivers
>>>>> both provide their own tools to manipulate filters, though they do not=

>>>>> provide explicit steering IIRC.
>>>>=20
>>>> Both of them can filter as well as steer (and the tools let you do that=
).
>>>> cxgbe(4) can do a lot more (rewrite + switch, replicate, etc.) but thos=
e
>>>> features are perhaps too specialized to be configurable via a general
>>>> purpose tool.
>>>>=20
>>>>>=20
>>>>> We would need to come up with some sort of standard interface (ioctls?=
) for=20
>>>>> adding filters however.
>>>>=20
>>>> +1 for a standard interface.
>>>>=20
>>>> imho the kernel needs to be aware of the rx and tx queues of a NIC, and=

>>>> not just for steering.  But that's a separate discussion.
>>>>=20
>>>=20
>>> Well I do think this is actually all of a part.  Most of us realize by n=
ow that
>>> high speed (e.g. 10G and higher) NICs only make sense if you can steer t=
raffic and
>>> pin queues to cores etc.
>>=20
>> Well, you can get way better than 1G performance without that.  And for
>> routers, flow hashing may be fine.  But for a host, of course, steering
>> packets properly can provide a major performance win.
>>=20
>> [...]
>>> What this means is that we have
>>> a failure of abstraction.  Abstraction has a cost, and some of the peopl=
e who want
>>> access to low level queues are not interested in paying an extra abstrac=
tion cost.
>>=20
>> Abstraction has a cost, but it's not necessarily that high compared to
>> rewriting a whole chunk of sockets code (especially if you don't
>> actually have the source code).
>>=20
>>> I think that some of the abstractions we need are tied up in the work th=
at Takuya did
>>> for SoC and some of it is in the work done by Luigi on netmap.  I'd go s=
o far as to say
>>> that what we should do is try to combine those two pieces of code into a=
 set of
>>> low level APIs for programs to interact with high speed NICs.  The one t=
hing most
>>> people do not talk about is extending our socket API to do two things th=
at I think would
>>> be a win for 80% of our users.  If a socket, and also a kqueue, could be=
 pinned
>>> to a CPU as well as a NIC queue that should improve overall bandwidth fo=
r a large
>>> number of our users.  The API there is definitely an ioctl() and the har=
d part is
>>> doing the tying together.  To do this we need to also work out our low l=
evel story.
>>=20
>> But it would be a lot nicer if this could be done automatically.  Which
>> I believe it can - see the RFS and XPS features in Linux.
>=20
> rwatson@ has been working on "connection groups" (not sure what he calls
> his project) with a goal to improve the placement of work in the FreeBSD
> network stack.  Some of the code is in the kernel but the parts that
> require closer cooperation with a NIC are not.

It looks like reducing lock contention on inpcb lookup, does it even effects=
 the other part? (ex: CPU affinity



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8C8C6061-2BD8-4B38-843E-A0BA1218B773>