Skip to content

Commit e7f4402

Browse files
authored
Merge pull request #21840 from adpopescu/gc-young-generation-config
Add JFR YoungGenerationConfiguration Event
2 parents 4d92969 + b4c6d79 commit e7f4402

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

runtime/vm/JFRChunkWriter.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,33 @@ VM_JFRChunkWriter::writeGCHeapConfigurationEvent()
873873

874874
}
875875

876+
void
877+
VM_JFRChunkWriter::writeYoungGenerationConfigurationEvent()
878+
{
879+
YoungGenerationConfigurationEntry *youngGenConfig = &(VM_JFRConstantPoolTypes::getJFRConstantEvents(_vm)->YoungGenConfigEntry);
880+
881+
/* reserve size field */
882+
U_8 *dataStart = reserveEventSize();
883+
884+
/* write event type */
885+
_bufferWriter->writeLEB128(YoungGenerationConfigID);
886+
887+
/* write event start time */
888+
_bufferWriter->writeLEB128(j9time_nano_time());
889+
890+
/* write young generation min size */
891+
_bufferWriter->writeLEB128(youngGenConfig->minSize);
892+
893+
/* write young generation max size */
894+
_bufferWriter->writeLEB128(youngGenConfig->maxSize);
895+
896+
/* write young generation to old generation ratio */
897+
_bufferWriter->writeLEB128(youngGenConfig->newRatio);
898+
899+
/* write event size */
900+
writeEventSize(dataStart);
901+
}
902+
876903
void
877904
VM_JFRChunkWriter::writeInitialSystemPropertyEvents(J9JavaVM *vm)
878905
{

runtime/vm/JFRChunkWriter.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ enum MetadataTypeID {
8989
ThreadDumpID = 111,
9090
NativeLibraryID = 112,
9191
GCHeapConfigID = 133,
92+
YoungGenerationConfigID = 134,
9293
ThreadID = 164,
9394
ThreadGroupID = 165,
9495
ClassID = 166,
@@ -416,6 +417,8 @@ class VM_JFRChunkWriter {
416417
writeInitialEnvironmentVariableEvents();
417418

418419
writeGCHeapConfigurationEvent();
420+
421+
writeYoungGenerationConfigurationEvent();
419422
}
420423

421424
writePhysicalMemoryEvent();
@@ -823,6 +826,8 @@ class VM_JFRChunkWriter {
823826

824827
void writeGCHeapConfigurationEvent();
825828

829+
void writeYoungGenerationConfigurationEvent();
830+
826831
void writeInitialSystemPropertyEvents(J9JavaVM *vm);
827832

828833
void writeInitialEnvironmentVariableEvents();

runtime/vm/JFRConstantPoolTypes.hpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,12 @@ struct GCHeapConfigurationEntry {
309309
UDATA heapAddressBits;
310310
};
311311

312+
struct YoungGenerationConfigurationEntry {
313+
U_64 minSize;
314+
U_64 maxSize;
315+
U_64 newRatio;
316+
};
317+
312318
struct VirtualizationInformationEntry {
313319
const char *name;
314320
};
@@ -331,6 +337,7 @@ struct JFRConstantEvents {
331337
VirtualizationInformationEntry VirtualizationInfoEntry;
332338
OSInformationEntry OSInfoEntry;
333339
GCHeapConfigurationEntry GCHeapConfigEntry;
340+
YoungGenerationConfigurationEntry YoungGenConfigEntry;
334341
};
335342

336343
class VM_JFRConstantPoolTypes {
@@ -1063,6 +1070,7 @@ class VM_JFRConstantPoolTypes {
10631070
initializeVirtualizationInformation(vm);
10641071
initializeOSInformation(vm, result);
10651072
initializeGCHeapConfigurationEvent(vm, result);
1073+
initializeYoungGenerationConfigurationEvent(vm);
10661074
}
10671075

10681076
/**
@@ -1303,6 +1311,27 @@ class VM_JFRConstantPoolTypes {
13031311
gcConfiguration->heapAddressBits = J9JAVAVM_REFERENCE_SIZE(vm) * 8;
13041312
}
13051313

1314+
/**
1315+
* Initialize YoungGenerationConfigurationEntry
1316+
*
1317+
* @param vm[in] the J9JavaVM
1318+
*/
1319+
static void initializeYoungGenerationConfigurationEvent(J9JavaVM *vm)
1320+
{
1321+
J9MemoryManagerFunctions *mmFuncs = vm->memoryManagerFunctions;
1322+
YoungGenerationConfigurationEntry *youngGenConfiguration = &(getJFRConstantEvents(vm)->YoungGenConfigEntry);
1323+
1324+
youngGenConfiguration->minSize = mmFuncs->j9gc_get_minimum_young_generation_size(vm);
1325+
youngGenConfiguration->maxSize = mmFuncs->j9gc_get_maximum_young_generation_size(vm);
1326+
if (0 != mmFuncs->j9gc_get_maximum_young_generation_size(vm)) {
1327+
youngGenConfiguration->newRatio = mmFuncs->j9gc_get_maximum_heap_size(vm)/mmFuncs->j9gc_get_maximum_young_generation_size(vm) - 1;
1328+
} else {
1329+
youngGenConfiguration->newRatio = 0;
1330+
}
1331+
}
1332+
1333+
1334+
13061335
static uintptr_t recordSystemProcessEvent(uintptr_t pid, const char *commandLine, void *userData)
13071336
{
13081337
VM_JFRConstantPoolTypes *constantPoolTypes = reinterpret_cast<VM_JFRConstantPoolTypes *>(userData);

test/functional/cmdLineTests/jfr/jfrevents.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
8181
<output type="success" caseSensitive="yes" regex="no">jdk.GCHeapConfiguration</output>
8282
<output type="failure" caseSensitive="yes" regex="no">jfr print: could not read recording</output>
8383
</test>
84+
<test id="test jfr young generation configuration - approx 30seconds">
85+
<command>$JFR_EXE$ print --xml --events "YoungGenerationConfiguration" defaultJ9recording.jfr</command>
86+
<output type="required" caseSensitive="yes" regex="no">http://www.w3.org/2001/XMLSchema-instance</output>
87+
<output type="success" caseSensitive="yes" regex="no">jdk.YoungGenerationConfiguration</output>
88+
<output type="failure" caseSensitive="yes" regex="no">jfr print: could not read recording</output>
89+
</test>
8490
<test id="test jfr system process - approx 30 seconds" platforms="linux.*">
8591
<command>$JFR_EXE$ print --xml --events "SystemProcess" defaultJ9recording.jfr</command>
8692
<output type="required" caseSensitive="yes" regex="no">http://www.w3.org/2001/XMLSchema-instance</output>

0 commit comments

Comments
 (0)