Bug 312362
| Summary: | [JSC] Build time increased after galloping merge landed | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Simon Pena <spena> |
| Component: | JavaScriptCore | Assignee: | Nobody <webkit-unassigned> |
| Status: | RESOLVED DUPLICATE | ||
| Severity: | Normal | CC: | clopez, darin, jer.noble, jmichaud, marcus_plutowski, syg, thorton, webkit-bug-importer, ysuzuki |
| Priority: | P2 | Keywords: | InRadar |
| Version: | WebKit Nightly Build | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Simon Pena
After https://bugs.webkit.org/show_bug.cgi?id=310948, build times have increased:
Building with gcc 13.3.0-6ubuntu2~24.04.1 in release mode, spent 15+ minutes on the unified file that has the type array template expansions.
As the galloping merge provided a measurable performance boost, any changes addressing this should not cause any performance regression, and should be perf-tested.
We also need to measure how long the type array template expansions file took to build before landing this -- so we can quantify the exact impact.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Darin Adler
Since there are only a few code paths that use this sort, I am guessing there’s a way to keep the performance benefits of this much better sort, without creating a single unified source file that happens to take so long to compile.
Simon Pena
TL;DR: 975s GCC → 171s clang ≈ 5.7× speedup, ~13 min saved
With gcc,
awk 'NR>1 {printf "%8d ms %s\n", $2-$1, $4}' WebKitBuild/WPE/Release/.ninja_log | sort -rn | head -20
975560 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f2e18ffc-30.cpp.o
961520 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f2e18ffc-30.cpp.o
398689 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-41.cpp.o
393547 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-41.cpp.o
177045 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/GeneratedSerializers.cpp.o
175074 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/GeneratedSerializers.cpp.o
170132 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-199.cpp.o
162719 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-199.cpp.o
152361 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-7.cpp.o
144570 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-7.cpp.o
136922 ms Source/WebCore/CMakeFiles/WebCoreTestSupport.dir/testing/Internals.cpp.o
134738 ms Source/WebCore/CMakeFiles/WebCoreTestSupport.dir/testing/Internals.cpp.o
128649 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-6.cpp.o
125753 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-6.cpp.o
125724 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-10.cpp.o
124162 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-6.cpp.o
123556 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-bfc896e1-12.cpp.o
122372 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-23a5fd0e-6.cpp.o
121921 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-10.cpp.o
120371 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-3a3c4ec0-5.cpp.o
With clang
11:48 $ awk 'NR>1 {printf "%8d ms %s\n", $2-$1, $4}' \
> WebKitBuild-Clang/.ninja_log | sort -rn | head -20
224610 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-41.cpp.o
203361 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/GeneratedSerializers.cpp.o
176576 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-199.cpp.o
172579 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-7.cpp.o
171003 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f2e18ffc-30.cpp.o
145389 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-6.cpp.o
144482 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-6.cpp.o
142641 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-8.cpp.o
136630 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-9.cpp.o
136394 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-950a39b6-10.cpp.o
136260 ms Source/WebCore/CMakeFiles/WebCoreTestSupport.dir/testing/Internals.cpp.o
135037 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-10.cpp.o
127530 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-9.cpp.o
122789 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-11.cpp.o
120558 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-4.cpp.o
117650 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-f34946be-3.cpp.o
116528 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-2f84417a-21.cpp.o
115895 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-26ec8d00-6.cpp.o
113722 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-26ec8d00-7.cpp.o
111608 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-3.cpp.o
Simon Pena
Going to the commit prior to (re)landing the galloping merge,
TL;DR: 165s GCC → 111s clang ≈ 1.5× speedup
Summarising, clang has climbed from 111s to 171s (1.54× slower), gcc has gone from 165s to 975s (5.91× slower)
with Clang 18.1.3
14:54 $ awk 'NR>1 {printf "%8d ms %s\n", $2-$1, $4}' WebKitBuild-Clang/.ninja_log | sort -rn | head -20
215143 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-41.cpp.o
193978 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/GeneratedSerializers.cpp.o
159743 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-199.cpp.o
159735 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-7.cpp.o
132725 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-6.cpp.o
130608 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-8.cpp.o
129356 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-950a39b6-10.cpp.o
127712 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-10.cpp.o
127082 ms Source/WebCore/CMakeFiles/WebCoreTestSupport.dir/testing/Internals.cpp.o
126351 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-6.cpp.o
125837 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-9.cpp.o
118674 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-9.cpp.o
117603 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-11.cpp.o
111494 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f2e18ffc-30.cpp.o
109885 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-4.cpp.o
109789 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-2f84417a-20.cpp.o
107056 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-26ec8d00-6.cpp.o
106884 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-5.cpp.o
106800 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-26ec8d00-7.cpp.o
104988 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-950a39b6-9.cpp.o
and with gcc 13.3.0:
15:22 $ awk 'NR>1 {printf "%8d ms %s\n", $2-$1, $4}' WebKitBuild/WPE/Release/.ninja_log | sort -rn | head -20
415628 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-41.cpp.o
170013 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/GeneratedSerializers.cpp.o
165180 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f2e18ffc-30.cpp.o
162374 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-3a52ce78-199.cpp.o
153831 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-7.cpp.o
136139 ms Source/WebCore/CMakeFiles/WebCoreTestSupport.dir/testing/Internals.cpp.o
120630 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-23a5fd0e-6.cpp.o
120231 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-6.cpp.o
119492 ms Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource-88d1702b-10.cpp.o
118008 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-84c9f43f-6.cpp.o
117773 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-bfc896e1-12.cpp.o
116414 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-767013ce-9.cpp.o
116277 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/ftl/FTLLowerDFGToB3.cpp.o
115364 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-3a3c4ec0-5.cpp.o
113642 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-8.cpp.o
111373 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-be65d27a-9.cpp.o
109278 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/dfg/DFGSpeculativeJIT.cpp.o
106852 ms Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-bfc896e1-3.cpp.o
102823 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-950a39b6-10.cpp.o
102699 ms Source/WebCore/CMakeFiles/WebCore.dir/__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-043dd90b-11.cpp.o
Radar WebKit Bug Importer
<rdar://problem/175322764>
Carlos Alberto Lopez Perez
This issue was work-arounded here: https://commits.webkit.org/312349@main for GCC <14 which is the one affected.
Closing
*** This bug has been marked as a duplicate of bug 313694 ***