On Thu, 20 Feb 2025 13:14:34 GMT, Thomas Stuefe <stu...@openjdk.org> wrote:
>> Greetings, >> >> This is a rewrite of the Compiler Memory Statistic. The primary new feature >> is the capability to track allocations by C2 phases. This will allow for a >> much faster, more thorough analysis of footprint issues. >> >> Tracking Arena memory movement is not trivial since one needs to follow the >> ebb and flow of allocations over nested C2 phases. A phase typically >> allocates more than it releases, accruing new nodes and resource area. A >> phase can also release more than allocated when Arenas carried over from >> other phases go out of scope in this phase. Finally, it can have high >> temporary peaks that vanish before the phase ends. >> >> I wanted to track that information correctly and display it clearly in a way >> that is easy to understand. >> >> The patch implements per-phase tracking by instrumenting the `TracePhase` >> stack object (thanks to @rwestrel for this idea). >> >> The nice thing with this technique is that it also allows for quick analysis >> of a suspected hot spot (eg, the inside of a loop): drop a TracePhase in >> there with a speaking name, and you can see the allocations inside that >> phase. >> >> The statistic gives us two new forms of output: >> >> 1) At the moment the compilation memory *peaked*, we now get a detailed >> breakdown of that peak usage per phase: >> >> >> Arena Usage by Arena Type and compilation phase, at arena usage peak of >> 58817816: >> Phase Total ra node comp >> type index reglive regsplit cienv other >> none 1205512 155104 982984 33712 >> 0 0 0 0 0 33712 >> parse 11685376 720016 6578728 1899064 >> 0 0 0 0 1832888 654680 >> optimizer 916584 0 556416 0 >> 0 0 0 0 0 360168 >> escapeAnalysis 1983400 0 1276392 707008 >> 0 0 0 0 0 0 >> connectionGraph 720016 0 0 621832 >> 0 0 0 0 98184 0 >> macroEliminate 196448 0 196448 0 >> 0 0 0 0 0 0 >> iterGVN 327440 0 196368 131072 >> 0 0 0 0 0 0 >> incrementalInline 3992816 0 3043704 62... > > Thomas Stuefe has refreshed the contents of this pull request, and previous > commits have been removed. The incremental views will show differences > compared to the previous content of the PR. The pull request contains one new > commit since the last revision: > > avoid Thread::current in high traffic chunk alloc path A few naming/documentation comments so far. src/hotspot/share/compiler/compilationMemoryStatistic.cpp line 1093: > 1091: Compile::TracePhase tp(Phase::_t_testTimer1); > 1092: Arena ar(MemTag::mtCompiler, Arena::Tag::tag_reglive); > 1093: ar.Amalloc(2 * M); // phase-local peak, should show up at > MY-TESTPHASE-2 The reference to `MY-TESTPHASE-2` seems obsolete. test/hotspot/jtreg/compiler/print/CompileCommandMemLimit.java line 105: > 103: // by phase end. So, in the phase timeline these 2MB must show > up as "significant temporary peak". > 104: // In testPhase2, we allocate 32MB from resource area, which is > leaked until the end of the compilation. This > 105: // means that these 32MB will show up as permanent memory > increase in the phasetimeline. The references to `testPhase` seem obsolete, do you mean `Phase::_t_testTimer1` and `Phase::_t_testTimer2`? test/hotspot/jtreg/compiler/print/CompileCommandMemLimit.java line 105: > 103: // by phase end. So, in the phase timeline these 2MB must show > up as "significant temporary peak". > 104: // In testPhase2, we allocate 32MB from resource area, which is > leaked until the end of the compilation. This > 105: // means that these 32MB will show up as permanent memory > increase in the phasetimeline. Suggestion: // means that these 32MB will show up as permanent memory increase in the phase timeline. test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java line 27: > 25: /* > 26: * @test id=c2 > 27: * @summary Checks that -XX:CompileCommand=PrintMemStat,... works Suggestion: * @summary Checks that -XX:CompileCommand=MemStat,... works test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java line 35: > 33: /* > 34: * @test id=c1 > 35: * @summary Checks that -XX:CompileCommand=PrintMemStat,... works Suggestion: * @summary Checks that -XX:CompileCommand=MemStat,... works test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java line 86: > 84: oa.reportDiagnosticSummary(); > 85: > 86: // We expect two printouts for "PrintMemStat". A line at > compilation time, and a line in a summary report Suggestion: // We expect two printouts for "MemStat". A line at compilation time, and a line in a summary report ------------- Changes requested by rcastanedalo (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/23530#pullrequestreview-2636581034 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967354177 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967350305 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967355138 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967358896 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967357706 PR Review Comment: https://git.openjdk.org/jdk/pull/23530#discussion_r1967359828