From: Eric Dumazet <eric.dumazet@gmail.com>
To: David Miller <davem@davemloft.net>
Cc: ling.ma.program@gmail.com, netdev@vger.kernel.org, maze@google.com
Subject: Re: [PATCH v2 net-next] inet: Get critical word in first 64bit of cache line
Date: Sun, 03 Feb 2013 16:25:09 -0800 [thread overview]
Message-ID: <1359937509.30177.131.camel@edumazet-glaptop> (raw)
In-Reply-To: <1359937109.30177.128.camel@edumazet-glaptop>
On Sun, 2013-02-03 at 16:18 -0800, Eric Dumazet wrote:
> On Sun, 2013-02-03 at 16:08 -0500, David Miller wrote:
> > From: Eric Dumazet <eric.dumazet@gmail.com>
> > Date: Sat, 02 Feb 2013 07:03:55 -0800
> >
> > > From: Ma Ling <ling.ma.program@gmail.com>
> > >
> > > In order to reduce memory latency when last level cache miss occurs,
> > > modern CPUs i.e. x86 and arm introduced Critical Word First(CWF) or
> > > Early Restart(ER) to get data ASAP. For CWF if critical word is first
> > > member
> > > in cache line, memory feed CPU with critical word, then fill others
> > > data in cache line one by one, otherwise after critical word it must
> > > cost more cycle to fill the remaining cache line. For Early First CPU
> > > will restart until critical word in cache line reaches.
> > >
> > > Hash value is critical word, so in this patch we place it as first
> > > member in cache line (sock address is cache-line aligned), and it is
> > > also good for Early Restart platform as well .
> > >
> > > [edumazet: respin on net-next after commit ce43b03e8889]
> > >
> > > Signed-off-by: Ma Ling <ling.ma.program@gmail.com>
> > > Signed-off-by: Eric Dumazet <edumazet@google.com>
> >
> > I completely agree with the other response to this patch in that
> > the description is bogus.
> >
> > If CWF is implemented in the cpu, it should exactly relieve us from
> > having to move things around in structures so carefully like this.
> >
> > Either the patch should be completely dropped (modern cpus don't
> > need this) or the commit message changed to reflect reality.
> >
> > It really makes a terrible impression upon me when the patch says
> > something which in fact is 180 degrees from reality.
>
> Hmm.
>
> Maybe the changelog is misleading, or maybe all the performance gains I
> have from this patch are probably some artifact or old/bad hardware, or
> something else.
>
>
>
> (Intel(R) Xeon(R) CPU X5660 @ 2.80GHz)
> # ./cwf
> looking-up aligned time 108712072,
> looking-up unaligned time 113268256
> looking-up aligned time 108677032,
> looking-up unaligned time 113297636
>
>
> (Intel(R) Xeon(R) CPU X5679 @ 3.20GHz)
> # ./cwf
> looking-up aligned time 139193589,
> looking-up unaligned time 144307821
> looking-up aligned time 139136787,
> looking-up unaligned time 144277752
>
> My laptop : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
> # ./cwf
> looking-up aligned time 84869203,
> looking-up unaligned time 86843462
> looking-up aligned time 84253003,
> looking-up unaligned time 86227675
>
> #include <stdio.h>
> #include <string.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> #define CACHELINE_SZ 64L
>
> #define BIGBUFFER_SZ (64<<20)
>
> # define HP_TIMING_NOW(Var) \
> ({ unsigned long long _hi, _lo; \
> asm volatile ("rdtsc" : "=a" (_lo), "=d" (_hi)); \
> (Var) = _hi << 32 | _lo; })
>
> #define repeat_times 20
>
> char *bufzap;
>
> static void zap_cache(void)
> {
> memset(bufzap, 2, BIGBUFFER_SZ);
> memset(bufzap, 3, BIGBUFFER_SZ);
> memset(bufzap, 4, BIGBUFFER_SZ);
> }
>
> static char *init_buf(void)
> {
> void *res;
>
> if (posix_memalign(&res, CACHELINE_SZ, BIGBUFFER_SZ)) {
> fprintf(stderr, "malloc() failed");
> exit(1);
> }
>
> memset(res, 1, BIGBUFFER_SZ);
> return res;
> }
>
> unsigned long total;
>
> static unsigned long random_access(void *buffer,
> unsigned int off1,
> unsigned int off2,
> unsigned int off3)
> {
> int i;
> unsigned int n;
> unsigned long sum = 0;
> unsigned long *ptr;
>
> srandom(7777);
> for (i = 0; i < 1000000; i++) {
> n = random() % (BIGBUFFER_SZ/CACHELINE_SZ);
> ptr = buffer + n*CACHELINE_SZ;
> if (ptr[off1])
> sum++;
> if (ptr[off2])
> sum++;
> // if (ptr[off3])
> // sum++;
Hmm, I don't know why I left a comment on these two lines...
Of course, results are a bit different removing the comments :
looking-up aligned time 113601316,
looking-up unaligned time 115964760
looking-up aligned time 113698636,
looking-up unaligned time 115986072
More testing is probably needed.
next prev parent reply other threads:[~2013-02-04 0:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1353900555-5966-1-git-send-email-ling.ma.program@gmail.com>
2012-11-26 6:44 ` [PATCH RFC] [INET]: Get cirtical word in first 64bit of cache line Eric Dumazet
2012-11-26 20:40 ` Ben Hutchings
2012-11-27 13:48 ` Ling Ma
2012-11-27 13:58 ` Eric Dumazet
2012-12-02 13:25 ` Ling Ma
2012-12-02 17:20 ` Eric Dumazet
2013-02-02 15:03 ` [PATCH v2 net-next] inet: Get critical " Eric Dumazet
2013-02-03 21:00 ` saeed bishara
2013-02-03 21:08 ` David Miller
2013-02-04 0:18 ` Eric Dumazet
2013-02-04 0:25 ` Eric Dumazet [this message]
2013-02-04 2:53 ` Ling Ma
2013-02-04 3:11 ` Eric Dumazet
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=1359937509.30177.131.camel@edumazet-glaptop \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=ling.ma.program@gmail.com \
--cc=maze@google.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