From: Eliezer Tamir <eliezer.tamir@linux.intel.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David Miller <davem@davemloft.net>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Don Skidmore <donald.c.skidmore@intel.com>,
e1000-devel@lists.sourceforge.net,
Willem de Bruijn <willemb@google.com>,
Ben Hutchings <bhutchings@solarflare.com>,
Andi Kleen <andi@firstfloor.org>, HPA <hpa@zytor.com>,
Eilon Greenstien <eilong@broadcom.com>,
Or Gerlitz <or.gerlitz@gmail.com>,
Amir Vadai <amirv@mellanox.com>,
Eliezer Tamir <eliezer@tamir.org.il>
Subject: Re: [PATCH v9 net-next 2/7] net: add low latency socket poll
Date: Thu, 06 Jun 2013 15:50:42 +0300 [thread overview]
Message-ID: <51B085A2.5090306@linux.intel.com> (raw)
In-Reply-To: <1370447966.24311.284.camel@edumazet-glaptop>
On 05/06/2013 18:59, Eric Dumazet wrote:
> On Wed, 2013-06-05 at 18:46 +0300, Eliezer Tamir wrote:
>> On 05/06/2013 18:39, Eric Dumazet wrote:
>>> On Wed, 2013-06-05 at 18:30 +0300, Eliezer Tamir wrote:
>>>> On 05/06/2013 18:21, Eric Dumazet wrote:
>>
>>>>> It would also make sense to give end_time as a parameter, so that the
>>>>> polling() code could really give a end_time for the whole duration of
>>>>> poll().
>>>>>
>>>>> (You then should test can_poll_ll(end_time) _before_ call to
>>>>> ndo_ll_poll())
>>>>
>>>> how would you handle a nonblocking operation in that case?
>>>> I guess if we have a socket option, then we don't need to handle none
>>>> blocking any diffrent, since the user specified exactly how much time to
>>>> waste polling. right?
>>>
>>> If the thread already spent 50us in the poll() system call, it for sure
>>> should not call any ndo_ll_poll(). This makes no more sense at this
>>> point.
>>
>> what about a non-blocking read from a socket?
>> Right now we assume this means poll only once since the application will
>> repeat as needed.
>>
>> maybe add a "once" parameter that will cause sk_poll_ll() to ignore end
>> time and only try once?
>
> extern bool __sk_poll_ll(struct sock *sk, cycles_t end);
>
> static inline bool sk_poll_ll(struct sock *sk, bool nonblock)
> {
> return __sk_poll_ll(sk, nonblock, ll_end_time());
> }
>
> In the poll() code, we should call ll_end_time() once, even if we poll
> 1000 fds.
Right now we have three uses for sk_poll_ll
1. blocking read - In this case we loop until:
a !skb_queue_empty(&sk->sk_receive_queue)
or
b !can_poll_ll(end_time)
2. non-blocking read - only try once, ignoring end time.
3. poll/select - for each socket we only try once (nonblock==1),
we loop in poll/select until we are lucky or run out of time.
For 1 we want to loop inside sk_poll_ll() but for 3 we loop in poll/select.
So it seems all we need is for sk_poll_ll() to not call ll_end_time() if
nonblock is set.
( something like cycles_t end_time = nonblock ? 0 : ll_end_time(); )
Or we could move out looping in all cases to the calling function.
Does this mean we should push out rcu_read_lock_bh() into the caller
as well?
-Eliezer
next prev parent reply other threads:[~2013-06-06 12:50 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-05 10:34 [PATCH v9 net-next 0/7] net: low latency Ethernet device polling Eliezer Tamir
2013-06-05 10:34 ` [PATCH v9 net-next 1/7] net: add napi_id and hash Eliezer Tamir
2013-06-05 10:34 ` Eliezer Tamir
2013-06-05 13:18 ` Eric Dumazet
2013-06-05 10:34 ` [PATCH v9 net-next 2/7] net: add low latency socket poll Eliezer Tamir
2013-06-05 10:34 ` Eliezer Tamir
2013-06-05 13:23 ` Eric Dumazet
2013-06-05 13:23 ` Eric Dumazet
2013-06-05 15:28 ` Willem de Bruijn
2013-06-05 15:31 ` Eliezer Tamir
2013-06-05 15:21 ` Eric Dumazet
2013-06-05 15:30 ` Eliezer Tamir
2013-06-05 15:39 ` Eric Dumazet
2013-06-05 15:39 ` Eric Dumazet
2013-06-05 15:46 ` Eliezer Tamir
2013-06-05 15:46 ` Eliezer Tamir
2013-06-05 15:59 ` Eric Dumazet
2013-06-05 15:59 ` Eric Dumazet
2013-06-06 12:50 ` Eliezer Tamir [this message]
2013-06-05 10:34 ` [PATCH v9 net-next 3/7] udp: add low latency socket poll support Eliezer Tamir
2013-06-05 10:34 ` Eliezer Tamir
2013-06-05 13:25 ` Eric Dumazet
2013-06-05 13:25 ` Eric Dumazet
2013-06-05 10:34 ` [PATCH v9 net-next 4/7] tcp: " Eliezer Tamir
2013-06-05 10:34 ` Eliezer Tamir
2013-06-05 13:25 ` Eric Dumazet
2013-06-05 13:25 ` Eric Dumazet
2013-06-05 10:34 ` [PATCH v9 net-next 5/7] net: simple poll/select low latency socket poll Eliezer Tamir
2013-06-05 10:34 ` Eliezer Tamir
2013-06-05 13:30 ` Eric Dumazet
2013-06-05 13:30 ` Eric Dumazet
2013-06-05 13:41 ` Eliezer Tamir
2013-06-05 13:41 ` Eliezer Tamir
2013-06-05 13:56 ` Eric Dumazet
2013-06-05 13:56 ` Eric Dumazet
2013-06-05 14:17 ` Eric Dumazet
2013-06-05 14:17 ` Eric Dumazet
2013-06-05 14:56 ` Eliezer Tamir
2013-06-05 15:20 ` Eric Dumazet
2013-06-05 15:20 ` Eric Dumazet
2013-06-05 15:47 ` Eliezer Tamir
2013-06-05 13:49 ` David Laight
2013-06-05 13:49 ` David Laight
2013-06-05 14:00 ` Eric Dumazet
2013-06-05 14:00 ` Eric Dumazet
2013-06-05 10:35 ` [PATCH v9 net-next 6/7] ixgbe: add support for ndo_ll_poll Eliezer Tamir
2013-06-05 10:35 ` Eliezer Tamir
2013-06-05 10:35 ` [PATCH v9 net-next 7/7] ixgbe: add extra stats " Eliezer Tamir
2013-06-05 10:35 ` Eliezer Tamir
2013-06-07 21:48 ` [PATCH v9 net-next 0/7] net: low latency Ethernet device polling David Miller
2013-06-08 18:06 ` Eliezer Tamir
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51B085A2.5090306@linux.intel.com \
--to=eliezer.tamir@linux.intel.com \
--cc=amirv@mellanox.com \
--cc=andi@firstfloor.org \
--cc=bhutchings@solarflare.com \
--cc=davem@davemloft.net \
--cc=donald.c.skidmore@intel.com \
--cc=e1000-devel@lists.sourceforge.net \
--cc=eilong@broadcom.com \
--cc=eliezer@tamir.org.il \
--cc=eric.dumazet@gmail.com \
--cc=hpa@zytor.com \
--cc=jesse.brandeburg@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=or.gerlitz@gmail.com \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.