Skip to content

8364973: Add JVMTI stress testing mode #26360

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion make/RunTests.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,13 @@ define SetTestOpt
endif
endef

AGENT_PREFIX := lib
AGENT_EXT := .so

# Setup _NT_SYMBOL_PATH on Windows, which points to our pdb files.
ifeq ($(call isTargetOs, windows), true)
AGENT_PREFIX :=
AGENT_EXT := .dll
ifndef _NT_SYMBOL_PATH
SYMBOL_PATH := $(call PathList, $(sort $(patsubst %/, %, $(dir $(wildcard \
$(addprefix $(SYMBOLS_IMAGE_DIR)/bin/, *.pdb */*.pdb))))))
Expand All @@ -71,6 +76,9 @@ ifeq ($(call isTargetOs, windows), true)
endif
endif

ifeq ($(call isTargetOs, macosx), true)
AGENT_EXT := .dyLib
endif
################################################################################

# This is the JDK that we will test
Expand Down Expand Up @@ -204,7 +212,7 @@ $(eval $(call SetTestOpt,AOT_JDK,JTREG))

$(eval $(call ParseKeywordVariable, JTREG, \
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR FAILURE_HANDLER_TIMEOUT \
TEST_MODE ASSERT VERBOSE RETAIN TEST_THREAD_FACTORY MAX_MEM RUN_PROBLEM_LISTS \
TEST_MODE ASSERT VERBOSE RETAIN TEST_THREAD_FACTORY JVMTI_STRESS_AGENT MAX_MEM RUN_PROBLEM_LISTS \
RETRY_COUNT REPEAT_COUNT MAX_OUTPUT REPORT AOT_JDK $(CUSTOM_JTREG_SINGLE_KEYWORDS), \
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
EXTRA_PROBLEM_LISTS LAUNCHER_OPTIONS \
Expand Down Expand Up @@ -876,6 +884,15 @@ define SetupRunJtregTestBody
))
endif

ifneq ($$(JTREG_JVMTI_STRESS_AGENT), )
AGENT := $${AGENT_PREFIX}JvmtiStressAgent${AGENT_EXT}=$${JTREG_JVMTI_STRESS_AGENT}
$1_JTREG_BASIC_OPTIONS += -javaoption:'-agentpath:${TEST_IMAGE_DIR}/hotspot/jtreg/native/$${AGENT}'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$1_JTREG_BASIC_OPTIONS += -javaoption:'-agentpath:${TEST_IMAGE_DIR}/hotspot/jtreg/native/$${AGENT}'
$1_JTREG_BASIC_OPTIONS += -javaoption:'-agentpath:$(TEST_IMAGE_DIR)/hotspot/jtreg/native/$$(AGENT)'

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, this line looks quite long. Can you check that it does not pass 80 characters? (Can't tell on github reviews...)

$1_JTREG_BASIC_OPTIONS += $$(addprefix $$(JTREG_PROBLEM_LIST_PREFIX), $$(wildcard \
$$(addprefix $$($1_TEST_ROOT)/, ProblemList-jvmti-stress-agent.txt) \
))
Comment on lines +884 to +885
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$$(addprefix $$($1_TEST_ROOT)/, ProblemList-jvmti-stress-agent.txt) \
))
$$(addprefix $$($1_TEST_ROOT)/, ProblemList-jvmti-stress-agent.txt) \
))

Also, the comment on line length applies here.

endif


ifneq ($$(JTREG_LAUNCHER_OPTIONS), )
$1_JTREG_LAUNCHER_OPTIONS += $$(JTREG_LAUNCHER_OPTIONS)
endif
Expand Down
101 changes: 101 additions & 0 deletions test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#
# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

#############################################################################
#
# List of quarantined tests failing with jvmti stress agent in any mode.
#
#############################################################################


compiler/macronodes/TestTopInMacroElimination.java 8362832 generic-all

gc/stringdedup/TestStringDeduplicationAgeThreshold.java 8362562 generic-all
gc/stringdedup/TestStringDeduplicationInterned.java 8362562 generic-all
gc/stringdedup/TestStringDeduplicationPrintOptions.java 8362562 generic-all


serviceability/jvmti/events/SingleStep/singlestep02/singlestep02.java 8362350 generic-all
vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t007/TestDescription.java 8362350 generic-all

# Incompatbile tests

# IR
compiler/loopopts/superword/TestDependencyOffsets.java#avx1-v016-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx1-v016-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx1-v032-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx1-v032-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx2-v016-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx2-v016-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx2-v032-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#avx2-v032-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v004-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v004-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v008-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v008-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v016-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#sse4-v016-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vanilla-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v004-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v008-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v016-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v032-U 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-A 0000000 generic-all
compiler/loopopts/superword/TestDependencyOffsets.java#vec-v064-U 0000000 generic-all

# Requires solo jvmti capabilities

compiler/jvmci/events/JvmciShutdownEventTest.java 0000000 generic-all

# jdwp
runtime/6294277/SourceDebugExtension.java 0000000 generic-all

# heap stats
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorArrayAllSampledTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorEventOnOffTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorGCParallelTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorGCSerialTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorGCTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorIllegalArgumentTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorInitialAllocationTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorInterpreterArrayTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorInterpreterObjectTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorMultiArrayTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorNoCapabilityTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorRecursiveTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatArrayCorrectnessTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatIntervalTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatObjectCorrectnessTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatSimpleTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorThreadDisabledTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorThreadOnOffTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorThreadTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorTwoAgentsTest.java 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorVMEventsTest.java#id0 0000000 generic-all
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorVMEventsTest.java#id1 0000000 generic-all
13 changes: 13 additions & 0 deletions test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import jdk.test.lib.Utils;
import jdk.test.lib.helpers.ClassFileInstaller;
import jdk.test.whitebox.WhiteBox;
import jtreg.SkippedException;

import java.io.PrintWriter;
import java.io.StringWriter;
Expand Down Expand Up @@ -349,6 +350,7 @@ public void start() {
if (shouldInstallWhiteBox()) {
installWhiteBox();
}
checkCompatibleFlags();
checkIRRuleCompilePhasesFormat();
disableIRVerificationIfNotFeasible();

Expand Down Expand Up @@ -775,12 +777,23 @@ private boolean hasIRAnnotations() {
return Arrays.stream(testClass.getDeclaredMethods()).anyMatch(m -> m.getAnnotationsByType(IR.class).length > 0);
}

private void checkCompatibleFlags() {
for (String flag : Utils.getTestJavaOpts()) {
if (flag.contains("-agentpath")) {
throw new SkippedException("Can't run test with agent.");
}
}
}

private List<String> anyNonWhitelistedJTregVMAndJavaOptsFlags() {
List<String> flags = Arrays.stream(Utils.getTestJavaOpts())
.map(s -> s.replaceFirst("-XX:[+|-]?|-(?=[^D|^e])", ""))
.collect(Collectors.toList());
List<String> nonWhiteListedFlags = new ArrayList();
for (String flag : flags) {
if (flag.contains("agentpath")) {
throw new SkippedException("Can't run test with -javaagent");
}
// Property flags (prefix -D), -ea and -esa are whitelisted.
if (!flag.startsWith("-D") && !flag.startsWith("-e") && JTREG_WHITELIST_FLAGS.stream().noneMatch(flag::contains)) {
// Found VM flag that is not whitelisted
Expand Down
47 changes: 47 additions & 0 deletions test/jdk/ProblemList-jvmti-stress-agent.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#
# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

#############################################################################
#
# List of quarantined tests failing with jvmti stress agent in any mode.
#
#############################################################################


sun/security/ssl/SSLEngineImpl/SSLEngineKeyLimit.java 8362658 generic-all
sun/security/ssl/SSLSessionImpl/MultiNSTClient.java 8362658 generic-all
sun/security/ssl/SSLSessionImpl/MultiNSTNoSessionCreation.java 8362658 generic-all
sun/security/ssl/SSLSessionImpl/MultiNSTParallel.java 8362658 generic-all
sun/security/ssl/SSLSessionImpl/MultiNSTSequence.java 8362658 generic-all
sun/security/ssl/SSLSessionImpl/ResumptionUpdateBoundValues.java 8362658 generic-all
sun/security/ssl/SSLSocketImpl/SSLSocketKeyLimit.java 8362658 generic-all


# List of tests incompatible with jvmti stress agent or requiring more investigation

com/sun/jdi/EATests.java#id0 0000000 generic-all
com/sun/jdi/ThreadMemoryLeakTest.java 0000000 generic-all

# weak referenced are not cleared
java/lang/WeakPairMap/Driver.java 0000000 generic-all
java/lang/ref/ReachabilityFenceTest.java 0000000 generic-all
7 changes: 6 additions & 1 deletion test/jtreg-ext/requires/VMProps.java
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,12 @@ protected String vmHasDTrace() {
* @return true if CDS is supported by the VM to be tested.
*/
protected String vmCDS() {
return "" + WB.isCDSIncluded();
boolean noJvmtiAdded = allFlags()
.filter(s -> s.startsWith("-agentpath"))
.findAny()
.isEmpty();

return "" + (noJvmtiAdded && WB.isCDSIncluded());
}

/**
Expand Down
Loading