AUTOMOC: generation performance decrease in 3.27.x due to cmGeneratorTarget::EvaluateInterfaceProperty
Platform: Windows 11 Pro
We are using CMake with the Ninja generator on a large project. When upgrading to CMake 3.27, I noticed that generation takes an unreasonable amount of time. CPU activity is low, as is disk activity.
Here are my measurements:
CMake Version | Clean Configure2 [s] | Re-configure2 [s] | Generate2 [s] |
---|---|---|---|
3.25.3 | 32 | 21 | 18 |
3.26.5 | 27 | 19 | 17 |
3.27.03 | 33 | 21 | 151 |
Notes:
- 2 Times measured manually
- 3 Same for 3.27.1 through 3.27.4
Are there any recent changes to that generator that would explain this? Note that these measurements are repeatable.
Update: I built CMake 3.27.4 using MSVC as RelWithDebInfo, and CPU profiled the generation step. Here is the hot path:
Function Name | Total CPU [unit, %] | Self CPU [unit, %] | Module | Category |
---|---|---|---|---|
+ cmGlobalNinjaGenerator::Generate | 172320 (94.56%) | 0 (0.00%) | cmake | Kernel | Security | Runtime |
| + cmGlobalGenerator::Generate | 172237 (94.51%) | 2 (0.00%) | cmake | Kernel | Security | Runtime |
|| + cmQtAutoGenGlobalInitializer::SetupCustomTargets | 164648 (90.35%) | 0 (0.00%) | cmake | Kernel | Security | Runtime |
||| + cmQtAutoGenInitializer::SetupCustomTargets | 164648 (90.35%) | 1 (0.00%) | cmake | Kernel | Security | Runtime |
|||| + cmQtAutoGenInitializer::SetupWriteAutogenInfo | 164603 (90.32%) | 0 (0.00%) | cmake | Kernel | Security | Runtime |
||||| + AddInterfaceEntries | 164217 (90.11%) | 0 (0.00%) | cmake | Runtime |
|||||| + `anonymous namespace'::addInterfaceEntry | 164211 (90.11%) | 1 (0.00%) | cmake | Runtime |
||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 164208 (90.11%) | 0 (0.00%) | cmake | Runtime |
|||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 164199 (90.10%) | 2 (0.00%) | cmake | Runtime |
||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 164172 (90.09%) | 7 (0.00%) | cmake | Runtime |
|||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 164103 (90.05%) | 7 (0.00%) | cmake | Runtime |
||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 163910 (89.94%) | 27 (0.01%) | cmake | Runtime |
|||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 163448 (89.69%) | 43 (0.02%) | cmake | Runtime |
||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 162479 (89.16%) | 70 (0.04%) | cmake | Runtime |
|||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 160476 (88.06%) | 137 (0.08%) | cmake | Runtime |
||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 156904 (86.10%) | 174 (0.10%) | cmake | Runtime |
|||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 150730 (82.71%) | 265 (0.15%) | cmake | Runtime |
||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 140891 (77.31%) | 398 (0.22%) | cmake | Runtime |
|||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 127020 (69.70%) | 487 (0.27%) | cmake | Runtime |
||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 109039 (59.83%) | 534 (0.29%) | cmake | Runtime |
|||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 88370 (48.49%) | 550 (0.30%) | cmake | Runtime |
||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 66522 (36.50%) | 555 (0.30%) | cmake | Runtime |
|||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 46429 (25.48%) | 360 (0.20%) | cmake | Runtime |
||||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 29997 (16.46%) | 270 (0.15%) | cmake | Runtime |
|||||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 17532 (9.62%) | 165 (0.09%) | cmake | Runtime |
||||||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 9244 (5.07%) | 88 (0.05%) | cmake | Runtime |
|||||||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 4295 (2.36%) | 48 (0.03%) | cmake | Runtime |
||||||||||||||||||||||||||| + cmGeneratorTarget::EvaluateInterfaceProperty | 1705 (0.94%) | 28 (0.02%) | cmake | Runtime |
|||||||||||||||||||||||||||| - cmGeneratorTarget::EvaluateInterfaceProperty | 542 (0.30%) | 6 (0.00%) | cmake | Runtime |
|||||||||||||||||||||||||||| - cmGeneratorTarget::GetLinkInterfaceLibraries | 254 (0.14%) | 0 (0.00%) | cmake | Runtime |
|||||||||||||||||||||||||||| - cmGeneratorTarget::GetProperty | 247 (0.14%) | 6 (0.00%) | cmake | Runtime |
|||||||||||||||||||||||||||| - cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker | 246 (0.13%) | 9 (0.00%) | cmake | Runtime |
|||||||||||||||||||||||||||| - cmGeneratorTarget::MaybeHaveInterfaceProperty | 198 (0.11%) | 28 (0.02%) | cmake | Runtime |
Edited by dgehri