cpython icon indicating copy to clipboard operation
cpython copied to clipboard

GH-117108: Change the size of the GC increment to about 1% of the total heap size.

Open markshannon opened this issue 1 year ago • 3 comments

The previous design of choosing increments based on the number of survivors doesn't work. In order to handle the case of code that produces nothing but cycles, the rate of collection needs to be so high that the case of code that produces no cycles is slowed down hugely.

Fortunately, the fix is quite simple: base the size of the increment on the size of the heap. Essentially we perform a whole-heap collection at the same rate as the traditional cycle collection, but in increments. In the old collector, the thresholds were set so that a full heap collection was done every 100 young collections. We now do a 1% increment with every young collection.

  • Issue: gh-117108

markshannon avatar Mar 21 '24 12:03 markshannon

Seems like this one is worth benchmarking (even though our gc benchmarks are a bit non-sensical, we may some things in the other ones). I fired off a run.

mdboom avatar Mar 21 '24 14:03 mdboom

There are a couple compile-time warnings on the Windows build:

C:\Code\Python\Python\gc.c(1240,30): warning C4244: 'function': conversion from 'uintptr_t' to 'int', possibl
e loss of data [C:\Code\Python\PCbuild\pythoncore.vcxproj]

My guess is that gc_set_old_space() should be declared as having a fatter size argument than int.

C:\Code\Python\Python\gc.c(1700,54): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possib
le loss of data [C:\Code\Python\PCbuild\pythoncore.vcxproj]

And here I guess _PyGC_GetObjects()'s generation argument should be int instead of Py_ssize_t.

tim-one avatar Mar 21 '24 18:03 tim-one

This PR overall improves speed by 27% GM / 0% HPT on the benchmarking suite and uses 6% more memory, however, this is after the regression in #116206 of 24% GM / 0% HPT slower, using 1% less memory. Running a custom comparison between the commit just before #116206 and this PR, it's an overall improvement of 2% GM / 0% HPT for the GC changes + the bugfix in this PR.

In hindsight, we probably should have measured and not merged #116206 to begin with, because the regression is so obvious in some benchmarks.

(Here GM == Geometric mean, HPT == Heirarchical Performance Testing method).

mdboom avatar Mar 21 '24 22:03 mdboom

Given #117123, and the performance regression, maybe it makes sense to revert #116206 while working on getting this right?

mdboom avatar Mar 22 '24 13:03 mdboom

Given https://github.com/python/cpython/pull/117123, and the performance regression, maybe it makes sense to revert https://github.com/python/cpython/pull/116206 while working on getting this right?

Why not merge this PR? Your numbers show that it is faster than before https://github.com/python/cpython/pull/116206

markshannon avatar Mar 22 '24 14:03 markshannon

Given #117123, and the performance regression, maybe it makes sense to revert #116206 while working on getting this right?

Why not merge this PR? Your numbers show that it is faster than before #116206

That's fine, too. I was just concerned about giving it the time it needs for a review (seeing none).

mdboom avatar Mar 22 '24 14:03 mdboom

Looking deeper at the benchmarking data for this PR vs. the commit prior to #116206, memory usage is up pretty significantly for the benchmarks that actually have a lot of data. (By 45% for mypy2, for example). Maybe that doesn't matter as long as the memory usage still has a reasonable upper bound, but it's something to probably confirm.

Memory usage of this PR vs. prior to incremental GC

image

mdboom avatar Mar 22 '24 17:03 mdboom

OOI, how much in absolute terms? A relative increase in memory isn't that meaningful.

We expect short lived programs to have increased memory use as the collector will lag a bit more than before, being an incremental collector.

markshannon avatar Mar 22 '24 17:03 markshannon

OOI, how much in absolute terms? A relative increase in memory isn't that meaningful.

Here's the absolute numbers.

I think what really matters for this is to ensure that highly cyclical data structures are still collected in a reasonable time frame. I think the only way to get that from the data would be to increase the number of iterations and see how that affects memory usage.

