Thread (53 messages) 53 messages, 8 authors, 2016-04-14

Re: [PATCH net-next 2/2] net: exit busy loop when another process is runnable

From: Jason Wang <jasowang@redhat.com>
Date: 2014-09-02 03:39:15
Also in: lkml

On 09/01/2014 06:04 PM, Peter Zijlstra wrote:
On Mon, Sep 01, 2014 at 12:52:19PM +0300, Michael S. Tsirkin wrote:
quoted
On Mon, Sep 01, 2014 at 11:31:59AM +0200, Peter Zijlstra wrote:
quoted
On Fri, Aug 22, 2014 at 07:01:05AM +0200, Mike Galbraith wrote:
quoted
quoted
+++ b/include/net/busy_poll.h
@@ -109,7 +109,8 @@ static inline bool sk_busy_loop(struct sock *sk, int nonblock)
 		cpu_relax();
 
 	} while (!nonblock && skb_queue_empty(&sk->sk_receive_queue) &&
-		 !need_resched() && !busy_loop_timeout(end_time));
+		 !need_resched() && !busy_loop_timeout(end_time) &&
+		 nr_running_this_cpu() < 2);
 
So as has been said by now; this is horrible.

We should not export nr_running like this ever. Your usage of < 2
implies this can be hit with nr_running == 0, and therefore you can also
hit it with nr_running == 1 where the one is not network related and you
get random delays.

Worse still, you have BH (and thereby preemption) disabled, you should
not _ever_ have undefined and indefinite waits like that.

You also destroy any hope of dropping into lower power states; even when
there's never going to be a packet ever again, also bad.
Hmm this patch sometimes makes us exit from the busy loop *earlier*.
How can this interfere with dropping into lower power states?
Ah.. jetlag.. :/ I read it like it owuld indefinitely spin if there was
only the 'one' task, not avoid the spin unless there was the one task.

The nr_running thing is still horrible, but let me reread this patch
description to see if it explains why that is a good thing.
I see, how about just exporting a boolean helper like
current_can_busy_loop() and take care all of the conditions (pending bhs
and rcu callbacks, runnable processes) in scheduler code itself?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help