Investigate making GC slices interruptible
Categories
(Core :: JavaScript: GC, enhancement, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox97 | --- | fixed |
People
(Reporter: jonco, Assigned: sfink)
References
(Blocks 2 open bugs)
Details
(Whiteboard: [perf-mr2:responsiveness])
Attachments
(2 files, 3 obsolete files)
I thought we had a bug for this already but I couldn't find it, so filing again.
There's now a way for browser tasks to be interrupted, so we should be able to finish a long GC slice early if a more important task (e.g. user input) comes along. This should help make the browser more responsive.
The API is overriding Task::RequestInterrupt as in the example here: https://paste.rs/VeR.diff
Two sources of interrupts in particular are important: user input events delivered from the main process to content processes, and vsync events delivered from the GPU process to content processes. (This won't help with GC slices in the main processes as I understand it).
We should try and work out how we can measure any improvement is here. Something like the average time from the event happening to being serviced.
Assignee | ||
Comment 1•4 years ago
|
||
(In reply to Jon Coppeard (:jonco) from comment #0)
I thought we had a bug for this already but I couldn't find it, so filing again.
It's closed now, bug 1351790.
Comment hidden (typo) |
Comment 3•4 years ago
|
||
Since the status are different for nightly and release, what's the status for beta?
For more information, please visit auto_nag documentation.
Reporter | ||
Updated•4 years ago
|
Reporter | ||
Updated•4 years ago
|
Assignee | ||
Updated•4 years ago
|
Assignee | ||
Comment 4•4 years ago
|
||
Assignee | ||
Comment 5•4 years ago
|
||
Assignee | ||
Updated•3 years ago
|
Assignee | ||
Comment 6•3 years ago
|
||
Assignee | ||
Comment 7•3 years ago
|
||
Assignee | ||
Comment 8•3 years ago
|
||
Updated•3 years ago
|
Comment 10•3 years ago
|
||
Backed out for various crashes on mozalloc_handle_oom.
The only affected platform is Windows 7 WebRender opt.
Failure log
Failure log from the push that we found the perma failure
[task 2021-11-29T22:45:55.858Z] 22:45:55 INFO - TEST-START | browser/base/content/test/static/browser_title_case_menus.js
[task 2021-11-29T22:45:56.334Z] 22:45:56 INFO - GECKO(6112) | out of memory: 0x0000000000100000 bytes requested
[task 2021-11-29T22:45:56.760Z] 22:45:56 INFO - TEST-INFO | Main app process: exit 1
[task 2021-11-29T22:45:56.760Z] 22:45:56 INFO - Buffered messages logged at 22:45:55
[task 2021-11-29T22:45:56.761Z] 22:45:56 INFO - Entering test bound apa_test_title_case_menubar
[task 2021-11-29T22:45:56.762Z] 22:45:56 INFO - Buffered messages finished
[task 2021-11-29T22:45:56.762Z] 22:45:56 ERROR - TEST-UNEXPECTED-FAIL | browser/base/content/test/static/browser_title_case_menus.js | application terminated with exit code 1
[task 2021-11-29T22:45:56.763Z] 22:45:56 INFO - runtests.py | Application ran for: 0:00:45.688703
[task 2021-11-29T22:45:56.764Z] 22:45:56 INFO - zombiecheck | Reading PID log: C:\Users\task_1638225065\AppData\Local\Temp\tmp2h1vq7_upidlog
[task 2021-11-29T22:45:56.765Z] 22:45:56 INFO - ==> process 5276 launched child process 5624 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.0.449278171\637862760" -childID 1 -isForBrowser -prefsHandle 2100 -prefMapHandle 2072 -prefsLen 1 -prefMapSize 256842 -jsInitHandle 924 -jsInitLen 280152 -parentBuildID 20211129215703 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 2180 205b63b0 tab)
[task 2021-11-29T22:45:56.767Z] 22:45:56 INFO - ==> process 5276 launched child process 868 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.1.856055408\771597195" -childID 2 -isForBrowser -prefsHandle 2560 -prefMapHandle 2556 -prefsLen 221 -prefMapSize 256842 -jsInitHandle 924 -jsInitLen 280152 -parentBuildID 20211129215703 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 2572 23b383b0 tab)
[task 2021-11-29T22:45:56.768Z] 22:45:56 INFO - ==> process 5276 launched child process 3692 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.2.312534020\582388750" -childID 3 -isForBrowser -prefsHandle 2556 -prefMapHandle 2600 -prefsLen 261 -prefMapSize 256842 -jsInitHandle 924 -jsInitLen 280152 -parentBuildID 20211129215703 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 2696 221aaa40 tab)
[task 2021-11-29T22:45:56.770Z] 22:45:56 INFO - ==> process 5276 launched child process 5248 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.3.1440328982\2036766485" -parentBuildID 20211129215703 -prefsHandle 2968 -prefMapHandle 2960 -prefsLen 1828 -prefMapSize 256842 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 2980 23b48050 rdd)
[task 2021-11-29T22:45:56.771Z] 22:45:56 INFO - ==> process 5276 launched child process 1560 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.5.1335156912\784906336" -childID 4 -isForBrowser -prefsHandle 3644 -prefMapHandle 3600 -prefsLen 9392 -prefMapSize 256842 -jsInitHandle 924 -jsInitLen 280152 -parentBuildID 20211129215703 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 3656 248f6b90 tab)
[task 2021-11-29T22:45:56.773Z] 22:45:56 INFO - ==> process 5276 launched child process 1816 ("Z:\task_1638225065\build\application\firefox\firefox.exe" -contentproc --channel="5276.6.1366631503\613985572" -childID 5 -isForBrowser -prefsHandle 3996 -prefMapHandle 3972 -prefsLen 9634 -prefMapSize 256842 -jsInitHandle 924 -jsInitLen 280152 -parentBuildID 20211129215703 -appDir "Z:\task_1638225065\build\application\firefox\browser" - 5276 "\\.\pipe\gecko-crash-server-pipe.5276" 4008 20bfd3b0 tab)
[task 2021-11-29T22:45:56.773Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 5248
[task 2021-11-29T22:45:56.774Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 868
[task 2021-11-29T22:45:56.774Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 1560
[task 2021-11-29T22:45:56.775Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 3692
[task 2021-11-29T22:45:56.776Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 1816
[task 2021-11-29T22:45:56.777Z] 22:45:56 INFO - zombiecheck | Checking for orphan process with PID: 5624
[task 2021-11-29T22:45:56.777Z] 22:45:56 INFO - mozcrash Downloading symbols from: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ePxOsBguQma3kW5iFvNDcA/artifacts/public/build/target.crashreporter-symbols.zip
[task 2021-11-29T22:46:06.531Z] 22:46:06 INFO - mozcrash Copy/paste: Z:/task_1638225065/fetches\minidump_stackwalk\minidump_stackwalk.exe --human C:\Users\task_1638225065\AppData\Local\Temp\tmpobj7b_4w.mozrunner\minidumps\3c546950-8b5c-4884-9169-ed678fbdda6b.dmp C:\Users\task_1638225065\AppData\Local\Temp\tmp2w0npaby --symbols-url=https://symbols.mozilla.org/
[task 2021-11-29T22:46:18.394Z] 22:46:18 INFO - mozcrash Saved minidump as Z:\task_1638225065\build\blobber_upload_dir\3c546950-8b5c-4884-9169-ed678fbdda6b.dmp
[task 2021-11-29T22:46:18.399Z] 22:46:18 INFO - mozcrash Saved app info as Z:\task_1638225065\build\blobber_upload_dir\3c546950-8b5c-4884-9169-ed678fbdda6b.extra
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - PROCESS-CRASH | browser/base/content/test/static/browser_title_case_menus.js | application crashed [@ mozalloc_handle_oom(unsigned int)]
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - Mozilla crash reason: out of memory: 0x0000000000100000 bytes requested
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - Crash dump filename: C:\Users\task_1638225065\AppData\Local\Temp\tmpobj7b_4w.mozrunner\minidumps\3c546950-8b5c-4884-9169-ed678fbdda6b.dmp
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - Operating system: Windows NT
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - 6.1.7601 Service Pack 1
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - CPU: x86
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - GenuineIntel family 6 model 63 stepping 2
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - 8 CPUs
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO -
[task 2021-11-29T22:46:18.841Z] 22:46:18 INFO - Crash reason: EXCEPTION_BREAKPOINT
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - Crash address: 0x69ea3098
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - Process uptime: 45 seconds
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO -
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - Thread 32 (crashed)
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - 0 mozglue.dll!mozalloc_abort(char const* const) [mozalloc_abort.cpp:7179e712e22bd0771ec9cd6242825efb2b6cb842 : 26 + 0x18]
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - eip = 0x69ea3098 esp = 0x154ae804 ebp = 0x154ae80c ebx = 0x533c2894
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - esi = 0x154ae818 edi = 0x6997f9b0 eax = 0x0000000a ecx = 0x69987af0
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - edx = 0x00000000 efl = 0x00000212
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - Found by: given as instruction pointer in context
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - 1 mozglue.dll!mozalloc_handle_oom(unsigned int) [mozalloc_oom.cpp:7179e712e22bd0771ec9cd6242825efb2b6cb842 : 51 + 0x8]
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - eip = 0x69ea2e9b esp = 0x154ae814 ebp = 0x154ae84c ebx = 0x533c2894
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - esi = 0x00000001 edi = 0x00100000
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - 2 xul.dll + 0x3dfd52a
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - eip = 0x5ab7d52b esp = 0x154ae854 ebp = 0x154ae858 ebx = 0x533c2894
[task 2021-11-29T22:46:18.842Z] 22:46:18 INFO - esi = 0x00000001 edi = 0x00100000
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - 3 xul.dll + 0x400c99e
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - eip = 0x5ad8c99f esp = 0x154ae860 ebp = 0x154aebe8
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - 4 xul.dll + 0x44f4bf2
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - eip = 0x5b274bf3 esp = 0x154aebf0 ebp = 0x154af0a4
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - 5 xul.dll + 0x453e6da
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - eip = 0x5b2be6db esp = 0x154af0ac ebp = 0x154af5b8
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - 6 xul.dll + 0xe7345d
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - eip = 0x57bf345e esp = 0x154af5c0 ebp = 0x154af610
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - 7 xul.dll + 0xe72a08
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - eip = 0x57bf2a09 esp = 0x154af618 ebp = 0x154af7f4
[task 2021-11-29T22:46:18.843Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 8 xul.dll + 0xe72111
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x57bf2112 esp = 0x154af7fc ebp = 0x154af8cc
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 9 xul.dll + 0xd2b9f8
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x57aab9f9 esp = 0x154af8d4 ebp = 0x154af8f4
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 10 xul.dll + 0x28c146
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x5700c147 esp = 0x154af8fc ebp = 0x154afa34
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 11 xul.dll + 0x29038e
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x5701038f esp = 0x154afa3c ebp = 0x154afa58
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 12 xul.dll + 0x7ca117
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x5754a118 esp = 0x154afa60 ebp = 0x154afa88
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - 13 xul.dll + 0x78e218
[task 2021-11-29T22:46:18.844Z] 22:46:18 INFO - eip = 0x5750e219 esp = 0x154afa90 ebp = 0x154afac0
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - 14 xul.dll + 0x78e177
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - eip = 0x5750e178 esp = 0x154afac8 ebp = 0x154afae0
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - 15 xul.dll + 0x289cc3
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - eip = 0x57009cc4 esp = 0x154afae8 ebp = 0x154afbc4
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - 16 nss3.dll!_PR_NativeRunThread(void*) [pruthr.c:7179e712e22bd0771ec9cd6242825efb2b6cb842 : 399 + 0xe]
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - eip = 0x69c9f605 esp = 0x154afbcc ebp = 0x154afbec
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - Found by: previous frame's frame pointer
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - 17 nss3.dll!pr_root(void*) [w95thred.c:7179e712e22bd0771ec9cd6242825efb2b6cb842 : 139 + 0xe]
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - eip = 0x69c927b6 esp = 0x154afbf4 ebp = 0x154afbfc ebx = 0x003aba68
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - esi = 0x16428ac0 edi = 0x003aba68
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - 18 ucrtbase.dll!thread_start<unsigned int (__stdcall*)(void *)> + 0x3e
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - eip = 0x6998e16f esp = 0x154afc04 ebp = 0x154afc38 ebx = 0x003aba68
[task 2021-11-29T22:46:18.845Z] 22:46:18 INFO - esi = 0x69c927a0 edi = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - 19 kernel32.dll!BaseThreadInitThunk + 0x11
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - eip = 0x76c9ef3c esp = 0x154afc40 ebp = 0x154afc44 ebx = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - esi = 0x69c927a0 edi = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - 20 mozglue.dll!patched_BaseThreadInitThunk(int, void*, void*) [WindowsDllBlocklist.cpp:7179e712e22bd0771ec9cd6242825efb2b6cb842 : 574 + 0xa]
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - eip = 0x69ee5608 esp = 0x154afc4c ebp = 0x154afc7c ebx = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - esi = 0x69c927a0 edi = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - 21 ntdll.dll!__RtlUserThreadStart + 0x26
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - eip = 0x76ef3618 esp = 0x154afc84 ebp = 0x154afcbc ebx = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - esi = 0x00000000 edi = 0x00000000
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - 22 ntdll.dll!_RtlUserThreadStart + 0x1a
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - eip = 0x76ef35eb esp = 0x154afcc4 ebp = 0x154afcd4 ebx = 0x003aba68
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - esi = 0x00000000 edi = 0x00000000
[task 2021-11-29T22:46:18.846Z] 22:46:18 INFO - Found by: call frame info
[task 2021-11-29T22:46:18.847Z] 22:46:18 INFO -
Assignee | ||
Comment 11•3 years ago
|
||
This might be suppressing GCs, causing more memory to be used, and different platforms will then show OOM differently. I'm looking at profiles to see if I broke GC scheduling or something; haven't figured it out yet.
Assignee | ||
Comment 12•3 years ago
|
||
Interesting. The problem does not reproduce with my original stack of patches based on a somewhat older changeset, but it starts reproducing once I rebase on top of the autoland revision. So in a way this is a rebase conflict with the changesets that landed in between my original base and the autoland base. (There were 874 of them, c73bcc465e0c::ec2128; I had rebased not long before submitting.)
The failure is reliable. Maybe I'll try bisecting. Though if I could get a profile with markers out, the difference might be obvious.
Comment 13•3 years ago
|
||
There are some r+ patches which didn't land and no activity in this bug for 2 weeks.
:sfink, could you have a look please?
For more information, please visit auto_nag documentation.
Assignee | ||
Comment 14•3 years ago
|
||
Yep, working on it.
Updated•3 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Comment 15•3 years ago
|
||
Comment 16•3 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/1f17ef0a9d4d
https://hg.mozilla.org/mozilla-central/rev/73b9f3c51eee
Assignee | ||
Comment 17•3 years ago
|
||
https://share.firefox.dev/33tnB7d is a local debug build example with an interrupted GC in the parent process. It's kind of weird; the GC gets interrupted very soon after it was triggered, resulting in the first slice running for only 218µs. And it's a USER_INACTIVE GC.
I think it may have sort of interrupted itself? Marker table, all within the same millisecond:
Runnable - DummyEvent (lots of these)
Runnable - CCGCScheduler::EnsureGCRunner (19.887µs)
Runnable - CCGCScheduler::EnsureGCRunner (27.612µs)
GC Interrupt
Runnable - MozPromise::ThenValueBase::ResolveOrRejectRunnable
Runnable - DummyEvent (lots of these)
Perhaps the MozPromise, which might be for the GC (?), is interrupting it? Though I don't see this with all GCs.
The next GC is a CC_FINISHED GC, and again the very first slice gets interrupted almost immediately. And the marker table shows the exact same sequence of markers.
Updated•2 years ago
|
Updated•2 years ago
|
Updated•2 years ago
|
Description
•