This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH][BZ #15533] Avoid unnecessary slowdown from profiling with audit
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: roland at hack dot frob dot com
- Cc: GNU C Library <libc-alpha at sourceware dot org>, Alexander Monakov <amonakov at ispras dot ru>
- Date: Sun, 8 Sep 2013 21:39:36 +0200
- Subject: Re: [PATCH][BZ #15533] Avoid unnecessary slowdown from profiling with audit
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot LNX dot 2 dot 00 dot 1305250406320 dot 23866 at monopod dot intra dot ispras dot ru> <alpine dot LNX dot 2 dot 00 dot 1308201645010 dot 2626 at monopod dot intra dot ispras dot ru>
On Tue, Aug 20, 2013 at 04:47:56PM +0400, Alexander Monakov wrote:
> Ping. URL to the original submission:
> http://sourceware.org/ml/libc-alpha/2013-05/msg00888.html
>
> The patch still applies as posted and passes testing (on x86_64-linux).
>
Roland, could you review this one? I do not know linker enough to
quickly verify if assumptions in this patch are true.
> On Sat, 25 May 2013, Alexander Monakov wrote:
>
> > Hello,
> >
> > Presently, using the rtld-audit interfaces introduces a slowdown due to
> > enabling profiling instrumentation (as if LD_AUDIT implied LD_PROFILE).
> > However, instrumenting is only necessary if one of audit libraries provides
> > PLT hooks (la_plt{enter,exit} symbols). Otherwise, the slowdown can be
> > avoided.
> >
> > In the synthetic test attached to the bugzilla issue, the slowdown is 19x. On
> > another application I tested, the slowdown from profiling was 10%. The
> > current behavior strongly discourages using the audit interface when
> > compromising performance is not desired.
> >
> > The following patch adjusts the logic that enables profiling to iterate over
> > all audit modules and check if any of those provides a PLT hook.
> >
> > I have an FSF copyright assignment as a GCC contributor (but I do not have
> > commit access in glibc).
> >
> > Thanks.
> >
> >
> > 2013-05-25 Alexander Monakov <amonakov@ispras.ru>
> >
> > * elf/dl-reloc.c (_dl_relocate_object): Enable profiling only if one
> > of audit libraries provides PLT hooks.
> >
> > diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
> > index 73d98f8..675e15b 100644
> > --- a/elf/dl-reloc.c
> > +++ b/elf/dl-reloc.c
> > @@ -167,7 +167,16 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
> > #ifdef SHARED
> > /* If we are auditing, install the same handlers we need for profiling. */
> > if ((reloc_mode & __RTLD_AUDIT) == 0)
> > - consider_profiling |= GLRO(dl_audit) != NULL;
> > + {
> > + struct audit_ifaces *afct = GLRO(dl_audit);
> > + for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
> > + {
> > + /* Profiling is needed only if PLT hooks are provided. */
> > + if (afct->ARCH_LA_PLTENTER != NULL || afct->ARCH_LA_PLTEXIT != NULL)
> > + consider_profiling = 1;
> > + afct = afct->next;
> > + }
> > + }
> > #elif defined PROF
> > /* Never use dynamic linker profiling for gprof profiling code. */
> > # define consider_profiling 0
> >