From: Simon Guo <wei.guo.simon@gmail.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: Segher Boessenkool <segher@kernel.crashing.org>,
Cyril Bur <cyrilbur@gmail.com>,
raji@linux.vnet.ibm.com,
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>,
David Laight <David.Laight@ACULAB.COM>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 2/3] powerpc/64: enhance memcmp() with VMX instruction for long bytes comparision
Date: Thu, 28 Sep 2017 00:22:44 +0800 [thread overview]
Message-ID: <20170927162243.GA2752@simonLocalRHEL7.x64> (raw)
In-Reply-To: <877ewkg6am.fsf@concordia.ellerman.id.au>
Hi Michael,
On Wed, Sep 27, 2017 at 01:38:09PM +1000, Michael Ellerman wrote:
> Segher Boessenkool <segher@kernel.crashing.org> writes:
>
> > On Tue, Sep 26, 2017 at 03:34:36PM +1000, Michael Ellerman wrote:
> >> Cyril Bur <cyrilbur@gmail.com> writes:
> >> > This was written for userspace which doesn't have to explicitly enable
> >> > VMX in order to use it - we need to be smarter in the kernel.
> >>
> >> Well the kernel has to do it for them after a trap, which is actually
> >> even more expensive, so arguably the glibc code should be smarter too
> >> and the threshold before using VMX should probably be higher than in the
> >> kernel (to cover the cost of the trap).
> >
> > A lot of userspace code uses V*X, more and more with newer CPUs and newer
> > compiler versions. If you already paid the price for using vector
> > registers you do not need to again :-)
>
> True, but you don't know if you've paid the price already.
>
> You also pay the price on every context switch (more state to switch),
> so it's not free even once enabled. Which is why the kernel will
> eventually turn it off if it's unused again.
>
> But now that I've actually looked at the glibc version, it does do some
> checks for minimum length before doing any vector instructions, so
Looks the glibc version will use VSX instruction and lead to trap in a
9 bytes size cmp with src/dst 16 bytes aligned.
132 /* Now both rSTR1 and rSTR2 are aligned to QW. */
133 .align 4
134 L(qw_align):
135 vspltisb v0, 0
136 srdi. r6, rN, 6
137 li r8, 16
138 li r10, 32
139 li r11, 48
140 ble cr0, L(lessthan64)
141 mtctr r6
142 vspltisb v8, 0
143 vspltisb v6, 0
144 /* Aligned vector loop. */
145 .align 4
line 135 is the VSX instruction causing trap. Did I miss anything?
> that's probably all we want. The exact trade off between checking some
> bytes without vector vs turning on vector depends on your input data, so
> it's tricky to tune in general.
Discussed offline with Cyril. The plan is to use (>=4KB) as the minimum len
before vector regs steps at v3. Cyril will consolidate his existing work on
KSM optimization later, which is probably making 64bytes comparison-ahead to
determine whether it is an early or late matching pattern.
Cyril has also some other valuable comments and I will rework on v3.
Is it OK for you?
Thanks,
- Simon
next prev parent reply other threads:[~2017-09-28 3:15 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-20 23:34 [PATCH v2 0/3] powerpc/64: memcmp() optimization wei.guo.simon
2017-09-20 23:34 ` [PATCH v2 1/3] powerpc/64: Align bytes before fall back to .Lshort in powerpc64 memcmp() wei.guo.simon
2017-09-20 23:34 ` [PATCH v2 2/3] powerpc/64: enhance memcmp() with VMX instruction for long bytes comparision wei.guo.simon
2017-09-21 0:54 ` Simon Guo
2017-09-22 14:06 ` Cyril Bur
2017-09-23 21:18 ` Simon Guo
2017-09-25 23:59 ` Cyril Bur
2017-09-26 5:34 ` Michael Ellerman
2017-09-26 11:26 ` Segher Boessenkool
2017-09-27 3:38 ` Michael Ellerman
2017-09-27 9:27 ` Segher Boessenkool
2017-09-27 9:43 ` David Laight
2017-09-27 18:33 ` Simon Guo
2017-09-28 9:24 ` David Laight
2017-09-27 16:22 ` Simon Guo [this message]
2017-09-20 23:34 ` [PATCH v2 3/3] powerpc:selftest update memcmp_64 selftest for VMX implementation wei.guo.simon
2017-09-25 9:30 ` David Laight
2017-09-24 6:19 ` Simon Guo
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=20170927162243.GA2752@simonLocalRHEL7.x64 \
--to=wei.guo.simon@gmail.com \
--cc=David.Laight@ACULAB.COM \
--cc=cyrilbur@gmail.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=naveen.n.rao@linux.vnet.ibm.com \
--cc=raji@linux.vnet.ibm.com \
--cc=segher@kernel.crashing.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).