Absolute differences in memory usage
benchmark base head diff
2to3 23,279,323 23,574,625 295,302
aiohttp 30,047,865 29,992,862 -55,003
async_generators 36,232,825 36,214,101 -18,724
async_tree_none 80,446,220 80,228,937 -217,283
async_tree_cpu_io_mixed 83,602,090 83,824,640 222,550
async_tree_cpu_io_mixed_tg 92,690,529 93,186,925 496,396
async_tree_io 136,706,145 135,888,700 -817,445
async_tree_io_tg 145,445,644 146,071,747 626,103
async_tree_memoization 86,078,610 85,938,371 -140,239
async_tree_memoization_tg 95,327,768 95,374,189 46,421
async_tree_none_tg 89,782,369 89,443,961 -338,408
asyncio_tcp 50,583,454 51,326,390 742,936
asyncio_tcp_ssl 76,057,648 76,106,020 48,372
asyncio_websockets 65,070,811 64,648,728 -422,083
chameleon 29,368,905 29,676,300 307,395
chaos 17,821,110 17,829,107 7,997
comprehensions 19,322,782 19,364,717 41,935
bench_mp_pool 20,654,762 20,830,890 176,128
coroutines 17,117,379 17,019,270 -98,109
crypto_pyaes 17,455,981 17,514,691 58,710
dask 88,305,273 88,550,448 245,175
deepcopy 18,866,956 18,866,176 -780
deepcopy_reduce 18,834,578 18,855,643 21,065
deepcopy_memo 18,891,727 18,836,918 -54,809
deltablue 19,162,648 21,385,216 2,222,568
django_template 43,785,069 43,736,697 -48,372
djangocms 30,294,016 30,260,467 -33,549
docutils 64,943,835 85,793,840 20,850,005
dulwich_log 26,350,348 25,903,299 -447,049
fannkuch 17,007,957 16,951,393 -56,564
float 34,400,158 34,406,009 5,851
create_gc_cycles 17,081,685 17,093,973 12,288
gc_traversal 20,627,651 20,528,566 -99,085
generators 29,539,571 29,482,227 -57,344
genshi_text 20,681,094 21,016,576 335,482
genshi_xml 21,943,832 22,484,114 540,282
go 20,013,641 18,889,191 -1,124,450
gunicorn 30,099,553 29,992,667 -106,886
hexiom 18,173,561 18,145,475 -28,086
html5lib 37,427,687 41,330,590 3,902,903
json 18,928,006 18,950,241 22,235
json_dumps 17,250,986 17,288,630 37,644
json_loads 17,275,172 17,305,600 30,428
logging_format 24,717,994 24,727,942 9,948
logging_silent 17,715,395 17,760,256 44,861
logging_simple 23,280,688 23,272,691 -7,997
mako 26,486,881 26,608,396 121,515
mdp 25,583,225 25,669,827 86,602
meteor_contest 19,434,739 19,383,442 -51,297
mypy2 167,246,116 242,955,605 75,709,489
nbody 17,175,308 17,166,336 -8,972
nqueens 17,238,308 17,207,491 -30,817
pathlib 18,659,035 18,834,383 175,348
pickle 17,929,362 18,064,140 134,778
pickle_dict 17,877,869 17,895,228 17,359
pickle_list 17,998,799 17,963,885 -34,914
pickle_pure_python 17,842,371 17,920,975 78,604
pidigits 17,161,264 17,136,883 -24,381
pprint_safe_repr 37,872,591 37,859,718 -12,873
pprint_pformat 37,840,798 37,846,454 5,656
pycparser 39,668,784 46,512,420 6,843,636
pyflate 60,085,199 59,582,366 -502,833
pylint 92,368,310 95,753,752 3,385,442
python_startup 13,590,332 13,637,729 47,397
python_startup_no_site 13,584,871 13,620,175 35,304
raytrace 17,892,108 17,909,662 17,554
regex_dna 25,022,854 25,080,393 57,539
regex_effbot 17,865,971 17,899,520 33,549
regex_v8 23,517,086 23,460,327 -56,759
richards 17,694,720 17,702,912 8,192
richards_super 17,723,392 17,667,413 -55,979
scimark_fft 18,076,428 18,055,168 -21,260
scimark_lu 17,692,769 17,755,769 63,000
scimark_monte_carlo 18,058,873 18,048,926 -9,947
scimark_sparse_mat_mult 18,079,353 18,216,667 137,314
spectral_norm 16,931,693 17,008,932 77,239
sqlglot_normalize 22,803,407 22,787,218 -16,189
sqlglot_optimize 23,573,845 23,881,045 307,200
sqlglot_parse 22,958,665 25,704,350 2,745,685
sqlglot_transpile 23,045,461 24,079,993 1,034,532
sqlite_synth 19,792,457 19,782,509 -9,948
sympy_expand 59,473,139 59,392,975 -80,164
sympy_integrate 60,309,504 60,277,126 -32,378
sympy_sum 72,773,632 72,791,771 18,139
sympy_str 60,266,203 60,242,602 -23,601
telco 17,062,180 17,114,453 52,273
thrift 18,817,609 18,836,528 18,919
tomli_loads 180,438,162 177,827,254 -2,610,908
tornado_http 41,430,649 41,497,356 66,707
typing_runtime_protocols 19,174,156 19,157,772 -16,384
unpack_sequence 18,567,753 18,615,929 48,176
unpickle 18,123,239 18,082,474 -40,765
unpickle_list 18,007,186 18,036,248 29,062
unpickle_pure_python 17,914,343 17,938,529 24,186
xml_etree_parse 22,025,362 22,069,443 44,081
xml_etree_iterparse 22,826,227 22,949,107 122,880
xml_etree_generate 23,017,569 23,610,514 592,945
xml_etree_process 22,720,121 22,722,462 2,341

