[PATCH] x86: Add thresholds for "rep movsb/stosb" to tunables

Carlos O'Donell carlos@redhat.com
Tue Jun 2 02:08:15 GMT 2020

On Mon, Jun 1, 2020 at 6:44 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> Tunables are designed to pass info from user to glibc, not the other
> way around.  When __libc_main is called, init_cacheinfo is never
> called.  I can call init_cacheinfo from __libc_main.  But there is no
> interface to update min and max values from init_cacheinfo.  I don't
> think --list-tunables will work here without changes to tunables.

You have a dynamic threshold.

You have to tell the user what that minimum is, otherwise they can't
use the tunable reliably.

This is the first instance of a min/max that is dynamically determined.

You must fetch the cache info ahead of the tunable initialization, that
is you must call init_cacheinfo before __init_tunables.

You can initialize the tunable data dynamically like this:

/* Dynamically set the min and max of glibc.foo.bar.  */
tunable_id_t id = TUNABLE_ENUM_NAME (glibc, foo, bar);
tunable_list[id].type.min = lowval;
tunable_list[id].type.max = highval;

We do something similar for maybe_enable_malloc_check.

Then once the tunables are parsed, and the cpu features are loaded
you can print the tunables, and the printed tunables will have meaningful
min and max values.

If you have circular dependency, then you must process the cpu features
first without reading from the tunables, then allow the tunables to be
initialized from the system, *then* process the tunables to alter the existing
cpu feature settings.


More information about the Libc-alpha mailing list