Skip to content

Commit 076c71f

Browse files
committedFeb 21, 2025
Make {Record,Replay}Training options diagnostic
1 parent aa4e947 commit 076c71f

File tree

10 files changed

+32
-32
lines changed

10 files changed

+32
-32
lines changed
 

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ We have implemented the following improvements over the JDK main line:
4949
- **[Ahead-of-Time Method Profiling (JEP draft 8325147)](https://openjdk.org/jeps/8325147)**: We store method profiles
5050
from training runs in the CDS archive, thereby enabling the JIT to begin compiling earlier during warmup.
5151
As a result, Java applications can reach peak performance faster.
52-
- This feature is enabled by the new VM flags `-XX:+RecordTraining` and `-XX:+ReplayTraining`.
52+
- This feature is enabled by the new diagnostic (`-XX:+UnlockDiagnosticVMOptions`) VM flags `-XX:+RecordTraining` and `-XX:+ReplayTraining`.
5353

5454
- **Ahead-of-time resolution of constant pool entries**: many
5555
constant pool entries are resolved during the assembly phase. This allows the application to start up faster. Also,

‎src/hotspot/share/compiler/compiler_globals.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,10 @@
395395
\
396396
/* flags to control training and deployment modes */ \
397397
\
398-
product(bool, RecordTraining, false, \
398+
product(bool, RecordTraining, false, DIAGNOSTIC, \
399399
"Request output of training data for improved deployment.") \
400400
\
401-
product(bool, ReplayTraining, false, \
401+
product(bool, ReplayTraining, false, DIAGNOSTIC, \
402402
"Read training data, if available, for use in this execution") \
403403
\
404404
product(bool, PrintTrainingInfo, false, DIAGNOSTIC, \

‎test/hotspot/jtreg/premain/javac/javac-test.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -370,8 +370,8 @@ TESTS="1 2"
370370
for i in $TESTS; do
371371
if test $i = 2; then
372372
REPLAY=" (With Training Data Replay)"
373-
X1="-XX:+RecordTraining"
374-
X2="-XX:+ReplayTraining"
373+
X1="-XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining"
374+
X2="-XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining"
375375
STEP3="(STEP 3 of 5) "
376376
STEP4="(STEP 4 of 5) "
377377
STEP5="(STEP 5 of 5) "

‎test/hotspot/jtreg/premain/javac_new_workflow/run.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@
4242
# The training run uses two JVM processes. We add "pid" to the log to distinguish their output.
4343
TRAINING_OPTS="${TRAINING_OPTS} -Xlog:scc -Xlog:cds=debug::uptime,tags,pid"
4444
TRAINING_OPTS="${TRAINING_OPTS} -XX:+AOTClassLinking"
45-
#TRAINING_OPTS="${TRAINING_OPTS} -XX:+RecordTraining"
45+
#TRAINING_OPTS="${TRAINING_OPTS} -XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining"
4646

47-
# These options are enabled by default for training run.
48-
#PRODUCTION_OPTS="${PRODUCTION_OPTS} -XX:+ReplayTraining"
47+
# These options are enabled by default for training run.
48+
#PRODUCTION_OPTS="${PRODUCTION_OPTS} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining"
4949

5050

5151
launcher=$1

‎test/hotspot/jtreg/premain/jmh/run.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ if false; then
8585
fi
8686

8787
do_test "(STEP 3 of 5) Run with $APP-static.jsa and dump profile in $APP-dynamic.jsa (With Training Data Replay)" \
88-
$JAVA -XX:SharedArchiveFile=$APP-static.jsa -XX:ArchiveClassesAtExit=$APP-dynamic.jsa -XX:+RecordTraining \
88+
$JAVA -XX:SharedArchiveFile=$APP-static.jsa -XX:ArchiveClassesAtExit=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining \
8989
-Xlog:cds=debug,cds+class=debug:file=$APP-dynamic.dump.log \
9090
$CMDLINE
9191

9292
do_test "(STEP 4 of 5) Run with $APP-dynamic.jsa and generate AOT code" \
93-
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+ReplayTraining -XX:+StoreCachedCode \
93+
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
9494
-Xlog:scc*=warning:file=$APP-store-sc.log \
9595
-XX:CachedCodeFile=$APP-dynamic.jsa-sc -XX:CachedCodeMaxSize=100M $CMDLINE
9696

9797
do_test "(STEP 5 of 5) Final production run: with $APP-dynamic.jsa and load AOT code" \
98-
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+ReplayTraining -XX:+LoadCachedCode \
98+
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
9999
-Xlog:scc*=warning:file=$APP-load-sc.log \
100100
-XX:CachedCodeFile=$APP-dynamic.jsa-sc $CMDLINE

‎test/hotspot/jtreg/premain/lib/bench-lib.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,12 @@ function dump_one_jvm () {
227227

228228
echo "(Premain STEP 3 of 5) Run with $APPID-static.jsa and dump profile in $APPID-dynamic.jsa (With Training Data Replay)"
229229
rm -f $APPID-dynamic.dump.log
230-
(set -x; $JAVA -XX:SharedArchiveFile=$APPID-static.jsa -XX:ArchiveClassesAtExit=$APPID-dynamic.jsa -XX:+RecordTraining \
230+
(set -x; $JAVA -XX:SharedArchiveFile=$APPID-static.jsa -XX:ArchiveClassesAtExit=$APPID-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining \
231231
-Xlog:cds=debug,cds+class=debug:file=$APPID-dynamic.dump.log::filesize=0 $CMDLINE) || exit 1
232232

233233
echo "(Premain 4 of 5) Run with $APPID-dynamic.jsa and generate AOT code"
234234
rm -f $APPID-store-sc.log
235-
(set -x; $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+ReplayTraining -XX:+StoreCachedCode \
235+
(set -x; $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
236236
-Xlog:scc*=warning:file=$APPID-store-sc.log::filesize=0 \
237237
-XX:CachedCodeFile=$APPID-dynamic.jsa-sc -XX:CachedCodeMaxSize=100M $CMDLINE) || exit 1
238238

@@ -260,12 +260,12 @@ function exec_one_jvm () {
260260
)
261261
RUNLOG=$RUNLOG,$(get_elapsed logs/${1}_xon.$2)
262262
(set -x;
263-
perf stat -r $REPEAT $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+ReplayTraining \
263+
perf stat -r $REPEAT $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining \
264264
$CMDLINE 2> logs/${1}_td.$2
265265
)
266266
RUNLOG=$RUNLOG,$(get_elapsed logs/${1}_td.$2)
267267
(set -x;
268-
perf stat -r $REPEAT $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+ReplayTraining -XX:+LoadCachedCode \
268+
perf stat -r $REPEAT $JAVA -XX:SharedArchiveFile=$APPID-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
269269
-XX:CachedCodeFile=$APPID-dynamic.jsa-sc -Xlog:scc=error \
270270
$CMDLINE 2> logs/${1}_aot.$2
271271
)

‎test/hotspot/jtreg/premain/lib/premain-run.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,16 @@ if false; then
8686
fi
8787

8888
do_test "(STEP 3 of 5) Run with $APP-static.jsa and dump profile in $APP-dynamic.jsa (With Training Data Replay)" \
89-
$JAVA -XX:SharedArchiveFile=$APP-static.jsa -XX:ArchiveClassesAtExit=$APP-dynamic.jsa -XX:+RecordTraining \
89+
$JAVA -XX:SharedArchiveFile=$APP-static.jsa -XX:ArchiveClassesAtExit=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining \
9090
-Xlog:cds=debug,cds+class=debug:file=$APP-dynamic.dump.log::filesize=0 \
9191
$CMDLINE
9292

9393
do_test "(STEP 4 of 5) Run with $APP-dynamic.jsa and generate AOT code" \
94-
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+ReplayTraining -XX:+StoreCachedCode \
94+
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
9595
-Xlog:scc*=warning:file=$APP-store-sc.log::filesize=0 \
9696
-XX:CachedCodeFile=$APP-dynamic.jsa-sc -XX:CachedCodeMaxSize=100M $CMDLINE
9797

9898
do_test "(STEP 5 of 5) Final production run: with $APP-dynamic.jsa and load AOT code" \
99-
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+ReplayTraining -XX:+LoadCachedCode \
99+
$JAVA -XX:SharedArchiveFile=$APP-dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
100100
-Xlog:scc*=warning:file=$APP-load-sc.log::filesize=0 \
101101
-XX:CachedCodeFile=$APP-dynamic.jsa-sc $CMDLINE

‎test/hotspot/jtreg/premain/spring-petclinic/Makefile

+5-5
Original file line numberDiff line numberDiff line change
@@ -186,17 +186,17 @@ ${PC_DYNAMIC_JSA}: ${PC_STATIC_JSA}
186186
rm -f ${PC_DYNAMIC_JSA} ${PC_DYNAMIC_JSA}.log
187187
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_STATIC_JSA} -XX:ArchiveClassesAtExit=${PC_DYNAMIC_JSA} \
188188
-Xlog:cds=debug,cds+class=debug,cds+resolve=debug:file=${PC_DYNAMIC_JSA}.log \
189-
-XX:+RecordTraining ${UNPACKED_CMDLINE}
189+
-XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining ${UNPACKED_CMDLINE}
190190
ls -l ${PC_DYNAMIC_JSA}
191191

192192
${PC_CACHED_CODE}: ${PC_DYNAMIC_JSA}
193-
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_JSA} -XX:+ReplayTraining -XX:+StoreCachedCode \
193+
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
194194
-XX:CachedCodeFile=${PC_CACHED_CODE} -XX:CachedCodeMaxSize=512M ${UNPACKED_CMDLINE}
195195
ls -l ${PC_CACHED_CODE}
196196

197197
# run with premain optimizatipn
198198
run: ${PC_CACHED_CODE}
199-
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_JSA} -XX:+ReplayTraining -XX:+LoadCachedCode \
199+
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
200200
-XX:CachedCodeFile=${PC_CACHED_CODE} ${LOG_INIT} -Xlog:scc=error ${UNPACKED_CMDLINE}
201201

202202
# run with just static CDS archive
@@ -304,10 +304,10 @@ dummyn: ${PC_CDS} Dummy.jar
304304

305305
dummyn-50: ${PC_CDS} Dummy.jar
306306
bash -c "time for i in {1..50}; do ${PREMAIN_JAVA} -XX:CacheDataStore=${PC_CDS} \
307-
-XX:-ReplayTraining -XX:-LoadCachedCode -Xlog:scc=error ${DUMMY_CMDLINE}; done"
307+
-XX:+UnlockDiagnosticVMOptions -XX:-ReplayTraining -XX:-LoadCachedCode -Xlog:scc=error ${DUMMY_CMDLINE}; done"
308308

309309
dummyn-50-perf: ${PC_CDS} Dummy.jar
310-
perf stat -r 50 ${PREMAIN_JAVA} -XX:CacheDataStore=${PC_CDS} -XX:-ReplayTraining -XX:-LoadCachedCode -Xlog:scc=error ${DUMMY_CMDLINE}
310+
perf stat -r 50 ${PREMAIN_JAVA} -XX:CacheDataStore=${PC_CDS} -XX:+UnlockDiagnosticVMOptions -XX:-ReplayTraining -XX:-LoadCachedCode -Xlog:scc=error ${DUMMY_CMDLINE}
311311

312312
clean: clean0
313313
rm -rf *~ ${PC_REPO} Dummy*.class Dummy.jar *.old.txt *.new.txt tmp.txt hs_err*

‎test/hotspot/jtreg/premain/spring-petclinic/WarmupMakefile

+8-8
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ ${PC_DYNAMIC_ST_JSA}: ${PC_STATIC_JSA}
257257
rm -f ${PC_DYNAMIC_ST_JSA} ${PC_DYNAMIC_ST_JSA}.log
258258
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_STATIC_JSA} -XX:ArchiveClassesAtExit=${PC_DYNAMIC_ST_JSA} \
259259
-Xlog:cds=debug,cds+class=debug,cds+resolve=debug:file=$@.log \
260-
-XX:+RecordTraining ${UNPACKED_CMDLINE} &> $@.out &
260+
-XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining ${UNPACKED_CMDLINE} &> $@.out &
261261
$(wait-for-startup)
262262
$(exit-app)
263263
ls -l $@
@@ -266,21 +266,21 @@ ${PC_DYNAMIC_LT_JSA}: ${PC_STATIC_JSA}
266266
rm -f ${PC_DYNAMIC_LT_JSA} ${PC_DYNAMIC_LT_JSA}.log
267267
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_STATIC_JSA} -XX:ArchiveClassesAtExit=${PC_DYNAMIC_LT_JSA} \
268268
-Xlog:cds=debug,cds+class=debug,cds+resolve=debug:file=$@.log \
269-
-XX:+RecordTraining ${UNPACKED_CMDLINE} &> $@.out &
269+
-XX:+UnlockDiagnosticVMOptions -XX:+RecordTraining ${UNPACKED_CMDLINE} &> $@.out &
270270
$(wait-for-startup)
271271
$(run-jmeter)
272272
$(exit-app)
273273
ls -l $@
274274

275275
${PC_ST_CACHED_CODE}: ${PC_DYNAMIC_ST_JSA}
276-
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+ReplayTraining -XX:+StoreCachedCode \
276+
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
277277
-XX:CachedCodeFile=${PC_ST_CACHED_CODE} -XX:CachedCodeMaxSize=512M ${UNPACKED_CMDLINE} &> $@.out &
278278
$(wait-for-startup)
279279
$(exit-app)
280280
ls -l $@
281281

282282
${PC_LT_CACHED_CODE}: ${PC_DYNAMIC_LT_JSA}
283-
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+ReplayTraining -XX:+StoreCachedCode \
283+
${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+StoreCachedCode \
284284
-Xlog:scc,cds=debug,cds+class=debug,cds+heap=warning,cds+resolve=debug:file=$@.log \
285285
-XX:CachedCodeFile=${PC_LT_CACHED_CODE} -XX:CachedCodeMaxSize=512M ${UNPACKED_CMDLINE} &> $@.out &
286286
$(wait-for-startup)
@@ -328,31 +328,31 @@ warmup-preload: ${PC_DYNAMIC_NOTRAINING_JSA} ${JMETER_BIN}
328328

329329
# run with dynamic archive with startup training data
330330
warmup-st: ${PC_DYNAMIC_ST_JSA} ${JMETER_BIN}
331-
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+ReplayTraining \
331+
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining \
332332
${UNPACKED_CMDLINE} &> $@.out &
333333
$(wait-for-startup)
334334
$(run-jmeter)
335335
$(exit-app)
336336

337337
# run with dynamic archive with load training data
338338
warmup-lt: ${PC_DYNAMIC_LT_JSA} ${JMETER_BIN}
339-
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+ReplayTraining \
339+
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining \
340340
${UNPACKED_CMDLINE} &> $@.out &
341341
$(wait-for-startup)
342342
$(run-jmeter)
343343
$(exit-app)
344344

345345
# run with startup training data and aot code
346346
warmup-st-aot: ${PC_ST_CACHED_CODE} ${JMETER_BIN}
347-
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+ReplayTraining -XX:+LoadCachedCode \
347+
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_ST_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
348348
-XX:CachedCodeFile=${PC_ST_CACHED_CODE} ${UNPACKED_CMDLINE} &> $@.out &
349349
$(wait-for-startup)
350350
$(run-jmeter)
351351
$(exit-app)
352352

353353
# run with load training data and aot code
354354
warmup-lt-aot: ${PC_LT_CACHED_CODE} ${JMETER_BIN}
355-
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+ReplayTraining -XX:+LoadCachedCode \
355+
time taskset -c "${APP_CPUS}" ${PREMAIN_JAVA} -XX:SharedArchiveFile=${PC_DYNAMIC_LT_JSA} -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode \
356356
-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation -XX:-TraceDeoptimization \
357357
-Xlog:init -XX:CachedCodeFile=${PC_LT_CACHED_CODE} ${UNPACKED_CMDLINE} &> $@.out &
358358
$(wait-for-startup)

‎test/hotspot/jtreg/premain/spring-petclinic/bench.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ mkdir -p pet-clinic-bench
4141
cd pet-clinic-bench
4242
mkdir -p data
4343

44-
CMDLINE="-XX:SharedArchiveFile=spring-petclinic.dynamic.jsa -XX:+ReplayTraining -XX:+LoadCachedCode"
44+
CMDLINE="-XX:SharedArchiveFile=spring-petclinic.dynamic.jsa -XX:+UnlockDiagnosticVMOptions -XX:+ReplayTraining -XX:+LoadCachedCode"
4545
CMDLINE="$CMDLINE -XX:CachedCodeFile=spring-petclinic.code.jsa -Xlog:init -Xlog:scc=error -Xmx2g"
4646
CMDLINE="$CMDLINE -cp @petclinic-snapshot/target/unpacked/classpath -DautoQuit=true"
4747
CMDLINE="$CMDLINE -Dspring.aot.enabled=true org.springframework.samples.petclinic.PetClinicApplication"

0 commit comments

Comments
 (0)
Please sign in to comment.