mdboom avatar Mar 22 '24 17:03 mdboom

I'm going to merge this, as it does fix the immediate problem.

The memory use for mypy2 is up significantly, but the memory use for "tomli_loads", which also uses a significant amount of memory, is down. I'll leave the issue open and we can look to fine tune thresholds later.

markshannon avatar Mar 22 '24 18:03 markshannon

I'm going to merge this, as it does fix the immediate problem.

Ok, and you are going to fix the pystats build as a follow-on, rather than addressing here?

mdboom avatar Mar 22 '24 18:03 mdboom

:warning::warning::warning: Buildbot failure :warning::warning::warning:

Hi! The buildbot s390x SLES 3.x has failed when building commit e28477f214276db941e715eebc8cdfb96c1207d9.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/540/builds/8404) and take a look at the build logs.
  4. Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/540/builds/8404

Failed tests:

  • test.test_multiprocessing_spawn.test_processes
  • test.test_multiprocessing_fork.test_processes

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 23, done.        
remote: Counting objects:   4% (1/22)        
remote: Counting objects:   9% (2/22)        
remote: Counting objects:  13% (3/22)        
remote: Counting objects:  18% (4/22)        
remote: Counting objects:  22% (5/22)        
remote: Counting objects:  27% (6/22)        
remote: Counting objects:  31% (7/22)        
remote: Counting objects:  36% (8/22)        
remote: Counting objects:  40% (9/22)        
remote: Counting objects:  45% (10/22)        
remote: Counting objects:  50% (11/22)        
remote: Counting objects:  54% (12/22)        
remote: Counting objects:  59% (13/22)        
remote: Counting objects:  63% (14/22)        
remote: Counting objects:  68% (15/22)        
remote: Counting objects:  72% (16/22)        
remote: Counting objects:  77% (17/22)        
remote: Counting objects:  81% (18/22)        
remote: Counting objects:  86% (19/22)        
remote: Counting objects:  90% (20/22)        
remote: Counting objects:  95% (21/22)        
remote: Counting objects: 100% (22/22)        
remote: Counting objects: 100% (22/22), done.        
remote: Compressing objects:   6% (1/16)        
remote: Compressing objects:  12% (2/16)        
remote: Compressing objects:  18% (3/16)        
remote: Compressing objects:  25% (4/16)        
remote: Compressing objects:  31% (5/16)        
remote: Compressing objects:  37% (6/16)        
remote: Compressing objects:  43% (7/16)        
remote: Compressing objects:  50% (8/16)        
remote: Compressing objects:  56% (9/16)        
remote: Compressing objects:  62% (10/16)        
remote: Compressing objects:  68% (11/16)        
remote: Compressing objects:  75% (12/16)        
remote: Compressing objects:  81% (13/16)        
remote: Compressing objects:  87% (14/16)        
remote: Compressing objects:  93% (15/16)        
remote: Compressing objects: 100% (16/16)        
remote: Compressing objects: 100% (16/16), done.        
remote: Total 23 (delta 7), reused 9 (delta 6), pack-reused 1        
From https://github.com/python/cpython
 * branch                    main       -> FETCH_HEAD
