This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] Add framework for tunables


On Sun, Jul 3, 2016 at 8:13 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> 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.
>

>
>> +/* Same as TUNABLE_SET_VAL, but also set the callback function to __CB and call
>> +   it.  */
>> +# define TUNABLE_SET_VAL_WITH_CALLBACK(__id,__val,__cb) \
>> +({                                                                           \
>> +  __tunable_set_val                                                          \
>> +   (TUNABLE_ENUM_NAME (TOP_NAMESPACE, TUNABLE_NAMESPACE, __id), (__val),      \
>> +    DL_TUNABLE_CALLBACK (__cb));                                             \
>> +})
>> +
>> +/* Namespace sanity for callback functions.  Use this macro to keep the
>> +   namespace of the modules clean.  */
>> +#define DL_TUNABLE_CALLBACK(__name) _dl_tunable_ ## __name
>> +#endif
>
> For IFUNC, or any processor specific tunables, a different callback is
> needed:
>
> void
> ifunc_callback (const char *p)
> {
> ...
> }
>
> where p is the string after "GLIBC_IFUNC=".
>
> H.J.

This should be an option for __tunables_init not to parse the
string, but instead pass the string to callback directly.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]