This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 1/2] Add framework for tunables
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Siddhesh Poyarekar <siddhesh at sourceware dot org>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Sun, 3 Jul 2016 07:44:25 -0700
- Subject: Re: [PATCH 1/2] Add framework for tunables
- Authentication-results: sourceware.org; auth=none
- References: <1467479562-11357-1-git-send-email-siddhesh at sourceware dot org> <1467479562-11357-2-git-send-email-siddhesh at sourceware dot org>
On Sat, Jul 2, 2016 at 10:12 AM, Siddhesh Poyarekar
<siddhesh@sourceware.org> wrote:
> The tunables framework allows us to uniformly manage and expose global
> variables inside glibc as switches to users. README.tunables has
> instructions for glibc developers to add new tunables.
>
> Tunables support can be enabled by passing the --enable-tunables
> configure flag to the configure script. This patch only adds a
> framework and does not pose any limitations on how tunable values are
> read from the user. It also adds environment variables used in malloc
> behaviour tweaking to the tunables framework as a PoC of the
> compatibility interface.
>
> * manual/install.texi: Add --enable-tunables option.
> * INSTALL: Regenerate.
> * Makeconfig (CPPFLAGS): Define TOP_NAMESPACE.
> (before-compile): Generate dl-tunable-list.h early.
> * config.h.in: Add BUILD_TUNABLES.
> * config.make.in: Add build-tunables.
> * configure.ac: Add --enable-tunables option.
> * configure: Regenerate.
> * malloc/arena.c [BUILD_TUNABLES]: Include dl-tunables.h.
> Define TUNABLE_NAMESPACE.
> (DL_TUNABLE_CALLBACK(set_mallopt_check)): New function.
> (ptmalloc_init): Set tunable values.
> * malloc/tst-malloc-usable-static.c: New test case.
> * csu/init-first.c [BUILD_TUNABLES]: Include dl-tunables.h.
> (__libc_init_first) [!SHARED]: Initialize tunables for static
> binaries.
> * scripts/gen-tunables.awk: New file.
> * README.tunables: New file.
> * elf/Versions (ld): Add __tunable_set_val to GLIBC_PRIVATE
> namespace.
> * elf/dl-tunable-list.h: New auto-generated file.
> * elf/dl-tunables.c: New file.
> * elf/dl-tunables.h: New file.
> * elf/dl-tunables.list: New file.
> * elf/dl-tunable-types.h: New file.
> * elf/rtld.c [BUILD_TUNABLES]: Include dl-tunables.h
> (process_envvars): Call __tunables_init.
> +
> +/* Compare environment names, bounded by the name hardcoded in glibc. */
> +static bool
> +is_name (const char *orig, const char *envname)
> +{
> + for (;*orig != '\0' && *envname != '\0'; envname++, orig++)
> + if (*orig != *envname)
> + break;
> +
> + /* The ENVNAME is immediately followed by a value. */
> + if (*orig == '\0' && *envname == '=')
> + return true;
> + else
> + return false;
> +}
Can you add the length parameter to is_name and make is_name
processor specific so that misaligned short/int/long long load can
be used, similar to equal in
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/x86/cpu-features.c;h=3ae44cfb86e39b41c43903e403325541476b37bf;hb=refs/heads/hjl/ifunc/master
H.J.