All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay.com>
To: David Miller <davem@davemloft.net>
Cc: ilpo.jarvinen@helsinki.fi, shemminger@vyatta.com,
	zbr@ioremap.net, rjw@sisk.pl, mingo@elte.hu,
	s0mbre@tservice.net.ru, a.p.zijlstra@chello.nl,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	efault@gmx.de, akpm@linux-foundation.org
Subject: Re: [tbench regression fixes]: digging out smelly deadmen.
Date: Fri, 31 Oct 2008 11:45:33 +0100	[thread overview]
Message-ID: <490AE1CD.9040207@cosmosbay.com> (raw)
In-Reply-To: <20081031.025159.51432990.davem@davemloft.net>

[-- Attachment #1: Type: text/plain, Size: 1359 bytes --]

David Miller a écrit :
> From: "Ilpo Järvinen" <ilpo.jarvinen@helsinki.fi>
> Date: Fri, 31 Oct 2008 11:40:16 +0200 (EET)
> 
>> Let me remind that it is just a single process, so no ping-pong & other 
>> lock related cache effects should play any significant role here, no? (I'm 
>> no expert though :-)).
> 
> Not locks or ping-pongs perhaps, I guess.  So it just sends and
> receives over a socket, implementing both ends of the communication
> in the same process?
> 
> If hash chain conflicts do happen for those 2 sockets, just traversing
> the chain 2 entries deep could show up.

tbench is very sensible to cache line ping-pongs (on SMP machines of course)

Just to prove my point, I coded the following patch and tried it
on a HP BL460c G1. This machine has 2 quad cores cpu 
(Intel(R) Xeon(R) CPU E5450  @3.00GHz)

tbench 8 went from 2240 MB/s to 2310 MB/s after this patch applied

[PATCH] net: Introduce netif_set_last_rx() helper

On SMP machine, loopback device (and possibly others net device)
should try to avoid dirty the memory cache line containing "last_rx"
field. Got 3% increase on tbench on a 8 cpus machine.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
---
 drivers/net/loopback.c    |    2 +-
 include/linux/netdevice.h |   16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)


[-- Attachment #2: netif_set_last_rx.patch --]
[-- Type: text/plain, Size: 1232 bytes --]

diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index 3b43bfd..cf17238 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -85,7 +85,7 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
 		return 0;
 	}
 #endif
