* [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
@ 2026-08-06 20:44 DJ Delorie
2026-08-06 22:02 ` Alejandro Colomar
0 siblings, 1 reply; 9+ messages in thread
From: DJ Delorie @ 2026-08-06 20:44 UTC (permalink / raw)
To: Alejandro Colomar; +Cc: linux-man
---
man/man5/tunables.conf.5 | 145 +++++++++++++++++++++++++++++++++++++++
1 file changed, 145 insertions(+)
create mode 100644 man/man5/tunables.conf.5
diff --git a/man/man5/tunables.conf.5 b/man/man5/tunables.conf.5
new file mode 100644
index 000000000..29beeb8f8
--- /dev/null
+++ b/man/man5/tunables.conf.5
@@ -0,0 +1,145 @@
+.TH tunables.conf 5 (date) "Linux man-pages (unreleased)"
+.SH NAME
+tunables.conf \- tunables configuration file
+.SH SYNOPSIS
+.nf
+.B /etc/tunables.conf
+.fi
+.SH DESCRIPTION
+Tunables are a feature in the GNU C Library
+that allows application authors and distribution maintainers
+to alter the runtime library behavior to match their workload.
+For a list of supported tunables,
+please consult the glibc manual
+that corresponds to your installed version of glibc,
+or run the following command:
+.P
+.in +4n
+.EX
+ld.so \-\-list\-tunables
+.EE
+.P
+The file is parsed by
+.BR \%ldconfig (8)
+and the results stored in
+.IR /etc/ld.so.cache .
+The resulting data is read when a new process is created by
+.IR ld.so .
+.P
+Each line in the file
+.I /etc/tunables.conf
+specifies a tunable,
+which is specified with a string of the form
+.IB name = value \f[R].\f[]
+.P
+The syntax allows lines to start with the keyword
+.I include
+followed by a
+.BR \%glob (7)
+pattern.
+Files matching that pattern will be processed
+as if their contents were included at that point.
+.P
+Each line may include zero or more keywords or symbols at the beginning,
+which affect how each tunable affects each processes.
+The keywords must be separated by whitespace,
+but the symbols need not be.
+.TP
+.B overridable
+.TQ
+.B +
+Allow the tunable to be overridden by the
+.B GLIBC_TUNABLES
+environment variable when the process runs
+(this is the default).
+.TP
+.B nonoverridable
+.TQ
+.B \-
+Do not allow the tunable to be overridden by the environment variable.
+.TP
+.B onlysecure
+.TQ
+.B @
+The tunable applies only to
+.B AT_SECURE
+processes,
+such as one started from a set-user-ID program,
+or one with elevated capabilities.
+.TP
+.B nonsecure
+.TQ
+.B $
+The tunable applies only to
+.RB non- AT_SECURE
+processes (this is the default).
+.TP
+.B anysecure
+.TQ
+.B *
+The tunable applies to both
+.B AT_SECURE
+and
+.RB non- AT_SECURE
+processes.
+.P
+The file may also contain
+.IR filters ,
+which limit the tunables following it.
+The effects of a filter are terminated by
+any of the following:
+.IP \[bu] 3
+The end of the file.
+.PD 0
+.IP \[bu]
+The end of an included file.
+.IP \[bu]
+An
+.B include
+directive.
+.IP \[bu]
+A new (possibly empty) filter.
+.PD
+.P
+The syntax is:
+.P
+.in +4n
+.EX
+.BI [ filter : pattern ]
+.EE
+.in
+.TP
+.B proc
+The
+.B proc
+filter limits the following tunables to processes
+whose name matches the pattern.
+The pattern may be an absolute path
+or just the base name.
+.P
+A filter can also be empty:
+.BR [] .
+Such a filter has no effects.
+.SH FILES
+.TP
+.I /etc/tunables.conf
+.TP
+.I /etc/ld.so.cache
+cached copy of tunables
+.SH EXAMPLES
+Example configuration file:
+.P
+.in +4n
+.EX
+glibc.malloc.arenas_max=5
+onlysecure glibc.malloc.arenas_max=1
+\-glibc.pthread.rseq=1
+[proc:/bin/bad.program]
+\-glibc.pthread.rseq=0
+[proc:some.program]
+\-glibc.malloc.mmap_threshold=65536
+.EE
+.in
+.SH SEE ALSO
+.BR ld.so (8),
+.BR ldconfig (8)
--
2.47.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-06 20:44 [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config DJ Delorie
@ 2026-08-06 22:02 ` Alejandro Colomar
2026-08-06 22:15 ` DJ Delorie
0 siblings, 1 reply; 9+ messages in thread
From: Alejandro Colomar @ 2026-08-06 22:02 UTC (permalink / raw)
To: DJ Delorie; +Cc: linux-man
[-- Attachment #1: Type: text/plain, Size: 4944 bytes --]
Hi DJ,
> Date: 2026-08-06 16:44:30-0400
> From: DJ Delorie <dj@redhat.com>
>
>
> ---
You forgot to sign.
> man/man5/tunables.conf.5 | 145 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 145 insertions(+)
> create mode 100644 man/man5/tunables.conf.5
>
> diff --git a/man/man5/tunables.conf.5 b/man/man5/tunables.conf.5
> new file mode 100644
> index 000000000..29beeb8f8
> --- /dev/null
> +++ b/man/man5/tunables.conf.5
> @@ -0,0 +1,145 @@
> +.TH tunables.conf 5 (date) "Linux man-pages (unreleased)"
> +.SH NAME
> +tunables.conf \- tunables configuration file
> +.SH SYNOPSIS
> +.nf
> +.B /etc/tunables.conf
> +.fi
> +.SH DESCRIPTION
> +Tunables are a feature in the GNU C Library
> +that allows application authors and distribution maintainers
> +to alter the runtime library behavior to match their workload.
> +For a list of supported tunables,
> +please consult the glibc manual
> +that corresponds to your installed version of glibc,
> +or run the following command:
> +.P
> +.in +4n
> +.EX
> +ld.so \-\-list\-tunables
> +.EE
> +.P
> +The file is parsed by
> +.BR \%ldconfig (8)
> +and the results stored in
> +.IR /etc/ld.so.cache .
> +The resulting data is read when a new process is created by
> +.IR ld.so .
Sorry for noticing this in v4; I forgot about it. I see this unresolved
issue from earlier versions remains.
ld.so(8) runs when a new program is executed --execve(2)--, not when
a new process is created --fork(2)--, AFAIK.
alx@devuan:~$ MANWIDTH=64 man fork | grep ld.so
alx@devuan:~$ MANWIDTH=64 man execve | grep -C2 ld.so
If the executable is an a.out dynamically linked binary
executable containing shared‐library stubs, the Linux dy‐
namic linker ld.so(8) is called at the start of execution
to bring needed shared objects into memory and link the
executable with them.
--
ptrace(2), exec(3), fexecve(3), getauxval(3), getopt(3),
system(3), capabilities(7), credentials(7), environ(7),
path_resolution(7), ld.so(8)
Linux man‐pages 6.18‐18... 2026‐02‐08 execve(2)
> +.P
> +Each line in the file
> +.I /etc/tunables.conf
> +specifies a tunable,
> +which is specified with a string of the form
> +.IB name = value \f[R].\f[]
> +.P
> +The syntax allows lines to start with the keyword
> +.I include
s/I/B/ (since it's a literal, not a variable)
Have a lovely night!
Alex
> +followed by a
> +.BR \%glob (7)
> +pattern.
> +Files matching that pattern will be processed
> +as if their contents were included at that point.
> +.P
> +Each line may include zero or more keywords or symbols at the beginning,
> +which affect how each tunable affects each processes.
> +The keywords must be separated by whitespace,
> +but the symbols need not be.
> +.TP
> +.B overridable
> +.TQ
> +.B +
> +Allow the tunable to be overridden by the
> +.B GLIBC_TUNABLES
> +environment variable when the process runs
> +(this is the default).
> +.TP
> +.B nonoverridable
> +.TQ
> +.B \-
> +Do not allow the tunable to be overridden by the environment variable.
> +.TP
> +.B onlysecure
> +.TQ
> +.B @
> +The tunable applies only to
> +.B AT_SECURE
> +processes,
> +such as one started from a set-user-ID program,
> +or one with elevated capabilities.
> +.TP
> +.B nonsecure
> +.TQ
> +.B $
> +The tunable applies only to
> +.RB non- AT_SECURE
> +processes (this is the default).
> +.TP
> +.B anysecure
> +.TQ
> +.B *
> +The tunable applies to both
> +.B AT_SECURE
> +and
> +.RB non- AT_SECURE
> +processes.
> +.P
> +The file may also contain
> +.IR filters ,
> +which limit the tunables following it.
> +The effects of a filter are terminated by
> +any of the following:
> +.IP \[bu] 3
> +The end of the file.
> +.PD 0
> +.IP \[bu]
> +The end of an included file.
> +.IP \[bu]
> +An
> +.B include
> +directive.
> +.IP \[bu]
> +A new (possibly empty) filter.
> +.PD
> +.P
> +The syntax is:
> +.P
> +.in +4n
> +.EX
> +.BI [ filter : pattern ]
> +.EE
> +.in
> +.TP
> +.B proc
> +The
> +.B proc
> +filter limits the following tunables to processes
> +whose name matches the pattern.
> +The pattern may be an absolute path
> +or just the base name.
> +.P
> +A filter can also be empty:
> +.BR [] .
> +Such a filter has no effects.
> +.SH FILES
> +.TP
> +.I /etc/tunables.conf
> +.TP
> +.I /etc/ld.so.cache
> +cached copy of tunables
> +.SH EXAMPLES
> +Example configuration file:
> +.P
> +.in +4n
> +.EX
> +glibc.malloc.arenas_max=5
> +onlysecure glibc.malloc.arenas_max=1
> +\-glibc.pthread.rseq=1
> +[proc:/bin/bad.program]
> +\-glibc.pthread.rseq=0
> +[proc:some.program]
> +\-glibc.malloc.mmap_threshold=65536
> +.EE
> +.in
> +.SH SEE ALSO
> +.BR ld.so (8),
> +.BR ldconfig (8)
> --
> 2.47.3
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-06 22:02 ` Alejandro Colomar
@ 2026-08-06 22:15 ` DJ Delorie
2026-08-07 0:06 ` Alejandro Colomar
0 siblings, 1 reply; 9+ messages in thread
From: DJ Delorie @ 2026-08-06 22:15 UTC (permalink / raw)
To: Alejandro Colomar; +Cc: linux-man
Alejandro Colomar <alx@kernel.org> writes:
> You forgot to sign.
I will never remember that... :-P
>> +The resulting data is read when a new process is created by
>> +.IR ld.so .
>
> Sorry for noticing this in v4; I forgot about it. I see this unresolved
> issue from earlier versions remains.
A program is a file on disk. A process is a running memory image.
Neither fork() nor exec() cause the tunables to be loaded, the process
itself has to do that. For dynamic ELF programs/processes built with
glibc, ld.so does it before it passes control to the ELF image. There
are other types of programs/processes that do not use ld.so and thus do
not read the tunables cache (which is called "ld.so.cache" for a reason ;-)
I don't know how to say this clearly with fewer words...
>> +The syntax allows lines to start with the keyword
>> +.I include
>
> s/I/B/ (since it's a literal, not a variable)
Fixed.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-06 22:15 ` DJ Delorie
@ 2026-08-07 0:06 ` Alejandro Colomar
2026-08-07 0:11 ` Alejandro Colomar
2026-08-07 3:25 ` DJ Delorie
0 siblings, 2 replies; 9+ messages in thread
From: Alejandro Colomar @ 2026-08-07 0:06 UTC (permalink / raw)
To: DJ Delorie; +Cc: linux-man
[-- Attachment #1: Type: text/plain, Size: 2349 bytes --]
Hi DJ,
> Date: 2026-08-06 18:15:15-0400
> From: DJ Delorie <dj@redhat.com>
>
> Alejandro Colomar <alx@kernel.org> writes:
> > You forgot to sign.
>
> I will never remember that... :-P
>
> >> +The resulting data is read when a new process is created by
> >> +.IR ld.so .
> >
> > Sorry for noticing this in v4; I forgot about it. I see this unresolved
> > issue from earlier versions remains.
>
> A program is a file on disk. A process is a running memory image.
Yup. fork(3) creates a process (produces a new PID). execve(2)
replaces the image of the current process with a program read from disk
(or in short, executes a program in the current process).
>
> Neither fork() nor exec() cause the tunables to be loaded, the process
> itself has to do that. For dynamic ELF programs/processes built with
> glibc, ld.so does it before it passes control to the ELF image. There
> are other types of programs/processes that do not use ld.so and thus do
> not read the tunables cache (which is called "ld.so.cache" for a reason ;-)
Hmmmmm, let's say you call execve(2) several times without any fork(2)s.
Assuming a that the program paths that you pass to execve(2) are all
dynamic ELF programs built with glibc, I guess for every time you call
execve(2), ld.so(8) will be run, and the tunables stored in ld.so.cache
will be used. Is this correct?
#include <unistd.h>
int
main(int, char *argv[])
{
sleep(1);
execve("proc/self/exe", argv, NULL);
}
Let's also say you fork(2) several times, without any execve(2) calls.
I suppose that won't trigger any of this, right?
#include <unistd.h>
int
main(void)
{
for (int i = 0; i < 10; i++) {
sleep(1);
fork();
}
}
From my understanding, only the first program will trigger this more
than once, right?
If so, I'd use the same wording that execve(2) uses:
execve() executes the program referred to by path.
That is, execve(2) executes programs, and ld.so.cache is read when
a program is executed (in the current process).
>
> I don't know how to say this clearly with fewer words...
>
> >> +The syntax allows lines to start with the keyword
> >> +.I include
> >
> > s/I/B/ (since it's a literal, not a variable)
>
> Fixed.
>
Cheers,
Alex
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-07 0:06 ` Alejandro Colomar
@ 2026-08-07 0:11 ` Alejandro Colomar
2026-08-07 0:15 ` Alejandro Colomar
2026-08-07 3:25 ` DJ Delorie
1 sibling, 1 reply; 9+ messages in thread
From: Alejandro Colomar @ 2026-08-07 0:11 UTC (permalink / raw)
To: DJ Delorie; +Cc: linux-man
[-- Attachment #1: Type: text/plain, Size: 3104 bytes --]
> Date: 2026-08-07 02:07:00+0200
> From: Alejandro Colomar <alx@kernel.org>
>
> Hi DJ,
>
> > Date: 2026-08-06 18:15:15-0400
> > From: DJ Delorie <dj@redhat.com>
> >
> > Alejandro Colomar <alx@kernel.org> writes:
> > > You forgot to sign.
> >
> > I will never remember that... :-P
> >
> > >> +The resulting data is read when a new process is created by
> > >> +.IR ld.so .
> > >
> > > Sorry for noticing this in v4; I forgot about it. I see this unresolved
> > > issue from earlier versions remains.
> >
> > A program is a file on disk. A process is a running memory image.
>
> Yup. fork(3) creates a process (produces a new PID). execve(2)
> replaces the image of the current process with a program read from disk
> (or in short, executes a program in the current process).
>
> >
> > Neither fork() nor exec() cause the tunables to be loaded, the process
> > itself has to do that. For dynamic ELF programs/processes built with
> > glibc, ld.so does it before it passes control to the ELF image. There
> > are other types of programs/processes that do not use ld.so and thus do
> > not read the tunables cache (which is called "ld.so.cache" for a reason ;-)
>
> Hmmmmm, let's say you call execve(2) several times without any fork(2)s.
> Assuming a that the program paths that you pass to execve(2) are all
> dynamic ELF programs built with glibc, I guess for every time you call
> execve(2), ld.so(8) will be run, and the tunables stored in ld.so.cache
> will be used. Is this correct?
>
> #include <unistd.h>
> int
> main(int, char *argv[])
> {
> sleep(1);
> execve("proc/self/exe", argv, NULL);
> }
Oh, I thought this would work as a recursive infinite-loop program. It
doesn't seem to work. I guess there's some race condition? :D
alx@devuan:~$ cd tmp/
alx@devuan:~/tmp$ cat ex.c
#include <unistd.h>
int
main(int, char *argv[])
{
sleep(1);
execve("proc/self/exe", argv, NULL);
}
alx@devuan:~/tmp$ gcc -Wall -Wextra ex.c
alx@devuan:~/tmp$ time ./a.out
real 0m1.003s
user 0m0.003s
sys 0m0.000s
Cheers,
Alex
>
> Let's also say you fork(2) several times, without any execve(2) calls.
> I suppose that won't trigger any of this, right?
>
> #include <unistd.h>
> int
> main(void)
> {
> for (int i = 0; i < 10; i++) {
> sleep(1);
> fork();
> }
> }
>
> From my understanding, only the first program will trigger this more
> than once, right?
>
> If so, I'd use the same wording that execve(2) uses:
>
> execve() executes the program referred to by path.
>
> That is, execve(2) executes programs, and ld.so.cache is read when
> a program is executed (in the current process).
>
> >
> > I don't know how to say this clearly with fewer words...
> >
> > >> +The syntax allows lines to start with the keyword
> > >> +.I include
> > >
> > > s/I/B/ (since it's a literal, not a variable)
> >
> > Fixed.
> >
>
>
> Cheers,
> Alex
>
> --
> <https://www.alejandro-colomar.es>
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-07 0:11 ` Alejandro Colomar
@ 2026-08-07 0:15 ` Alejandro Colomar
0 siblings, 0 replies; 9+ messages in thread
From: Alejandro Colomar @ 2026-08-07 0:15 UTC (permalink / raw)
To: DJ Delorie; +Cc: linux-man
[-- Attachment #1: Type: text/plain, Size: 3525 bytes --]
> Date: 2026-08-07 02:11:04+0200
> From: Alejandro Colomar <alx@kernel.org>
>
> > Date: 2026-08-07 02:07:00+0200
> > From: Alejandro Colomar <alx@kernel.org>
> >
> > Hi DJ,
> >
> > > Date: 2026-08-06 18:15:15-0400
> > > From: DJ Delorie <dj@redhat.com>
> > >
> > > Alejandro Colomar <alx@kernel.org> writes:
> > > > You forgot to sign.
> > >
> > > I will never remember that... :-P
> > >
> > > >> +The resulting data is read when a new process is created by
> > > >> +.IR ld.so .
> > > >
> > > > Sorry for noticing this in v4; I forgot about it. I see this unresolved
> > > > issue from earlier versions remains.
> > >
> > > A program is a file on disk. A process is a running memory image.
> >
> > Yup. fork(3) creates a process (produces a new PID). execve(2)
> > replaces the image of the current process with a program read from disk
> > (or in short, executes a program in the current process).
> >
> > >
> > > Neither fork() nor exec() cause the tunables to be loaded, the process
> > > itself has to do that. For dynamic ELF programs/processes built with
> > > glibc, ld.so does it before it passes control to the ELF image. There
> > > are other types of programs/processes that do not use ld.so and thus do
> > > not read the tunables cache (which is called "ld.so.cache" for a reason ;-)
> >
> > Hmmmmm, let's say you call execve(2) several times without any fork(2)s.
> > Assuming a that the program paths that you pass to execve(2) are all
> > dynamic ELF programs built with glibc, I guess for every time you call
> > execve(2), ld.so(8) will be run, and the tunables stored in ld.so.cache
> > will be used. Is this correct?
> >
> > #include <unistd.h>
> > int
> > main(int, char *argv[])
> > {
> > sleep(1);
> > execve("proc/self/exe", argv, NULL);
Dumb of me; missing leading '/'. :)
Cheers,
Alex
> > }
>
> Oh, I thought this would work as a recursive infinite-loop program. It
> doesn't seem to work. I guess there's some race condition? :D
>
> alx@devuan:~$ cd tmp/
> alx@devuan:~/tmp$ cat ex.c
> #include <unistd.h>
> int
> main(int, char *argv[])
> {
> sleep(1);
> execve("proc/self/exe", argv, NULL);
> }
>
> alx@devuan:~/tmp$ gcc -Wall -Wextra ex.c
> alx@devuan:~/tmp$ time ./a.out
>
> real 0m1.003s
> user 0m0.003s
> sys 0m0.000s
>
>
> Cheers,
> Alex
>
> >
> > Let's also say you fork(2) several times, without any execve(2) calls.
> > I suppose that won't trigger any of this, right?
> >
> > #include <unistd.h>
> > int
> > main(void)
> > {
> > for (int i = 0; i < 10; i++) {
> > sleep(1);
> > fork();
> > }
> > }
> >
> > From my understanding, only the first program will trigger this more
> > than once, right?
> >
> > If so, I'd use the same wording that execve(2) uses:
> >
> > execve() executes the program referred to by path.
> >
> > That is, execve(2) executes programs, and ld.so.cache is read when
> > a program is executed (in the current process).
> >
> > >
> > > I don't know how to say this clearly with fewer words...
> > >
> > > >> +The syntax allows lines to start with the keyword
> > > >> +.I include
> > > >
> > > > s/I/B/ (since it's a literal, not a variable)
> > >
> > > Fixed.
> > >
> >
> >
> > Cheers,
> > Alex
> >
> > --
> > <https://www.alejandro-colomar.es>
>
>
>
> --
> <https://www.alejandro-colomar.es>
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-07 0:06 ` Alejandro Colomar
2026-08-07 0:11 ` Alejandro Colomar
@ 2026-08-07 3:25 ` DJ Delorie
2026-08-07 22:36 ` Alejandro Colomar
1 sibling, 1 reply; 9+ messages in thread
From: DJ Delorie @ 2026-08-07 3:25 UTC (permalink / raw)
To: Alejandro Colomar; +Cc: linux-man
Alejandro Colomar <alx@kernel.org> writes:
> Hmmmmm, let's say you call execve(2) several times without any fork(2)s.
> Assuming a that the program paths that you pass to execve(2) are all
> dynamic ELF programs built with glibc, I guess for every time you call
> execve(2), ld.so(8) will be run, and the tunables stored in ld.so.cache
> will be used. Is this correct?
I think this rabbit hole is too deep for this part of the man page. We
need a short sentence that's obvious to the reader, not a diatribe on
how the linux kernel works.
I'm happy with something like "The resulting data is read when the
program starts." regardless of how ambiguous or technically incorrect it
might be ;-)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-07 3:25 ` DJ Delorie
@ 2026-08-07 22:36 ` Alejandro Colomar
2026-08-08 3:08 ` DJ Delorie
0 siblings, 1 reply; 9+ messages in thread
From: Alejandro Colomar @ 2026-08-07 22:36 UTC (permalink / raw)
To: DJ Delorie; +Cc: linux-man
[-- Attachment #1: Type: text/plain, Size: 1453 bytes --]
Hi DJ,
> Date: 2026-08-06 23:25:29-0400
> From: DJ Delorie <dj@redhat.com>
>
> Alejandro Colomar <alx@kernel.org> writes:
> > Hmmmmm, let's say you call execve(2) several times without any fork(2)s.
> > Assuming a that the program paths that you pass to execve(2) are all
> > dynamic ELF programs built with glibc, I guess for every time you call
> > execve(2), ld.so(8) will be run, and the tunables stored in ld.so.cache
> > will be used. Is this correct?
>
> I think this rabbit hole is too deep for this part of the man page. We
> need a short sentence that's obvious to the reader, not a diatribe on
> how the linux kernel works.
>
> I'm happy with something like "The resulting data is read when the
> program starts." regardless of how ambiguous or technically incorrect it
> might be ;-)
I'm not happy with starts, but if 's/starts/is executed/', or
alternatively 's/starts/& execution/', I'm happy.
'starts execution' is precisely the wording that execve(2) uses to
describe the moment when ld.so(8) is called.
If the executable is an a.out dynamically linked binary
executable containing shared‐library stubs, the Linux dy‐
namic linker ld.so(8) is called at the start of execution
to bring needed shared objects into memory and link the
executable with them.
Does this sound good to you?
Have a lovely night!
Alex
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config
2026-08-07 22:36 ` Alejandro Colomar
@ 2026-08-08 3:08 ` DJ Delorie
0 siblings, 0 replies; 9+ messages in thread
From: DJ Delorie @ 2026-08-08 3:08 UTC (permalink / raw)
To: Alejandro Colomar; +Cc: linux-man
I'm ok with :
The resulting data is read when the program starts execution.
This is what I've got so far:
commit 8ed803ba1e814dd7efdeec787b9b278c2e44be83
Author: DJ Delorie <dj@redhat.com>
Date: Fri Aug 7 23:07:04 2026 -0400
man/man5/tunables.conf: Document system-wide tunables config
Signed-off-by: DJ Delorie <dj@redhat.com>
diff --git a/man/man5/tunables.conf.5 b/man/man5/tunables.conf.5
new file mode 100644
index 000000000..a27f78cde
--- /dev/null
+++ b/man/man5/tunables.conf.5
@@ -0,0 +1,144 @@
+.TH tunables.conf 5 (date) "Linux man-pages (unreleased)"
+.SH NAME
+tunables.conf \- tunables configuration file
+.SH SYNOPSIS
+.nf
+.B /etc/tunables.conf
+.fi
+.SH DESCRIPTION
+Tunables are a feature in the GNU C Library
+that allows application authors and distribution maintainers
+to alter the runtime library behavior to match their workload.
+For a list of supported tunables,
+please consult the glibc manual
+that corresponds to your installed version of glibc,
+or run the following command:
+.P
+.in +4n
+.EX
+ld.so \-\-list\-tunables
+.EE
+.P
+The file is parsed by
+.BR \%ldconfig (8)
+and the results stored in
+.IR /etc/ld.so.cache .
+The resulting data is read when the program starts execution.
+.P
+Each line in the file
+.I /etc/tunables.conf
+specifies a tunable,
+which is specified with a string of the form
+.IB name = value \f[R].\f[]
+.P
+The syntax allows lines to start with the keyword
+.B include
+followed by a
+.BR \%glob (7)
+pattern.
+Files matching that pattern will be processed
+as if their contents were included at that point.
+.P
+Each line may include zero or more keywords or symbols at the beginning,
+which affect how each tunable affects each processes.
+The keywords must be separated by whitespace,
+but the symbols need not be.
+.TP
+.B overridable
+.TQ
+.B +
+Allow the tunable to be overridden by the
+.B GLIBC_TUNABLES
+environment variable when the process runs
+(this is the default).
+.TP
+.B nonoverridable
+.TQ
+.B \-
+Do not allow the tunable to be overridden by the environment variable.
+.TP
+.B onlysecure
+.TQ
+.B @
+The tunable applies only to
+.B AT_SECURE
+processes,
+such as one started from a set-user-ID program,
+or one with elevated capabilities.
+.TP
+.B nonsecure
+.TQ
+.B $
+The tunable applies only to
+.RB non- AT_SECURE
+processes (this is the default).
+.TP
+.B anysecure
+.TQ
+.B *
+The tunable applies to both
+.B AT_SECURE
+and
+.RB non- AT_SECURE
+processes.
+.P
+The file may also contain
+.IR filters ,
+which limit the tunables following it.
+The effects of a filter are terminated by
+any of the following:
+.IP \[bu] 3
+The end of the file.
+.PD 0
+.IP \[bu]
+The end of an included file.
+.IP \[bu]
+An
+.B include
+directive.
+.IP \[bu]
+A new (possibly empty) filter.
+.PD
+.P
+The syntax is:
+.P
+.in +4n
+.EX
+.BI [ filter : pattern ]
+.EE
+.in
+.TP
+.B proc
+The
+.B proc
+filter limits the following tunables to processes
+whose name matches the pattern.
+The pattern may be an absolute path
+or just the base name.
+.P
+A filter can also be empty:
+.BR [] .
+Such a filter has no effects.
+.SH FILES
+.TP
+.I /etc/tunables.conf
+.TP
+.I /etc/ld.so.cache
+cached copy of tunables
+.SH EXAMPLES
+Example configuration file:
+.P
+.in +4n
+.EX
+glibc.malloc.arenas_max=5
+onlysecure glibc.malloc.arenas_max=1
+\-glibc.pthread.rseq=1
+[proc:/bin/bad.program]
+\-glibc.pthread.rseq=0
+[proc:some.program]
+\-glibc.malloc.mmap_threshold=65536
+.EE
+.in
+.SH SEE ALSO
+.BR ld.so (8),
+.BR ldconfig (8)
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-08-08 3:08 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-06 20:44 [PATCH v5 2/4] man/man5/tunables.conf: Document system-wide tunables config DJ Delorie
2026-08-06 22:02 ` Alejandro Colomar
2026-08-06 22:15 ` DJ Delorie
2026-08-07 0:06 ` Alejandro Colomar
2026-08-07 0:11 ` Alejandro Colomar
2026-08-07 0:15 ` Alejandro Colomar
2026-08-07 3:25 ` DJ Delorie
2026-08-07 22:36 ` Alejandro Colomar
2026-08-08 3:08 ` DJ Delorie
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.