From: Siddhesh Poyarekar <siddhesh@sourceware.org>
To: libc-alpha@sourceware.org
Subject: [PATCH 5/6] Enhance --enable-tunables to select tunables frontend at build time
Date: Mon, 24 Oct 2016 14:43:00 -0000 [thread overview]
Message-ID: <1477320168-23397-6-git-send-email-siddhesh@sourceware.org> (raw)
In-Reply-To: <1477320168-23397-1-git-send-email-siddhesh@sourceware.org>
At the GNU Tools Cauldron 2016, the state of the current tunables
patchset was considered OK with the addition of a way to select the
frontend to be used for the tunables. That is, to avoid being locked
in to one type of frontend initially, it should be possible to build
tunables with a different frontend with something as simple as a
configure switch.
To that effect, this patch enhances the --enable-tunables option to
accept more values than just 'yes' or 'no'. The current frontend (and
default when enable-tunables is 'yes') is called 'valstring', to
select the frontend where a single environment variable is set to a
colon-separated value string. More such frontends can be added in
future.
* Makeconfig (have-tunables): Check for non-negative instead
of positive.
* configure.ac: Add 'valstring' as a valid value for
--enable-tunables.
* configure: Regenerate.
* elf/Makefile (have-tunables): Check for non-negative instead
of positive.
(CPPFLAGS-dl-tunables.c): Define TUNABLES_FRONTEND for
dl-tunables.c.
* elf/dl-tunables.c (GLIBC_TUNABLES): Define only when
TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
(tunables_strdup): Likewise.
(disable_tunables): Likewise.
(parse_tunables): Likewise.
(__tunables_init): Process GLIBC_TUNABLES envvar only when.
TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
* elf/dl-tunables.h (TUNABLES_FRONTEND_valstring): New macro.
(TUNABLES_FRONTEND_yes): New macro, define as
TUNABLES_FRONTEND_valstring by default.
* manual/install.texi: Document new acceptable values for
--enable-tunables.
* INSTALL: Regenerate.
---
INSTALL | 15 ++++++++++++++-
Makeconfig | 4 ++--
configure | 3 ++-
configure.ac | 2 +-
elf/Makefile | 4 +++-
elf/dl-tunables.c | 12 +++++++++++-
elf/dl-tunables.h | 4 ++++
manual/install.texi | 18 +++++++++++++++++-
8 files changed, 54 insertions(+), 8 deletions(-)
diff --git a/INSTALL b/INSTALL
index ccacccc..55f6a23 100644
--- a/INSTALL
+++ b/INSTALL
@@ -161,7 +161,20 @@ will be used, and CFLAGS sets optimization options for the compiler.
'--enable-tunables'
Tunables support allows additional library parameters to be
customized at runtime. This is an experimental feature and affects
- startup time and is thus disabled by default.
+ startup time and is thus disabled by default. This option can take
+ the following values:
+
+ * NO This is the default if the option is not passed to
+ configure. This disables tunables.
+
+ * YES This is the default if the option is passed to configure.
+ This enables tunables and selects the default frontend
+ (currently VALSTRING).
+
+ * VALSTRING This enables tunables and selects the VALSTRING
+ frontend for tunables. This frontend allows users to specify
+ tunables as a colon-separated list in a single environment
+ variable GLIBC_TUNABLES.
'--build=BUILD-SYSTEM'
'--host=HOST-SYSTEM'
diff --git a/Makeconfig b/Makeconfig
index 7f5d645..0eebc92 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -884,7 +884,7 @@ CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
$(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
CPPFLAGS += -DTOP_NAMESPACE=glibc
endif
@@ -1064,7 +1064,7 @@ endif
# Build the tunables list header early since it could be used by any module in
# glibc.
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
before-compile += $(common-objpfx)dl-tunable-list.h
$(common-objpfx)dl-tunable-list.h: $(..)scripts/gen-tunables.awk \
diff --git a/configure b/configure
index f3526f4..8d1da68 100755
--- a/configure
+++ b/configure
@@ -1445,7 +1445,8 @@ Optional Features:
--disable-build-nscd disable building and installing the nscd daemon
--disable-nscd library functions will not contact the nscd daemon
--enable-pt_chown Enable building and installing pt_chown
- --enable-tunables Enable tunables support
+ --enable-tunables Enable tunables support. Known values are 'yes',
+ 'no' and 'valstring'
--enable-mathvec Enable building and installing mathvec [default
depends on architecture]
diff --git a/configure.ac b/configure.ac
index 1255b08..20c419a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -397,7 +397,7 @@ fi
AC_ARG_ENABLE([tunables],
[AS_HELP_STRING([--enable-tunables],
- [Enable tunables support])],
+ [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
[have_tunables=$enableval],
[have_tunables=no])
AC_SUBST(have_tunables)
diff --git a/elf/Makefile b/elf/Makefile
index 8d3f4ff..5dc3d66 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -36,8 +36,10 @@ ifeq (yes,$(use-ldconfig))
dl-routines += dl-cache
endif
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
dl-routines += dl-tunables
+tunables-type = $(addprefix TUNABLES_FRONTEND_,$(have-tunables))
+CPPFLAGS-dl-tunables.c = -DTUNABLES_FRONTEND=$(tunables-type)
endif
all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
index 6612885..82e9d9a 100644
--- a/elf/dl-tunables.c
+++ b/elf/dl-tunables.c
@@ -30,7 +30,9 @@
#define TUNABLES_INTERNAL 1
#include "dl-tunables.h"
-#define GLIBC_TUNABLES "GLIBC_TUNABLES"
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
+# define GLIBC_TUNABLES "GLIBC_TUNABLES"
+#endif
/* Compare environment names, bounded by the name hardcoded in glibc. */
static bool
@@ -47,6 +49,7 @@ is_name (const char *orig, const char *envname)
return false;
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static char *tunables_strdup (const char *in)
{
size_t i = 0;
@@ -67,6 +70,7 @@ static char *tunables_strdup (const char *in)
return out;
}
+#endif
static char **
get_next_env (char **envp, char **name, size_t *namelen, char **val)
@@ -232,6 +236,7 @@ tunable_initialize (tunable_t *cur, const char *strval)
}
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static void
parse_tunables (char *tunestr)
{
@@ -297,6 +302,7 @@ parse_tunables (char *tunestr)
return;
}
}
+#endif
/* Disable a tunable if it is set. */
static void
@@ -307,6 +313,7 @@ disable_tunable (tunable_id_t id, char **envp)
if (env_alias)
tunables_unsetenv (envp, tunable_list[id].env_alias);
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
char *tunable = getenv (GLIBC_TUNABLES);
const char *cmp = tunable_list[id].name;
const size_t len = strlen (cmp);
@@ -323,6 +330,7 @@ disable_tunable (tunable_id_t id, char **envp)
}
tunable++;
}
+#endif
}
/* Disable the glibc.malloc.check tunable in SETUID/SETGID programs unless
@@ -353,6 +361,7 @@ __tunables_init (char **envp)
while ((envp = get_next_env (envp, &envname, &len, &envval)) != NULL)
{
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
if (is_name (GLIBC_TUNABLES, envname))
{
char *val = tunables_strdup (envval);
@@ -360,6 +369,7 @@ __tunables_init (char **envp)
parse_tunables (val);
continue;
}
+#endif
for (int i = 0; i < sizeof (tunable_list) / sizeof (tunable_t); i++)
{
diff --git a/elf/dl-tunables.h b/elf/dl-tunables.h
index 10a644b..27b1b64 100644
--- a/elf/dl-tunables.h
+++ b/elf/dl-tunables.h
@@ -75,4 +75,8 @@ extern void __tunable_set_val (tunable_id_t, void *, tunable_callback_t);
/* Namespace sanity for callback functions. Use this macro to keep the
namespace of the modules clean. */
#define DL_TUNABLE_CALLBACK(__name) _dl_tunable_ ## __name
+
+# define TUNABLES_FRONTEND_valstring 1
+/* The default value for TUNABLES_FRONTEND. */
+# define TUNABLES_FRONTEND_yes TUNABLES_FRONTEND_valstring
#endif
diff --git a/manual/install.texi b/manual/install.texi
index ffc166d..e34c7bf 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -192,7 +192,23 @@ Use this option to disable the vector math library.
@item --enable-tunables
Tunables support allows additional library parameters to be customized at
runtime. This is an experimental feature and affects startup time and is thus
-disabled by default.
+disabled by default. This option can take the following values:
+
+@itemize @bullet
+@item @var{no}
+This is the default if the option is not passed to configure. This disables
+tunables.
+
+@item @var{yes}
+This is the default if the option is passed to configure. This enables tunables
+and selects the default frontend (currently @var{valstring}).
+
+@item @var{valstring}
+This enables tunables and selects the @var{valstring} frontend for tunables.
+This frontend allows users to specify tunables as a colon-separated list in a
+single environment variable @var{GLIBC_TUNABLES}.
+
+@end itemize
@item --build=@var{build-system}
@itemx --host=@var{host-system}
--
2.7.4
next prev parent reply other threads:[~2016-10-24 14:43 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-24 14:43 [PATCH v5 0/6] glibc tunables Siddhesh Poyarekar
2016-10-24 14:43 ` [PATCH 1/6] Static inline functions for mallopt helpers Siddhesh Poyarekar
2016-10-26 17:51 ` DJ Delorie
2016-10-27 3:12 ` Siddhesh Poyarekar
2016-10-24 14:43 ` [PATCH 3/6] Add framework for tunables Siddhesh Poyarekar
2016-10-24 14:43 ` [PATCH 4/6] Initialize tunable list with the GLIBC_TUNABLES environment variable Siddhesh Poyarekar
2016-10-24 15:01 ` Andreas Schwab
2016-10-26 9:48 ` Siddhesh Poyarekar
2016-10-24 14:43 ` Siddhesh Poyarekar [this message]
2016-10-24 14:43 ` [PATCH 6/6] User manual documentation for tunables Siddhesh Poyarekar
2016-10-24 17:22 ` Joseph Myers
2016-10-26 9:53 ` Siddhesh Poyarekar
2016-10-24 14:43 ` [PATCH 2/6] New internal function __access_noerrno Siddhesh Poyarekar
2016-11-08 17:10 ` Adhemerval Zanella
2016-11-08 19:00 ` Siddhesh Poyarekar
2016-11-10 5:47 ` Siddhesh Poyarekar
2016-11-10 12:15 ` Adhemerval Zanella
2016-11-10 13:05 ` Siddhesh Poyarekar
2016-11-10 16:07 ` Adhemerval Zanella
2016-11-03 10:26 ` [PING][PATCH v5 0/6] glibc tunables Siddhesh Poyarekar
2016-11-08 5:37 ` [PING 2][PATCH " Siddhesh Poyarekar
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=1477320168-23397-6-git-send-email-siddhesh@sourceware.org \
--to=siddhesh@sourceware.org \
--cc=libc-alpha@sourceware.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 read-only IMAP folder(s) and NNTP newsgroup(s).