-	dev->last_rx = jiffies;
+	netif_set_last_rx(dev);
 
 	/* it's OK to use per_cpu_ptr() because BHs are off */
 	pcpu_lstats = dev->ml_priv;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index c8bcb59..6729865 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -849,6 +849,22 @@ static inline void *netdev_priv(const struct net_device *dev)
 #define SET_NETDEV_DEV(net, pdev)	((net)->dev.parent = (pdev))
 
 /**
+ *	netif_set_last_rx - Set last_rx field of a device
+ *	@dev:  network device
+ *
+ * Instead of setting net->last_rx to jiffies, drivers should call this helper
+ * to avoid dirtying a cache line if last_rx already has the current jiffies
+ */
+static inline void netif_set_last_rx(struct net_device *dev)
+{
+#ifdef CONFIG_SMP
+	if (dev->last_rx == jiffies)
+		return;
+#endif
+	dev->last_rx = jiffies;
+}
+
+/**
  *	netif_napi_add - initialize a napi context
  *	@dev:  network device
  *	@napi: napi context

  parent reply	other threads:[~2008-10-31 10:46 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-09 23:17 [tbench regression fixes]: digging out smelly deadmen Evgeniy Polyakov
2008-10-10  5:40 ` Peter Zijlstra
2008-10-10  8:09 ` Evgeniy Polyakov
2008-10-10  9:15   ` Ingo Molnar
2008-10-10 11:31     ` Evgeniy Polyakov
2008-10-10 11:40       ` Ingo Molnar
2008-10-10 13:25         ` Evgeniy Polyakov
2008-10-10 11:42       ` Ingo Molnar
2008-10-10 11:55         ` Evgeniy Polyakov
2008-10-10 11:57           ` Ingo Molnar
2008-10-24 22:25             ` Rafael J. Wysocki
2008-10-24 23:31               ` David Miller
2008-10-25  4:05                 ` Mike Galbraith
2008-10-25  5:15                   ` David Miller
2008-10-25  5:53                     ` Mike Galbraith
2008-10-25 11:13                 ` Rafael J. Wysocki
2008-10-26  3:55                   ` David Miller
2008-10-26 11:33                     ` Rafael J. Wysocki
2008-10-25  3:37               ` Mike Galbraith
2008-10-25  5:16                 ` David Miller
2008-10-25  5:58                   ` Mike Galbraith
2008-10-25  6:53                     ` Mike Galbraith
2008-10-25  7:24                       ` David Miller
2008-10-25  7:52                         ` Mike Galbraith
2008-10-25 23:10                         ` Jiri Kosina
2008-10-26  8:46                           ` Mike Galbraith
2008-10-26  9:00                             ` Peter Zijlstra
2008-10-26  9:11                               ` Andrew Morton
2008-10-26  9:27                                 ` Evgeniy Polyakov
2008-10-26  9:34                                   ` Andrew Morton
2008-10-26 10:05                                     ` Evgeniy Polyakov
2008-10-27  2:34                                       ` David Miller
2008-10-27  9:30                                         ` Ingo Molnar
2008-10-27  9:57                                           ` David Miller
2008-10-26 10:23                                 ` Mike Galbraith
2008-10-26 19:03                                 ` Jiri Kosina
2008-10-27  9:29                                   ` Mike Galbraith
2008-10-27 10:42                                   ` Jiri Kosina
2008-10-27 11:27                                     ` Ingo Molnar
2008-10-27 11:33                                       ` Alan Cox
2008-10-27 12:06                                         ` Mike Galbraith
2008-10-27 13:42                                           ` Jiri Kosina
2008-10-27 14:17                                             ` Mike Galbraith
2008-10-27 18:33                                         ` Ingo Molnar
2008-10-27 19:39                                           ` Evgeniy Polyakov
2008-10-27 19:48                                             ` David Miller
2008-10-28 10:24                                               ` Mike Galbraith
2008-10-28 10:37                                                 ` Ingo Molnar
2008-10-28 10:57                                                   ` Mike Galbraith
2008-10-28 11:02                                                     ` Ingo Molnar
2008-10-28 14:00                                                     ` Mike Galbraith
2008-10-28 15:22                                                       ` Mike Galbraith
2008-10-29  9:14                                                   ` Evgeniy Polyakov
2008-10-29  9:50                                                     ` Evgeniy Polyakov
2008-11-01 12:51                                                       ` Paolo Ciarrocchi
2008-10-29  9:59                                           ` Nick Piggin
2008-10-26  9:15                               ` Mike Galbraith
2008-10-25  7:19                     ` David Miller
2008-10-25  7:33                       ` Mike Galbraith
2008-10-27 17:26                         ` Rick Jones
2008-10-27 19:11                           ` Mike Galbraith
2008-10-27 19:18                             ` Rick Jones
2008-10-27 19:44                               ` Mike Galbraith
2008-10-26 11:29               ` Evgeniy Polyakov
2008-10-26 12:23                 ` Evgeniy Polyakov
2008-10-30 18:15                   ` Stephen Hemminger
2008-10-30 18:40                     ` Evgeniy Polyakov
2008-10-30 18:43                     ` Eric Dumazet
2008-10-30 18:56                       ` Eric Dumazet
2008-10-30 19:01                     ` Ilpo Järvinen
2008-10-31  7:52                       ` David Miller
2008-10-31  9:40                         ` Ilpo Järvinen
2008-10-31  9:51                           ` David Miller
2008-10-31 10:42                             ` Ilpo Järvinen
2008-10-31 10:45                             ` Eric Dumazet [this message]
2008-10-31 11:01                               ` Ilpo Järvinen
2008-10-31 11:10                                 ` Eric Dumazet
2008-10-31 11:15                                   ` Ilpo Järvinen
2008-10-31 19:57                               ` Stephen Hemminger
2008-10-31 20:10                                 ` Evgeniy Polyakov
2008-10-31 21:03                                   ` Eric Dumazet
2008-10-31 21:18                                     ` Evgeniy Polyakov
2008-10-31 23:51                                     ` David Miller
2008-10-31 23:56                                       ` Stephen Hemminger
2008-11-01  0:16                                         ` Jay Vosburgh
2008-11-02  4:40                                           ` David Miller
2008-11-04  2:13                                             ` [PATCH net-next-2.6] bonding, net: Move last_rx update into bonding recv logic Jay Vosburgh
2008-11-04  2:17                                               ` David Miller
2008-10-10 10:13 ` [tbench regression fixes]: digging out smelly deadmen Mike Galbraith
2008-10-11 13:13   ` Evgeniy Polyakov
2008-10-11 14:39     ` Peter Zijlstra
2008-10-11 18:13       ` Mike Galbraith
2008-10-12  6:02         ` Mike Galbraith
2008-10-12  6:33           ` Mike Galbraith

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=490AE1CD.9040207@cosmosbay.com \
    --to=dada1@cosmosbay.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=efault@gmx.de \
    --cc=ilpo.jarvinen@helsinki.fi \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=s0mbre@tservice.net.ru \
    --cc=shemminger@vyatta.com \
    --cc=zbr@ioremap.net \
    /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.