Note: switching to 'e28477f214276db941e715eebc8cdfb96c1207d9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e28477f2142 GH-117108: Change the size of the GC increment to about 1% of the total heap size. (GH-117120)
Switched to and reset branch 'main'

make: *** [Makefile:2201: buildbottest] Error 2

bedevere-bot avatar Mar 22 '24 19:03 bedevere-bot

:warning::warning::warning: Buildbot failure :warning::warning::warning:

Hi! The buildbot s390x Debian 3.x has failed when building commit e28477f214276db941e715eebc8cdfb96c1207d9.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/49/builds/8449) and take a look at the build logs.
  4. Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/49/builds/8449

Failed tests:

  • test.test_multiprocessing_forkserver.test_processes

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 23, done.        
remote: Counting objects:   4% (1/22)        
remote: Counting objects:   9% (2/22)        
remote: Counting objects:  13% (3/22)        
remote: Counting objects:  18% (4/22)        
remote: Counting objects:  22% (5/22)        
remote: Counting objects:  27% (6/22)        
remote: Counting objects:  31% (7/22)        
remote: Counting objects:  36% (8/22)        
remote: Counting objects:  40% (9/22)        
remote: Counting objects:  45% (10/22)        
remote: Counting objects:  50% (11/22)        
remote: Counting objects:  54% (12/22)        
remote: Counting objects:  59% (13/22)        
remote: Counting objects:  63% (14/22)        
remote: Counting objects:  68% (15/22)        
remote: Counting objects:  72% (16/22)        
remote: Counting objects:  77% (17/22)        
remote: Counting objects:  81% (18/22)        
remote: Counting objects:  86% (19/22)        
remote: Counting objects:  90% (20/22)        
remote: Counting objects:  95% (21/22)        
remote: Counting objects: 100% (22/22)        
remote: Counting objects: 100% (22/22), done.        
remote: Compressing objects:   6% (1/16)        
remote: Compressing objects:  12% (2/16)        
remote: Compressing objects:  18% (3/16)        
remote: Compressing objects:  25% (4/16)        
remote: Compressing objects:  31% (5/16)        
remote: Compressing objects:  37% (6/16)        
remote: Compressing objects:  43% (7/16)        
remote: Compressing objects:  50% (8/16)        
remote: Compressing objects:  56% (9/16)        
remote: Compressing objects:  62% (10/16)        
remote: Compressing objects:  68% (11/16)        
remote: Compressing objects:  75% (12/16)        
remote: Compressing objects:  81% (13/16)        
remote: Compressing objects:  87% (14/16)        
remote: Compressing objects:  93% (15/16)        
remote: Compressing objects: 100% (16/16)        
remote: Compressing objects: 100% (16/16), done.        
remote: Total 23 (delta 7), reused 9 (delta 6), pack-reused 1        
From https://github.com/python/cpython
 * branch                    main       -> FETCH_HEAD
Note: switching to 'e28477f214276db941e715eebc8cdfb96c1207d9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e28477f2142 GH-117108: Change the size of the GC increment to about 1% of the total heap size. (GH-117120)
Switched to and reset branch 'main'

