From: Santosh Sivaraj <santosh@fossix.org>
To: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Cc: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
Michael Ellerman <mpe@ellerman.id.au>,
John Stultz <john.stultz@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <fweisbec@gmail.com>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: [PATCH 2/2] powerpc/vdso64: Add support for CLOCK_{REALTIME/MONOTONIC}_COARSE
Date: Mon, 9 Oct 2017 11:57:10 +0530 [thread overview]
Message-ID: <20171009062710.rqrvsrvef4kmswn2@santosiv.in.ibm.com> (raw)
In-Reply-To: <20171006092830.6rrkabakrlr6rl7g@naverao1-tp.localdomain>
* Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> wrote (on 2017-10-06 09:28:30 +0000):
> On 2017/09/18 09:23AM, Santosh Sivaraj wrote:
> > Current vDSO64 implementation does not have support for coarse clocks
> > (CLOCK_MONOTONIC_COARSE, CLOCK_REALTIME_COARSE), for which it falls back
> > to system call, increasing the response time, vDSO implementation reduces
> > the cycle time. Below is a benchmark of the difference in execution time
> > with and without vDSO support.
> >
> > (Non-coarse clocks are also included just for completion)
> >
> > Without vDSO support:
> > --------------------
> > clock-gettime-realtime: syscall: 172 nsec/call
> > clock-gettime-realtime: libc: 26 nsec/call
> > clock-gettime-realtime: vdso: 21 nsec/call
> > clock-gettime-monotonic: syscall: 170 nsec/call
> > clock-gettime-monotonic: libc: 30 nsec/call
> > clock-gettime-monotonic: vdso: 24 nsec/call
> > clock-gettime-realtime-coarse: syscall: 153 nsec/call
> > clock-gettime-realtime-coarse: libc: 15 nsec/call
> > clock-gettime-realtime-coarse: vdso: 9 nsec/call
> > clock-gettime-monotonic-coarse: syscall: 167 nsec/call
> > clock-gettime-monotonic-coarse: libc: 15 nsec/call
> > clock-gettime-monotonic-coarse: vdso: 11 nsec/call
> >
> > CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > Signed-off-by: Santosh Sivaraj <santosh@fossix.org>
> > ---
> > arch/powerpc/kernel/asm-offsets.c | 2 ++
> > arch/powerpc/kernel/vdso64/gettimeofday.S | 56 +++++++++++++++++++++++++++++++
> > 2 files changed, 58 insertions(+)
> >
> > diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
> > index 8cfb20e38cfe..b55c68c54dc1 100644
> > --- a/arch/powerpc/kernel/asm-offsets.c
> > +++ b/arch/powerpc/kernel/asm-offsets.c
> > @@ -396,6 +396,8 @@ int main(void)
> > /* Other bits used by the vdso */
> > DEFINE(CLOCK_REALTIME, CLOCK_REALTIME);
> > DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC);
> > + DEFINE(CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
> > + DEFINE(CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
> > DEFINE(NSEC_PER_SEC, NSEC_PER_SEC);
> > DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
> >
> > diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S
> > index a0b4943811db..bae197a81add 100644
> > --- a/arch/powerpc/kernel/vdso64/gettimeofday.S
> > +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S
> > @@ -71,6 +71,11 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime)
> > cror cr0*4+eq,cr0*4+eq,cr1*4+eq
> > beq cr0,49f
> >
> > + cmpwi cr0,r3,CLOCK_REALTIME_COARSE
> > + cmpwi cr1,r3,CLOCK_MONOTONIC_COARSE
> > + cror cr0*4+eq,cr0*4+eq,cr1*4+eq
> > + beq cr0,65f
>
> If you use cr5-7 here, you should be able to re-organize this to not
> have to update r4/r11/r12 if we're taking the syscall path. Not
> necessarily a huge win by itself, but can also help reuse some of the
> other code between the _COARSE and the regular variants.
>
If we are going to use cr5-7, then the first patch is no longer required, we
don't have to do a re-org of the intial clock_id checks. I will send the
updated patch.
Thanks,
Santosh
> - Naveen
>
> > +
> > b 99f /* Fallback to syscall */
> > .cfi_register lr,r12
> > 49: bl V_LOCAL_FUNC(__get_datapage) /* get data page */
> > @@ -112,6 +117,57 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime)
> > 1: bge cr1,80f
> > addi r4,r4,-1
> > add r5,r5,r7
> > + b 80f
> > +
> > + /*
> > + * For coarse clocks we get data directly from the vdso data page, so
> > + * we don't need to call __do_get_tspec, but we still need to do the
> > + * counter trick.
> > + */
> > +65: bl V_LOCAL_FUNC(__get_datapage) /* get data page */
> > +70: ld r8,CFG_TB_UPDATE_COUNT(r3)
> > + andi. r0,r8,1 /* pending update ? loop */
> > + bne- 70b
> > + xor r0,r8,r8 /* create dependency */
> > + add r3,r3,r0
> > +
> > + /*
> > + * CLOCK_REALTIME_COARSE, below values are needed for MONOTONIC_COARSE
> > + * too
> > + */
> > + ld r4,STAMP_XTIME+TSPC64_TV_SEC(r3)
> > + ld r5,STAMP_XTIME+TSPC64_TV_NSEC(r3)
> > + bne cr1,78f
> > +
> > + /* CLOCK_MONOTONIC_COARSE */
> > + lwa r6,WTOM_CLOCK_SEC(r3)
> > + lwa r9,WTOM_CLOCK_NSEC(r3)
> > +
> > + /* check if counter has updated */
> > +78: or r0,r6,r9
> > + xor r0,r0,r0
> > + add r3,r3,r0
> > + ld r0,CFG_TB_UPDATE_COUNT(r3)
> > + cmpld cr0,r0,r8 /* check if updated */
> > + bne- 70b
> > +
> > + /* Counter has not updated, so continue calculating proper values for
> > + * sec and nsec if monotonic coarse, or just return with the proper
> > + * values for realtime.
> > + */
> > + bne cr1,80f
> > +
> > + /* Add wall->monotonic offset and check for overflow or underflow */
> > + add r4,r4,r6
> > + add r5,r5,r9
> > + cmpd cr0,r5,r7
> > + cmpdi cr1,r5,0
> > + blt 79f
> > + subf r5,r7,r5
> > + addi r4,r4,1
> > +79: bge cr1,80f
> > + addi r4,r4,-1
> > + add r5,r5,r7
> >
> > 80: std r4,TSPC64_TV_SEC(r11)
> > std r5,TSPC64_TV_NSEC(r11)
> > --
> > 2.13.5
> >
>
--
next prev parent reply other threads:[~2017-10-09 6:27 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-18 9:23 [PATCH 1/2] powerpc/vdso64: Coarse timer support preparatory patch Santosh Sivaraj
2017-09-18 9:23 ` [PATCH 2/2] powerpc/vdso64: Add support for CLOCK_{REALTIME/MONOTONIC}_COARSE Santosh Sivaraj
2017-10-06 9:28 ` Naveen N. Rao
2017-10-09 6:27 ` Santosh Sivaraj [this message]
2017-10-06 11:25 ` Naveen N. Rao
2017-10-09 6:23 ` Santosh Sivaraj
2017-10-09 8:09 ` [PATCH v4] " Santosh Sivaraj
2017-10-09 10:39 ` Naveen N. Rao
2017-10-10 9:03 ` Santosh Sivaraj
2017-10-10 9:30 ` Naveen N. Rao
2017-10-10 23:10 ` [PATCH v6] " Santosh Sivaraj
2017-10-11 7:04 ` Naveen N. Rao
2017-10-11 7:38 ` Santosh Sivaraj
2017-10-06 9:03 ` [PATCH 1/2] powerpc/vdso64: Coarse timer support preparatory patch Naveen N. Rao
2017-10-06 10:13 ` Michael Ellerman
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=20171009062710.rqrvsrvef4kmswn2@santosiv.in.ibm.com \
--to=santosh@fossix.org \
--cc=benh@kernel.crashing.org \
--cc=fweisbec@gmail.com \
--cc=john.stultz@linaro.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=naveen.n.rao@linux.vnet.ibm.com \
--cc=srikar@linux.vnet.ibm.com \
--cc=tglx@linutronix.de \
/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.