GH-117108: Change the size of the GC increment to about 1% of the total heap size.
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
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.
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.
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).
Given #117123, and the performance regression, maybe it makes sense to revert #116206 while working on getting this right?
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
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).
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
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.
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 |
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.
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?
: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:
- Don't panic.
- Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
- 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.
- Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
- 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
: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:
- Don't panic.
- Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
- 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.
- Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
- 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
: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:
- Don't panic.
- Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
- 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.
- Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
- 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
: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:
- Don't panic.
- Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
- 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.
- Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
- 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'
: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:
- Don't panic.
- Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
- 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.
- Check if the failure is related to this commit (e28477f214276db941e715eebc8cdfb96c1207d9) or if it is a false positive.
- 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.
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.
https://github.com/python/cpython/pull/117213 should fix it
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.