make: *** [Makefile:2204: buildbottest] Error 2

bedevere-bot avatar Mar 22 '24 19:03 bedevere-bot

:warning::warning::warning: Buildbot failure :warning::warning::warning:

Hi! The buildbot ARM64 macOS 3.x has failed when building commit e28477f214276db941e715eebc8cdfb96c1207d9.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/725/builds/7475) and take a look at the build logs.
  4. Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/725/builds/7475

Failed tests:

  • test.test_multiprocessing_spawn.test_processes
  • test.test_multiprocessing_forkserver.test_processes

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 23, done.        
remote: Counting objects:   4% (1/22)        
remote: Counting objects:   9% (2/22)        
remote: Counting objects:  13% (3/22)        
remote: Counting objects:  18% (4/22)        
remote: Counting objects:  22% (5/22)        
remote: Counting objects:  27% (6/22)        
remote: Counting objects:  31% (7/22)        
remote: Counting objects:  36% (8/22)        
remote: Counting objects:  40% (9/22)        
remote: Counting objects:  45% (10/22)        
remote: Counting objects:  50% (11/22)        
remote: Counting objects:  54% (12/22)        
remote: Counting objects:  59% (13/22)        
remote: Counting objects:  63% (14/22)        
remote: Counting objects:  68% (15/22)        
remote: Counting objects:  72% (16/22)        
remote: Counting objects:  77% (17/22)        
remote: Counting objects:  81% (18/22)        
remote: Counting objects:  86% (19/22)        
remote: Counting objects:  90% (20/22)        
remote: Counting objects:  95% (21/22)        
remote: Counting objects: 100% (22/22)        
remote: Counting objects: 100% (22/22), done.        
remote: Compressing objects:   6% (1/16)        
remote: Compressing objects:  12% (2/16)        
remote: Compressing objects:  18% (3/16)        
remote: Compressing objects:  25% (4/16)        
remote: Compressing objects:  31% (5/16)        
remote: Compressing objects:  37% (6/16)        
remote: Compressing objects:  43% (7/16)        
remote: Compressing objects:  50% (8/16)        
remote: Compressing objects:  56% (9/16)        
remote: Compressing objects:  62% (10/16)        
remote: Compressing objects:  68% (11/16)        
remote: Compressing objects:  75% (12/16)        
remote: Compressing objects:  81% (13/16)        
remote: Compressing objects:  87% (14/16)        
remote: Compressing objects:  93% (15/16)        
remote: Compressing objects: 100% (16/16)        
remote: Compressing objects: 100% (16/16), done.        
remote: Total 23 (delta 7), reused 9 (delta 6), pack-reused 1        
From https://github.com/python/cpython
 * branch                    main       -> FETCH_HEAD
Note: switching to 'e28477f214276db941e715eebc8cdfb96c1207d9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e28477f2142 GH-117108: Change the size of the GC increment to about 1% of the total heap size. (GH-117120)
Switched to and reset branch 'main'

Python/gc.c:1295:16: warning: variable 'survivor_count' set but not used [-Wunused-but-set-variable]
    Py_ssize_t survivor_count = 0;
               ^
1 warning generated.
In file included from ./Modules/_tkinter.c:52:
In file included from /opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/tk.h:99:
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:131:21: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*free_private)();  /* called to free private storage */
                           ^
                            void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:334:33: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        struct _XImage *(*create_image)();
                                       ^
                                        void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:453:23: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        XID (*resource_alloc)(); /* allocator function */
                             ^
                              void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:471:20: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*synchandler)();   /* Synchronization handler */
                          ^
                           void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:496:24: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Bool (*event_vec[128])();  /* vector for wire to event */
                              ^
                               void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:497:25: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Status (*wire_vec[128])(); /* vector for event to wire */
                               ^
                                void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:509:20: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Bool (**error_vec)();      /* vector for wire to error */
                          ^
                           void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:522:25: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*savedsynchandler)(); /* user synchandler when Xlib usurps */
                               ^
                                void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:1053:24: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
