Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.
/ lanai Public archive

Commit 6c9d650

Browse files
committedApr 1, 2020
8241881: ZGC: Add tests for JFR events
Reviewed-by: stefank, eosterlund, egahlin
1 parent f1ef83b commit 6c9d650

7 files changed

+407
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZAllocationStallEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx32M jdk.jfr.event.gc.detailed.TestZAllocationStallEvent
42+
*/
43+
44+
public class TestZAllocationStallEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZAllocationStall);
49+
recording.start();
50+
51+
// Allocate many large objects quickly, to outrun the GC
52+
for (int i = 0; i < 100; i++) {
53+
blackHole(new byte[16 * 1024 * 1024]);
54+
}
55+
56+
recording.stop();
57+
58+
// Verify recording
59+
List<RecordedEvent> events = Events.fromRecording(recording);
60+
System.out.println("Events: " + events.size());
61+
Events.hasEvents(events);
62+
for (RecordedEvent event : Events.fromRecording(recording)) {
63+
Events.assertField(event, "size").atLeast(2L * 1024 * 1024);
64+
}
65+
}
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZPageAllocationEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx32M jdk.jfr.event.gc.detailed.TestZPageAllocationEvent
42+
*/
43+
44+
public class TestZPageAllocationEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZPageAllocation);
49+
recording.start();
50+
51+
// Allocate objects, to provoke page allocations
52+
for (int i = 0; i < 100; i++) {
53+
blackHole(new byte[256 * 1024]);
54+
}
55+
56+
recording.stop();
57+
58+
// Verify recording
59+
List<RecordedEvent> events = Events.fromRecording(recording);
60+
System.out.println("Events: " + events.size());
61+
Events.hasEvents(events);
62+
for (RecordedEvent event : Events.fromRecording(recording)) {
63+
Events.assertField(event, "size").atLeast(2L * 1024 * 1024);
64+
}
65+
}
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZPageCacheFlushEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx32M jdk.jfr.event.gc.detailed.TestZPageCacheFlushEvent
42+
*/
43+
44+
public class TestZPageCacheFlushEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZPageCacheFlush);
49+
recording.start();
50+
51+
// Allocate non-large objects, to fill page cache with non-large pages
52+
for (int i = 0; i < 128; i++) {
53+
blackHole(new byte[256 * 1024]);
54+
}
55+
56+
// Allocate large objects, to provoke page cache flushing
57+
for (int i = 0; i < 10; i++) {
58+
blackHole(new byte[7 * 1024 * 1024]);
59+
}
60+
61+
recording.stop();
62+
63+
// Verify recording
64+
List<RecordedEvent> events = Events.fromRecording(recording);
65+
System.out.println("Events: " + events.size());
66+
Events.hasEvents(events);
67+
}
68+
}
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZRelocationSetEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx32M jdk.jfr.event.gc.detailed.TestZRelocationSetEvent
42+
*/
43+
44+
public class TestZRelocationSetEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZRelocationSet);
49+
recording.start();
50+
51+
// Collect
52+
System.gc();
53+
54+
recording.stop();
55+
56+
// Verify recording
57+
List<RecordedEvent> events = Events.fromRecording(recording);
58+
System.out.println("Events: " + events.size());
59+
Events.hasEvents(events);
60+
}
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZRelocationSetGroupEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx32M jdk.jfr.event.gc.detailed.TestZRelocationSetGroupEvent
42+
*/
43+
44+
public class TestZRelocationSetGroupEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZRelocationSetGroup);
49+
recording.start();
50+
51+
// Collect
52+
System.gc();
53+
54+
recording.stop();
55+
56+
// Verify recording
57+
List<RecordedEvent> events = Events.fromRecording(recording);
58+
System.out.println("Events: " + events.size());
59+
Events.hasEvents(events);
60+
}
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package jdk.jfr.event.gc.detailed;
27+
28+
import java.util.List;
29+
30+
import static gc.testlibrary.Allocation.blackHole;
31+
import jdk.jfr.Recording;
32+
import jdk.jfr.consumer.RecordedEvent;
33+
import jdk.test.lib.jfr.EventNames;
34+
import jdk.test.lib.jfr.Events;
35+
36+
/**
37+
* @test TestZUncommitEvent
38+
* @requires vm.hasJFR & vm.gc.Z
39+
* @key jfr
40+
* @library /test/lib /test/jdk /test/hotspot/jtreg
41+
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms32M -Xmx128M -Xlog:gc,gc+heap -XX:+ZUncommit -XX:ZUncommitDelay=1 jdk.jfr.event.gc.detailed.TestZUncommitEvent
42+
*/
43+
44+
public class TestZUncommitEvent {
45+
public static void main(String[] args) throws Exception {
46+
try (Recording recording = new Recording()) {
47+
// Activate the event we are interested in and start recording
48+
recording.enable(EventNames.ZUncommit);
49+
recording.start();
50+
51+
// Allocate a large object, to force heap usage above min heap size
52+
blackHole(new byte[32 * 1024 * 1024]);
53+
54+
// Collect
55+
System.gc();
56+
57+
// Wait for uncommit to happen
58+
Thread.sleep(10 * 1000);
59+
60+
recording.stop();
61+
62+
// Verify recording
63+
List<RecordedEvent> events = Events.fromRecording(recording);
64+
System.out.println("Events: " + events.size());
65+
Events.hasEvents(events);
66+
for (RecordedEvent event : Events.fromRecording(recording)) {
67+
System.out.println("Event:" + event);
68+
final long capacityBefore = Events.assertField(event, "capacityBefore").getValue();
69+
final long capacityAfter = Events.assertField(event, "capacityAfter").below(capacityBefore).getValue();
70+
Events.assertField(event, "uncommitted").equal(capacityBefore - capacityAfter);
71+
}
72+
}
73+
}
74+
}

‎test/lib/jdk/test/lib/jfr/EventNames.java

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ public class EventNames {
142142
public final static String GCPhaseParallel = PREFIX + "GCPhaseParallel";
143143
public final static String GCPhaseConcurrent = PREFIX + "GCPhaseConcurrent";
144144
public final static String GCPhaseConcurrentLevel1 = PREFIX + "GCPhaseConcurrentLevel1";
145+
public final static String ZAllocationStall = PREFIX + "ZAllocationStall";
146+
public final static String ZPageAllocation = PREFIX + "ZPageAllocation";
147+
public final static String ZPageCacheFlush = PREFIX + "ZPageCacheFlush";
148+
public final static String ZRelocationSet = PREFIX + "ZRelocationSet";
149+
public final static String ZRelocationSetGroup = PREFIX + "ZRelocationSetGroup";
150+
public final static String ZUncommit = PREFIX + "ZUncommit";
145151

146152
// Compiler
147153
public final static String Compilation = PREFIX + "Compilation";

0 commit comments

Comments
 (0)
This repository has been archived.