From: Jason Wang <jasowang@redhat.com>
To: davem@davemloft.net, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: mst@redhat.com, Jason Wang <jasowang@redhat.com>
Subject: [PATCH net-next 2/2] net: exit busy loop when another process is runnable
Date: Thu, 21 Aug 2014 16:05:10 +0800 [thread overview]
Message-ID: <1408608310-13579-2-git-send-email-jasowang@redhat.com> (raw)
In-Reply-To: <1408608310-13579-1-git-send-email-jasowang@redhat.com>
Rx busy loop does not scale well in the case when several parallel
sessions is active. This is because we keep looping even if there's
another process is runnable. For example, if that process is about to
send packet, keep busy polling in current process will brings extra
delay and damage the performance.
This patch solves this issue by exiting the busy loop when there's
another process is runnable in current cpu. Simple test that pin two
netperf sessions in the same cpu in receiving side shows obvious
improvement:
Before:
netperf -H 192.168.100.2 -T 0,0 -t TCP_RR -P 0 & \
netperf -H 192.168.100.2 -T 1,0 -t TCP_RR -P 0
16384 87380 1 1 10.00 15513.74
16384 87380
16384 87380 1 1 10.00 15092.78
16384 87380
After:
netperf -H 192.168.100.2 -T 0,0 -t TCP_RR -P 0 & \
netperf -H 192.168.100.2 -T 1,0 -t TCP_RR -P 0
16384 87380 1 1 10.00 23334.53
16384 87380
16384 87380 1 1 10.00 23327.58
16384 87380
Benchmark was done through two 8 cores Xeon machine back to back connected
with mlx4 through netperf TCP_RR test (busy_read were set to 50):
sessions/bytes/before/after/+improvement%/busy_read=0/
1/1/30062.10/30034.72/+0%/20228.96/
16/1/214719.83/307669.01/+43%/268997.71/
32/1/231252.81/345845.16/+49%/336157.442/
64/512/212467.39/373464.93/+75%/397449.375/
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
include/net/busy_poll.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h
index 1d67fb6..8a33fb2 100644
--- a/include/net/busy_poll.h
+++ 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);
rc = !skb_queue_empty(&sk->sk_receive_queue);
out:
--
1.8.3.1
next prev parent reply other threads:[~2014-08-21 8:05 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-21 8:05 [PATCH net-next 1/2] sched: introduce nr_running_this_cpu() Jason Wang
2014-08-21 8:05 ` Jason Wang [this message]
2014-08-21 8:11 ` [PATCH net-next 2/2] net: exit busy loop when another process is runnable Michael S. Tsirkin
2014-08-22 2:53 ` Jason Wang
2014-08-21 19:03 ` Amos Kong
2014-08-22 5:01 ` Mike Galbraith
2014-08-22 7:29 ` Jason Wang
2014-08-22 7:42 ` Ingo Molnar
2014-08-29 3:08 ` Jason Wang
2014-09-01 6:39 ` Eliezer Tamir
2014-09-02 3:29 ` Jason Wang
2014-09-02 6:15 ` Eliezer Tamir
2014-09-02 7:37 ` Jason Wang
2014-09-02 8:31 ` Michael S. Tsirkin
2014-09-03 6:49 ` Eliezer Tamir
2014-09-03 7:33 ` Jason Wang
2014-09-03 9:36 ` Peter Zijlstra
2014-09-03 9:59 ` Michael S. Tsirkin
2014-09-03 7:51 ` Michael S. Tsirkin
2014-09-04 6:51 ` Eliezer Tamir
2014-09-04 8:25 ` Michael S. Tsirkin
2014-08-22 7:36 ` Ingo Molnar
2014-08-22 9:08 ` Jason Wang
2014-08-22 14:16 ` Eric Dumazet
2014-08-25 2:54 ` Jason Wang
2014-08-25 13:16 ` Eliezer Tamir
2014-08-26 7:16 ` Jason Wang
2014-09-01 6:55 ` Eliezer Tamir
2014-09-02 3:35 ` Jason Wang
2014-09-02 6:03 ` Eliezer Tamir
2014-09-02 6:31 ` Jason Wang
2014-09-03 6:21 ` Eliezer Tamir
2014-09-03 6:59 ` Jason Wang
2016-04-14 0:55 ` Peter Zijlstra
2014-09-03 8:09 ` Michael S. Tsirkin
2016-04-11 16:31 ` Michael S. Tsirkin
2016-04-13 7:20 ` Ingo Molnar
2016-04-13 13:28 ` Peter Zijlstra
2016-04-13 13:51 ` Michael S. Tsirkin
2016-04-14 0:58 ` Peter Zijlstra
2014-09-01 9:31 ` Peter Zijlstra
2014-09-01 9:52 ` Michael S. Tsirkin
2014-09-01 10:04 ` Peter Zijlstra
2014-09-01 10:19 ` Peter Zijlstra
2014-09-02 4:03 ` Jason Wang
2014-09-02 10:24 ` Peter Zijlstra
2014-09-03 6:58 ` Jason Wang
2014-09-03 9:30 ` Peter Zijlstra
2014-09-01 10:22 ` Michael S. Tsirkin
2014-09-02 3:38 ` Jason Wang
2014-09-02 6:12 ` Peter Zijlstra
2014-09-02 7:19 ` Jason Wang
2014-08-21 13:52 ` [PATCH net-next 1/2] sched: introduce nr_running_this_cpu() Ingo Molnar
2014-08-22 7:27 ` Jason Wang
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=1408608310-13579-2-git-send-email-jasowang@redhat.com \
--to=jasowang@redhat.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).