typedef void (*XIMProc)();
                       ^
                        void
In file included from ./Modules/tkappinit.c:17:
In file included from /opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/tk.h:99:
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:131:21: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*free_private)();  /* called to free private storage */
                           ^
                            void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:334:33: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        struct _XImage *(*create_image)();
                                       ^
                                        void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:453:23: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        XID (*resource_alloc)(); /* allocator function */
                             ^
                              void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:471:20: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*synchandler)();   /* Synchronization handler */
                          ^
                           void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:496:24: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Bool (*event_vec[128])();  /* vector for wire to event */
                              ^
                               void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:497:25: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Status (*wire_vec[128])(); /* vector for event to wire */
                               ^
                                void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:509:20: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        Bool (**error_vec)();      /* vector for wire to error */
                          ^
                           void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:522:25: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
        int (*savedsynchandler)(); /* user synchandler when Xlib usurps */
                               ^
                                void
/opt/homebrew/Cellar/tcl-tk/8.6.13_5/include/tcl-tk/X11/Xlib.h:1053:24: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
typedef void (*XIMProc)();
                       ^
                        void
9 warnings generated.
9 warnings generated.

make: *** [buildbottest] Error 2

bedevere-bot avatar Mar 22 '24 19:03 bedevere-bot

:warning::warning::warning: Buildbot failure :warning::warning::warning:

Hi! The buildbot AMD64 FreeBSD 3.x has failed when building commit e28477f214276db941e715eebc8cdfb96c1207d9.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/1223/builds/2551) and take a look at the build logs.
  4. Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/1223/builds/2551

Failed tests:

  • test.test_multiprocessing_spawn.test_processes
  • test.test_multiprocessing_forkserver.test_processes

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 23, done.        
remote: Counting objects:   4% (1/22)        
remote: Counting objects:   9% (2/22)        
remote: Counting objects:  13% (3/22)        
remote: Counting objects:  18% (4/22)        
remote: Counting objects:  22% (5/22)        
remote: Counting objects:  27% (6/22)        
remote: Counting objects:  31% (7/22)        
remote: Counting objects:  36% (8/22)        
remote: Counting objects:  40% (9/22)        
remote: Counting objects:  45% (10/22)        
remote: Counting objects:  50% (11/22)        
remote: Counting objects:  54% (12/22)        
remote: Counting objects:  59% (13/22)        
remote: Counting objects:  63% (14/22)        
remote: Counting objects:  68% (15/22)        
remote: Counting objects:  72% (16/22)        
remote: Counting objects:  77% (17/22)        
remote: Counting objects:  81% (18/22)        
remote: Counting objects:  86% (19/22)        
remote: Counting objects:  90% (20/22)        
remote: Counting objects:  95% (21/22)        
remote: Counting objects: 100% (22/22)        
remote: Counting objects: 100% (22/22), done.        
remote: Compressing objects:   6% (1/16)        
remote: Compressing objects:  12% (2/16)        
remote: Compressing objects:  18% (3/16)        
remote: Compressing objects:  25% (4/16)        
remote: Compressing objects:  31% (5/16)        
remote: Compressing objects:  37% (6/16)        
remote: Compressing objects:  43% (7/16)        
remote: Compressing objects:  50% (8/16)        
remote: Compressing objects:  56% (9/16)        
remote: Compressing objects:  62% (10/16)        
remote: Compressing objects:  68% (11/16)        
remote: Compressing objects:  75% (12/16)        
remote: Compressing objects:  81% (13/16)        
remote: Compressing objects:  87% (14/16)        
remote: Compressing objects:  93% (15/16)        
remote: Compressing objects: 100% (16/16)        
remote: Compressing objects: 100% (16/16), done.        
remote: Total 23 (delta 7), reused 9 (delta 6), pack-reused 1        
From https://github.com/python/cpython
 * branch                  main       -> FETCH_HEAD
Note: switching to 'e28477f214276db941e715eebc8cdfb96c1207d9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e28477f214 GH-117108: Change the size of the GC increment to about 1% of the total heap size. (GH-117120)
Switched to and reset branch 'main'

