* [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.