Go to file
Richard Bunt 33ae45434d gdb: Enable early init of thread pool size
This commit enables the early initialization commands (92e4e97a9f) to
modify the number of threads used by gdb's thread pool.

The motivation here is to prevent gdb from spawning a detrimental number
of threads on many-core systems under environments with restrictive
ulimits.

With gdb before this commit, the thread pool takes the following sizes:

1. Thread pool size is initialized to 0.

2. After the maintenance commands are defined, the thread pool size is
set to the number of system cores (if it has not already been set).

3. Using early initialization commands, the thread pool size can be
changed using "maint set worker-threads".

4. After the first prompt, the thread pool size can be changed as in the
previous step.

Therefore after step 2. gdb has potentially launched hundreds of threads
on a many-core system.

After this change, step 2 and 3 are reversed so there is an opportunity
to set the required number of threads without needing to default to the
number of system cores first.

There does exist a configure option (added in 261b07488b) to disable
multithreading, but this does not allow for an already deployed gdb to
be configured.

Additionally, the default number of worker threads is clamped at eight
to control the number of worker threads spawned on many-core systems.
This value was chosen as testing recorded on bugzilla issue 29959
indicates that parallel efficiency drops past this point.

GDB built with GCC 13.

No test suite regressions detected. Compilers: GCC, ACfL, Intel, Intel
LLVM, NVHPC; Platforms: x86_64, aarch64.

The scenario that interests me the most involves preventing GDB from
spawning any worker threads at all. This was tested by counting the
number of clones observed by strace:

    strace -e clone,clone3 gdb/gdb -q \
    --early-init-eval-command="maint set worker-threads 0" \
    -ex q ./gdb/gdb |& grep --count clone

The new test relies on "gdb: install CLI uiout while processing early
init files" developed by Andrew Burgess. This patch will need pushing
prior to this change.

The clamping was tested on machines with both 16 cores and a single
core.  "maint show worker-threads" correctly reported eight and one
respectively.

Approved-By: Tom Tromey <tom@tromey.com>
2023-12-04 14:23:17 +00:00
bfd Automatic date update in version.in 2023-12-04 00:00:11 +00:00
binutils binutils: Fix documentation typo in the --set-sect-name option 2023-12-02 17:39:18 +01:00
config libiberty: Disable hwcaps for sha1.o 2023-11-30 10:14:30 +01:00
contrib
cpu sim --enable-cgen-maint 2023-08-19 12:41:32 +09:30
elfcpp MIPS: Change all E_MIPS_* to EF_MIPS_* 2023-11-10 14:03:17 +00:00
etc Update year range in gprofng copyright notices 2023-01-01 23:26:30 +10:30
gas gas: drop unused fields from struct segment_info_struct 2023-12-01 08:29:33 +01:00
gdb gdb: Enable early init of thread pool size 2023-12-04 14:23:17 +00:00
gdbserver Bail out of "attach" if a thread cannot be traced 2023-12-01 10:36:00 -07:00
gdbsupport gdb: Enable early init of thread pool size 2023-12-04 14:23:17 +00:00
gnulib gnulib: mark configure +x 2023-11-28 12:55:29 -05:00
gold Gold/MIPS: Add targ_extra_size=64 for mips32 triples 2023-11-17 14:33:33 +00:00
gprof Finalized intl-update patches 2023-11-15 12:53:04 +00:00
gprofng gprofng: support GNU option syntax in gp-display-html, plus various fixes 2023-11-29 10:18:35 -08:00
include RISC-V: Add SiFive custom vector coprocessor interface instructions v1.0 2023-12-01 09:29:07 +08:00
ld Fix ld/x86: reduce testsuite dependency on system object files 2023-12-01 18:55:14 -08:00
libbacktrace regen config 2023-08-12 10:27:57 +09:30
libctf libctf: adding CU mappings should be idempotent 2023-11-20 12:31:41 +00:00
libdecnumber regen config 2023-08-12 10:27:57 +09:30
libiberty libiberty: Disable hwcaps for sha1.o 2023-11-30 10:14:30 +01:00
libsframe regen config 2023-08-12 10:27:57 +09:30
opcodes x86: allow 32-bit reg to be used with U{RD,WR}MSR 2023-12-01 08:26:36 +01:00
readline [readline] Fix double free in _rl_scxt_dispose 2023-05-28 10:17:57 +02:00
sim Fix right shifts in mcore simulator on 64 bit hosts. 2023-12-01 07:19:50 -07:00
texinfo
zlib regen config 2023-08-12 10:27:57 +09:30
.cvsignore
.editorconfig
.gitattributes binutils-gdb/git: highlight whitespace errors in source files 2022-07-25 14:35:41 +01:00
.gitignore Finalized intl-update patches 2023-11-15 12:53:04 +00:00
ar-lib
ChangeLog Finalized intl-update patches 2023-11-15 12:53:04 +00:00
compile
config-ml.in MSP430: Add -fno-exceptions multilib 2023-08-12 10:24:26 +09:30
config.guess kvx: New port. 2023-08-16 14:22:54 +01:00
config.rpath
config.sub kvx: New port. 2023-08-16 14:22:54 +01:00
configure Finalized intl-update patches 2023-11-15 12:53:04 +00:00
configure.ac Finalized intl-update patches 2023-11-15 12:53:04 +00:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4 FDPIC: Handle arm*-*-uclinuxfdpiceabi in configure scripts 2023-08-12 10:25:06 +09:30
lt~obsolete.m4
ltgcc.m4
ltmain.sh Do not use HAVE_DOS_BASED_FILE_SYSTEM for Cygwin. 2023-08-12 10:25:06 +09:30
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def Finalized intl-update patches 2023-11-15 12:53:04 +00:00
Makefile.in Finalized intl-update patches 2023-11-15 12:53:04 +00:00
Makefile.tpl toplevel: Substitute GDCFLAGS instead of using CFLAGS 2023-08-12 10:27:44 +09:30
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode Note that at least dejagnu version 1.5.3 is required in order to be ale to run the testsuites. 2022-10-04 10:54:19 +01:00
SECURITY.txt Add a SECURITY.txt file describing the GNU Binutils' project's stance on security related bugs. 2023-04-20 16:52:11 +01:00
setup.com
src-release.sh Finalized intl-update patches 2023-11-15 12:53:04 +00:00
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.