bedevere-bot avatar Mar 22 '24 19:03 bedevere-bot

:warning::warning::warning: Buildbot failure :warning::warning::warning:

Hi! The buildbot AMD64 FreeBSD14 3.x has failed when building commit e28477f214276db941e715eebc8cdfb96c1207d9.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/1232/builds/1778) and take a look at the build logs.
  4. Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/1232/builds/1778

Failed tests:

  • test.test_multiprocessing_spawn.test_processes
  • test.test_multiprocessing_fork.test_processes
  • test.test_multiprocessing_forkserver.test_processes

Summary of the results of the build (if available):

==

Click to see traceback logs
remote: Enumerating objects: 23, done.        
remote: Counting objects:   4% (1/22)        
remote: Counting objects:   9% (2/22)        
remote: Counting objects:  13% (3/22)        
remote: Counting objects:  18% (4/22)        
remote: Counting objects:  22% (5/22)        
remote: Counting objects:  27% (6/22)        
remote: Counting objects:  31% (7/22)        
remote: Counting objects:  36% (8/22)        
remote: Counting objects:  40% (9/22)        
remote: Counting objects:  45% (10/22)        
remote: Counting objects:  50% (11/22)        
remote: Counting objects:  54% (12/22)        
remote: Counting objects:  59% (13/22)        
remote: Counting objects:  63% (14/22)        
remote: Counting objects:  68% (15/22)        
remote: Counting objects:  72% (16/22)        
remote: Counting objects:  77% (17/22)        
remote: Counting objects:  81% (18/22)        
remote: Counting objects:  86% (19/22)        
remote: Counting objects:  90% (20/22)        
remote: Counting objects:  95% (21/22)        
remote: Counting objects: 100% (22/22)        
remote: Counting objects: 100% (22/22), done.        
remote: Compressing objects:   6% (1/16)        
remote: Compressing objects:  12% (2/16)        
remote: Compressing objects:  18% (3/16)        
remote: Compressing objects:  25% (4/16)        
remote: Compressing objects:  31% (5/16)        
remote: Compressing objects:  37% (6/16)        
remote: Compressing objects:  43% (7/16)        
remote: Compressing objects:  50% (8/16)        
remote: Compressing objects:  56% (9/16)        
remote: Compressing objects:  62% (10/16)        
remote: Compressing objects:  68% (11/16)        
remote: Compressing objects:  75% (12/16)        
remote: Compressing objects:  81% (13/16)        
remote: Compressing objects:  87% (14/16)        
remote: Compressing objects:  93% (15/16)        
remote: Compressing objects: 100% (16/16)        
remote: Compressing objects: 100% (16/16), done.        
remote: Total 23 (delta 7), reused 9 (delta 6), pack-reused 1        
From https://github.com/python/cpython
 * branch                  main       -> FETCH_HEAD
Note: switching to 'e28477f214276db941e715eebc8cdfb96c1207d9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at e28477f214 GH-117108: Change the size of the GC increment to about 1% of the total heap size. (GH-117120)
Switched to and reset branch 'main'

configure: WARNING: pkg-config is missing. Some dependencies may not be detected correctly.

bedevere-bot avatar Mar 22 '24 19:03 bedevere-bot

Since this PR was merged, many buildbots started consistently failing in test_multiprocessing tests. For example: https://buildbot.python.org/all/#/builders/725/builds/7475

I'm not sure this can be fixed quickly. If it can't, we'll need to revert the feature.

encukou avatar Mar 25 '24 12:03 encukou

https://github.com/python/cpython/pull/117213 should fix it

markshannon avatar Mar 25 '24 13:03 markshannon

Since this PR was merged, many buildbots started consistently failing in test_multiprocessing tests. For example: https://buildbot.python.org/all/#/builders/725/builds/7475

FYI I created PR gh-117252 to track this failure to help triaging buildbot failures.

vstinner avatar Mar 26 '24 08:03 vstinner