changeset 58607:009b55b3219a

8241361: ZGC: Implement memory related JFR events Reviewed-by: pliden, eosterlund Contributed-by: stefan.karlsson@oracle.com, per.liden@oracle.com
author stefank
date Fri, 27 Mar 2020 15:28:07 +0100
parents d10588dca67b
children 04b9012767e2
files src/hotspot/share/gc/z/zPageAllocator.cpp src/hotspot/share/gc/z/zPageAllocator.hpp src/hotspot/share/gc/z/zRelocationSetSelector.cpp src/hotspot/share/gc/z/zRelocationSetSelector.hpp src/hotspot/share/gc/z/zRelocationSetSelector.inline.hpp src/hotspot/share/gc/z/zStat.cpp src/hotspot/share/gc/z/zTracer.cpp src/hotspot/share/gc/z/zTracer.hpp src/hotspot/share/gc/z/zTracer.inline.hpp src/hotspot/share/jfr/metadata/metadata.xml src/jdk.jfr/share/conf/jfr/default.jfc src/jdk.jfr/share/conf/jfr/profile.jfc
diffstat 12 files changed, 230 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/share/gc/z/zPageAllocator.cpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zPageAllocator.cpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, 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
@@ -36,6 +36,7 @@
 #include "gc/z/zTask.hpp"
 #include "gc/z/zTracer.inline.hpp"
 #include "gc/z/zWorkers.hpp"
+#include "jfr/jfrEvents.hpp"
 #include "runtime/globals.hpp"
 #include "runtime/init.hpp"
 #include "runtime/java.hpp"
@@ -422,6 +423,8 @@
 }
 
 ZPage* ZPageAllocator::alloc_page_common(uint8_t type, size_t size, ZAllocationFlags flags) {
+  EventZPageAllocation event;
+
   ZPage* const page = alloc_page_common_inner(type, size, flags.no_reserve());
   if (page == NULL) {
     // Out of memory
@@ -432,7 +435,8 @@
   increase_used(size, flags.relocation());
 
   // Send trace event
-  ZTracer::tracer()->report_page_alloc(size, _used, max_available(flags.no_reserve()), _cache.available(), flags);
+  event.commit(type, size, _used, max_available(flags.no_reserve()),
+               _cache.available(), flags.non_blocking(), flags.no_reserve());
 
   return page;
 }
@@ -461,6 +465,7 @@
   if (page == NULL) {
     // Allocation failed
     ZStatTimer timer(ZCriticalPhaseAllocationStall);
+    EventZAllocationStall event;
 
     // We can only block if VM is fully initialized
     check_out_of_memory_during_initialization();
@@ -490,6 +495,8 @@
       ZLocker<ZLock> locker(&_lock);
       _satisfied.remove(&request);
     }
+
+    event.commit(type, size);
   }
 
   return page;
@@ -571,7 +578,9 @@
   satisfy_alloc_queue();
 }
 
-size_t ZPageAllocator::flush_cache(ZPageCacheFlushClosure* cl) {
+size_t ZPageAllocator::flush_cache(ZPageCacheFlushClosure* cl, bool for_allocation) {
+  EventZPageCacheFlush event;
+
   ZList<ZPage> list;
 
   // Flush pages
@@ -591,6 +600,9 @@
     destroy_page(page);
   }
 
+  // Send event
+  event.commit(flushed, for_allocation);
+
   return flushed;
 }
 
@@ -616,7 +628,7 @@
 
   // Flush pages
   ZPageCacheFlushForAllocationClosure cl(requested);
-  const size_t flushed = flush_cache(&cl);
+  const size_t flushed = flush_cache(&cl, true /* for_allocation */);
 
   assert(requested == flushed, "Failed to flush");
 
@@ -678,6 +690,7 @@
     return timeout;
   }
 
+  EventZUncommit event;
   size_t capacity_before;
   size_t capacity_after;
   size_t uncommitted;
@@ -698,7 +711,7 @@
     if (flush > 0) {
       // Flush pages to uncommit
       ZPageCacheFlushForUncommitClosure cl(flush, delay);
-      uncommit += flush_cache(&cl);
+      uncommit += flush_cache(&cl, false /* for_allocation */);
       timeout = cl.timeout();
     }
 
@@ -717,6 +730,9 @@
                        capacity_after / M, percent_of(capacity_after, max_capacity()),
                        uncommitted / M);
 
+    // Send event
+    event.commit(capacity_before, capacity_after, uncommitted);
+
     // Update statistics
     ZStatInc(ZCounterUncommit, uncommitted);
   }
--- a/src/hotspot/share/gc/z/zPageAllocator.hpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zPageAllocator.hpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, 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
@@ -81,7 +81,7 @@
   ZPage* alloc_page_blocking(uint8_t type, size_t size, ZAllocationFlags flags);
   ZPage* alloc_page_nonblocking(uint8_t type, size_t size, ZAllocationFlags flags);
 
-  size_t flush_cache(ZPageCacheFlushClosure* cl);
+  size_t flush_cache(ZPageCacheFlushClosure* cl, bool for_allocation);
   void flush_cache_for_allocation(size_t requested);
 
   void satisfy_alloc_queue();
--- a/src/hotspot/share/gc/z/zRelocationSetSelector.cpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zRelocationSetSelector.cpp	Fri Mar 27 15:28:07 2020 +0100
@@ -26,6 +26,7 @@
 #include "gc/z/zPage.inline.hpp"
 #include "gc/z/zRelocationSet.hpp"
 #include "gc/z/zRelocationSetSelector.inline.hpp"
+#include "jfr/jfrEvents.hpp"
 #include "logging/log.hpp"
 #include "runtime/globals.hpp"
 #include "utilities/debug.hpp"
@@ -41,9 +42,11 @@
     _compacting_to(0) {}
 
 ZRelocationSetSelectorGroup::ZRelocationSetSelectorGroup(const char* name,
+                                                         uint8_t page_type,
                                                          size_t page_size,
                                                          size_t object_size_limit) :
     _name(name),
+    _page_type(page_type),
     _page_size(page_size),
     _object_size_limit(object_size_limit),
     _fragmentation_limit(page_size * (ZFragmentationLimit / 100)),
@@ -81,6 +84,16 @@
   _stats._empty += size;
 }
 
+bool ZRelocationSetSelectorGroup::is_disabled() {
+  // Medium pages are disabled when their page size is zero
+  return _page_type == ZPageTypeMedium && _page_size == 0;
+}
+
+bool ZRelocationSetSelectorGroup::is_selectable() {
+  // Large pages are not selectable
+  return _page_type != ZPageTypeLarge;
+}
+
 void ZRelocationSetSelectorGroup::semi_sort() {
   // Semi-sort registered pages by live bytes in ascending order
   const size_t npartitions_shift = 11;
@@ -123,12 +136,7 @@
   }
 }
 
-void ZRelocationSetSelectorGroup::select() {
-  if (_page_size == 0) {
-    // Page type disabled
-    return;
-  }
-
+void ZRelocationSetSelectorGroup::select_inner() {
   // Calculate the number of pages to relocate by successively including pages in
   // a candidate relocation set and calculate the maximum space requirement for
   // their live objects.
@@ -177,10 +185,26 @@
                        _name, selected_from, selected_to, npages - _nselected);
 }
 
+void ZRelocationSetSelectorGroup::select() {
+  if (is_disabled()) {
+    return;
+  }
+
+  EventZRelocationSetGroup event;
+
+  if (is_selectable()) {
+    select_inner();
+  }
+
+  // Send event
+  event.commit(_page_type, _stats.npages(), _stats.total(), _stats.empty(),
+               _stats.compacting_from(), _stats.compacting_to());
+}
+
 ZRelocationSetSelector::ZRelocationSetSelector() :
-    _small("Small", ZPageSizeSmall, ZObjectSizeLimitSmall),
-    _medium("Medium", ZPageSizeMedium, ZObjectSizeLimitMedium),
-    _large("Large", 0 /* page_size */, 0 /* object_size_limit */) {}
+    _small("Small", ZPageTypeSmall, ZPageSizeSmall, ZObjectSizeLimitSmall),
+    _medium("Medium", ZPageTypeMedium, ZPageSizeMedium, ZObjectSizeLimitMedium),
+    _large("Large", ZPageTypeLarge, 0 /* page_size */, 0 /* object_size_limit */) {}
 
 void ZRelocationSetSelector::register_live_page(ZPage* page) {
   const uint8_t type = page->type();
@@ -213,13 +237,19 @@
   // bytes in ascending order. Relocating pages in this order allows
   // us to start reclaiming memory more quickly.
 
-  // Select pages from each group, except large
+  EventZRelocationSet event;
+
+  // Select pages from each group
+  _large.select();
   _medium.select();
   _small.select();
 
   // Populate relocation set
   relocation_set->populate(_medium.selected(), _medium.nselected(),
                            _small.selected(), _small.nselected());
+
+  // Send event
+  event.commit(total(), empty(), compacting_from(), compacting_to());
 }
 
 ZRelocationSetSelectorStats ZRelocationSetSelector::stats() const {
--- a/src/hotspot/share/gc/z/zRelocationSetSelector.hpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zRelocationSetSelector.hpp	Fri Mar 27 15:28:07 2020 +0100
@@ -71,6 +71,7 @@
 class ZRelocationSetSelectorGroup {
 private:
   const char* const                _name;
+  const uint8_t                    _page_type;
   const size_t                     _page_size;
   const size_t                     _object_size_limit;
   const size_t                     _fragmentation_limit;
@@ -80,10 +81,14 @@
   size_t                           _nselected;
   ZRelocationSetSelectorGroupStats _stats;
 
+  bool is_disabled();
+  bool is_selectable();
   void semi_sort();
+  void select_inner();
 
 public:
   ZRelocationSetSelectorGroup(const char* name,
+                              uint8_t page_type,
                               size_t page_size,
                               size_t object_size_limit);
   ~ZRelocationSetSelectorGroup();
@@ -104,6 +109,11 @@
   ZRelocationSetSelectorGroup _medium;
   ZRelocationSetSelectorGroup _large;
 
+  size_t total() const;
+  size_t empty() const;
+  size_t compacting_from() const;
+  size_t compacting_to() const;
+
 public:
   ZRelocationSetSelector();
 
--- a/src/hotspot/share/gc/z/zRelocationSetSelector.inline.hpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zRelocationSetSelector.inline.hpp	Fri Mar 27 15:28:07 2020 +0100
@@ -78,4 +78,20 @@
   return _stats;
 }
 
+inline size_t ZRelocationSetSelector::total() const {
+  return _small.stats().total() + _medium.stats().total() + _large.stats().total();
+}
+
+inline size_t ZRelocationSetSelector::empty() const {
+  return _small.stats().empty() + _medium.stats().empty() + _large.stats().empty();
+}
+
+inline size_t ZRelocationSetSelector::compacting_from() const {
+  return _small.stats().compacting_from() + _medium.stats().compacting_from() + _large.stats().compacting_from();
+}
+
+inline size_t ZRelocationSetSelector::compacting_to() const {
+  return _small.stats().compacting_to() + _medium.stats().compacting_to() + _large.stats().compacting_to();
+}
+
 #endif // SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP
--- a/src/hotspot/share/gc/z/zStat.cpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zStat.cpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1153,7 +1153,9 @@
 
 void ZStatRelocation::print() {
   print("Small", _stats.small());
-  print("Medium", _stats.medium());
+  if (ZPageSizeMedium != 0) {
+    print("Medium", _stats.medium());
+  }
   print("Large", _stats.large());
 
   log_info(gc, reloc)("Relocation: %s", _success ? "Successful" : "Incomplete");
--- a/src/hotspot/share/gc/z/zTracer.cpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zTracer.cpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, 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
@@ -23,6 +23,7 @@
 
 #include "precompiled.hpp"
 #include "gc/shared/gcId.hpp"
+#include "gc/z/zGlobals.hpp"
 #include "gc/z/zStat.hpp"
 #include "gc/z/zTracer.hpp"
 #include "jfr/jfrEvents.hpp"
@@ -35,6 +36,19 @@
 
 #if INCLUDE_JFR
 
+class ZPageTypeConstant : public JfrSerializer {
+public:
+  virtual void serialize(JfrCheckpointWriter& writer) {
+    writer.write_count(3);
+    writer.write_key(ZPageTypeSmall);
+    writer.write("Small");
+    writer.write_key(ZPageTypeMedium);
+    writer.write("Medium");
+    writer.write_key(ZPageTypeLarge);
+    writer.write("Large");
+  }
+};
+
 class ZStatisticsCounterTypeConstant : public JfrSerializer {
 public:
   virtual void serialize(JfrCheckpointWriter& writer) {
@@ -58,6 +72,9 @@
 };
 
 static void register_jfr_type_serializers() {
+  JfrSerializer::register_serializer(TYPE_ZPAGETYPETYPE,
+                                     true /* permit_cache */,
+                                     new ZPageTypeConstant());
   JfrSerializer::register_serializer(TYPE_ZSTATISTICSCOUNTERTYPE,
                                      true /* permit_cache */,
                                      new ZStatisticsCounterTypeConstant());
@@ -114,18 +131,3 @@
     e.commit();
   }
 }
-
-void ZTracer::send_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags) {
-  NoSafepointVerifier nsv;
-
-  EventZPageAllocation e;
-  if (e.should_commit()) {
-    e.set_pageSize(size);
-    e.set_usedAfter(used);
-    e.set_freeAfter(free);
-    e.set_inCacheAfter(cache);
-    e.set_nonBlocking(flags.non_blocking());
-    e.set_noReserve(flags.no_reserve());
-    e.commit();
-  }
-}
--- a/src/hotspot/share/gc/z/zTracer.hpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zTracer.hpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, 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
@@ -25,7 +25,6 @@
 #define SHARE_GC_Z_ZTRACER_HPP
 
 #include "gc/shared/gcTrace.hpp"
-#include "gc/z/zAllocationFlags.hpp"
 
 class ZStatCounter;
 class ZStatPhase;
@@ -40,7 +39,6 @@
   void send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value);
   void send_stat_sampler(const ZStatSampler& sampler, uint64_t value);
   void send_thread_phase(const char* name, const Ticks& start, const Ticks& end);
-  void send_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags);
 
 public:
   static ZTracer* tracer();
@@ -49,7 +47,6 @@
   void report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value);
   void report_stat_sampler(const ZStatSampler& sampler, uint64_t value);
   void report_thread_phase(const char* name, const Ticks& start, const Ticks& end);
-  void report_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags);
 };
 
 class ZTraceThreadPhase : public StackObj {
--- a/src/hotspot/share/gc/z/zTracer.inline.hpp	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/gc/z/zTracer.inline.hpp	Fri Mar 27 15:28:07 2020 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2020, 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
@@ -50,12 +50,6 @@
   }
 }
 
-inline void ZTracer::report_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags) {
-  if (EventZPageAllocation::is_enabled()) {
-    send_page_alloc(size, used, free, cache, flags);
-  }
-}
-
 inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
     _start(Ticks::now()),
     _name(name) {}
--- a/src/hotspot/share/jfr/metadata/metadata.xml	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/hotspot/share/jfr/metadata/metadata.xml	Fri Mar 27 15:28:07 2020 +0100
@@ -988,8 +988,14 @@
     <Field type="uint" name="newRatio" label="New Ratio" description="The size of the young generation relative to the tenured generation" />
   </Event>
 
-  <Event name="ZPageAllocation" category="Java Virtual Machine, GC, Detailed" label="ZPage Allocation" description="Allocation of a ZPage" thread="true" stackTrace="false" experimental="true">
-     <Field type="ulong" contentType="bytes" name="pageSize" label="Page Size" />
+  <Event name="ZAllocationStall" category="Java Virtual Machine, GC, Detailed" label="ZGC Allocation Stall" description="Time spent waiting for memory to become available" thread="true" experimental="true">
+    <Field type="ZPageTypeType" name="type" label="Type" />
+    <Field type="ulong" contentType="bytes" name="size" label="Size" />
+  </Event>
+
+  <Event name="ZPageAllocation" category="Java Virtual Machine, GC, Detailed" label="ZGC Page Allocation" description="Allocation of a ZPage" thread="true" stackTrace="true" experimental="true">
+     <Field type="ZPageTypeType" name="type" label="Type" />
+     <Field type="ulong" contentType="bytes" name="size" label="Size" />
      <Field type="ulong" contentType="bytes" name="usedAfter" label="Used After" />
      <Field type="ulong" contentType="bytes" name="freeAfter" label="Free After" />
      <Field type="ulong" contentType="bytes" name="inCacheAfter" label="In Cache After" />
@@ -997,20 +1003,47 @@
      <Field type="boolean" name="noReserve" label="No Reserve" />
   </Event>
 
+  <Event name="ZPageCacheFlush" category="Java Virtual Machine, GC, Detailed" label="ZGC Page Cache Flush" description="Flushing of ZPages" thread="true" stackTrace="true" experimental="true">
+     <Field type="ulong" contentType="bytes" name="flushed" label="Flushed Size" />
+     <Field type="boolean" name="forAllocation" label="For Allocation" />
+  </Event>
+
+  <Event name="ZRelocationSet" category="Java Virtual Machine, GC, Detailed" label="ZGC Relocation Set" thread="true" experimental="true">
+    <Field type="ulong" contentType="bytes" name="total" label="Total" />
+    <Field type="ulong" contentType="bytes" name="empty" label="Empty" />
+    <Field type="ulong" contentType="bytes" name="compactingFrom" label="Compacting From" />
+    <Field type="ulong" contentType="bytes" name="compactingTo" label="Compacting To" />
+  </Event>
+
+  <Event name="ZRelocationSetGroup" category="Java Virtual Machine, GC, Detailed" label="ZGC Relocation Set Group" thread="true" experimental="true">
+    <Field type="ZPageTypeType" name="type" label="Type" />
+    <Field type="ulong" name="pages" label="Pages" />
+    <Field type="ulong" contentType="bytes" name="total" label="Total" />
+    <Field type="ulong" contentType="bytes" name="empty" label="Empty" />
+    <Field type="ulong" contentType="bytes" name="compactingFrom" label="Compacting From" />
+    <Field type="ulong" contentType="bytes" name="compactingTo" label="Compacting To" />
+  </Event>
+
+  <Event name="ZStatisticsCounter" category="Java Virtual Machine, GC, Detailed" label="ZGC Statistics Counter" thread="true" experimental="true" >
+    <Field type="ZStatisticsCounterType" name="id" label="Id" />
+    <Field type="ulong" name="increment" label="Increment" />
+    <Field type="ulong" name="value" label="Value" />
+  </Event>
+
+  <Event name="ZStatisticsSampler" category="Java Virtual Machine, GC, Detailed" label="ZGC Statistics Sampler" thread="true" experimental="true">
+    <Field type="ZStatisticsSamplerType" name="id" label="Id" />
+    <Field type="ulong" name="value" label="Value" />
+  </Event>
+
   <Event name="ZThreadPhase" category="Java Virtual Machine, GC, Detailed" label="ZGC Thread Phase" thread="true" experimental="true">
     <Field type="uint" name="gcId" label="GC Identifier" relation="GcId"/>
     <Field type="string" name="name" label="Name" />
   </Event>
 
-  <Event name="ZStatisticsCounter" category="Java Virtual Machine, GC, Detailed" label="Z Statistics Counter" thread="true" experimental="true" >
-    <Field type="ZStatisticsCounterType" name="id" label="Id" />
-    <Field type="ulong" name="increment" label="Increment" />
-    <Field type="ulong" name="value" label="Value" />
-  </Event>
-
-  <Event name="ZStatisticsSampler" category="Java Virtual Machine, GC, Detailed" label="Z Statistics Sampler" thread="true" experimental="true">
-    <Field type="ZStatisticsSamplerType" name="id" label="Id" />
-    <Field type="ulong" name="value" label="Value" />
+  <Event name="ZUncommit" category="Java Virtual Machine, GC, Detailed" label="ZGC Uncommit" description="Uncommitting of memory" thread="true" experimental="true">
+    <Field type="ulong" contentType="bytes" name="capacityBefore" label="Capacity Before" />
+    <Field type="ulong" contentType="bytes" name="capacityAfter" label="Capacity After" />
+    <Field type="ulong" contentType="bytes" name="uncommitted" label="Uncommitted" />
   </Event>
 
   <Event name="ShenandoahHeapRegionStateChange" category="Java Virtual Machine, GC, Detailed" label="Shenandoah Heap Region State Change" description="Information about a Shenandoah heap region state change"
@@ -1063,6 +1096,10 @@
     <Field type="string" name="compiler" label="Compiler" />
   </Type>
 
+  <Type name="ZPageTypeType" label="Z Page Type">
+    <Field type="string" name="type" label="Type" />
+  </Type>
+
   <Type name="ZStatisticsCounterType" label="Z Statistics Counter">
     <Field type="string" name="counter" label="Counter" />
   </Type>
@@ -1254,7 +1291,7 @@
   <Relation name="SweepId"/>
   <Relation name="FlushId"/>
   <Relation name="ClassRedefinitionId"/>
-  
+
   <XmlType name="Package" parameterType="const PackageEntry*" fieldType="const PackageEntry*"/>
   <XmlType name="Class" javaType="java.lang.Class" parameterType="const Klass*" fieldType="const Klass*"/>
   <XmlType name="Module"  parameterType="const ModuleEntry*" fieldType="const ModuleEntry*"/>
--- a/src/jdk.jfr/share/conf/jfr/default.jfc	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/jdk.jfr/share/conf/jfr/default.jfc	Fri Mar 27 15:28:07 2020 +0100
@@ -705,12 +705,29 @@
       <setting name="enabled">true</setting>
     </event>
 
+    <event name="jdk.ZAllocationStall">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
     <event name="jdk.ZPageAllocation">
       <setting name="enabled">true</setting>
-      <setting name="threshold">10 ms</setting>
+      <setting name="stackTrace">true</setting>
+      <setting name="threshold">1 ms</setting>
     </event>
 
-    <event name="jdk.ZThreadPhase">
+    <event name="jdk.ZPageCacheFlush">
+      <setting name="enabled">true</setting>
+      <setting name="stackTrace">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZRelocationSet">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZRelocationSetGroup">
       <setting name="enabled">true</setting>
       <setting name="threshold">0 ms</setting>
     </event>
@@ -725,6 +742,16 @@
       <setting name="threshold">0 ms</setting>
     </event>
 
+    <event name="jdk.ZThreadPhase">
+      <setting name="enabled">false</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZUncommit">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
     <event name="jdk.Deoptimization">
       <setting name="enabled">true</setting>
       <setting name="stackTrace">false</setting>
@@ -733,7 +760,7 @@
     <event name="jdk.HeapDump">
       <setting name="enabled">true</setting>
       <setting name="threshold">0 ns</setting>
-      <setting name="stackTrace">true</setting>  
+      <setting name="stackTrace">true</setting>
     </event>
 
 
@@ -855,7 +882,7 @@
         <option label="High" name="high">high</option>
         <option label="Ludicrous (High Overhead)" name="ludicrous">ludicrous</option>
       </selection>
-      
+
       <condition name="method-sampling-java-interval" true="999 d">
         <test name="method-sampling-interval" operator="equal" value="off"/>
       </condition>
@@ -871,7 +898,7 @@
       <condition name="method-sampling-java-interval" true="1 ms">
         <test name="method-sampling-interval" operator="equal" value="ludicrous"/>
       </condition>
-      
+
       <condition name="method-sampling-native-interval" true="999 d">
         <test name="method-sampling-interval" operator="equal" value="off"/>
       </condition>
@@ -882,7 +909,7 @@
           <test name="method-sampling-interval" operator="equal" value="high"/>
           <test name="method-sampling-interval" operator="equal" value="ludicrous"/>
         </or>
-      </condition>  
+      </condition>
 
       <condition name="method-sampling-enabled" true="false" false="true">
         <test name="method-sampling-interval" operator="equal" value="off"/>
--- a/src/jdk.jfr/share/conf/jfr/profile.jfc	Mon Mar 30 19:38:31 2020 +0200
+++ b/src/jdk.jfr/share/conf/jfr/profile.jfc	Fri Mar 27 15:28:07 2020 +0100
@@ -573,7 +573,7 @@
       <setting name="enabled">true</setting>
       <setting name="period">endChunk</setting>
     </event>
-	
+
     <event name="jdk.ProcessStart">
       <setting name="enabled">true</setting>
       <setting name="stackTrace">true</setting>
@@ -705,19 +705,36 @@
       <setting name="enabled">true</setting>
     </event>
 
+    <event name="jdk.ZAllocationStall">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
     <event name="jdk.ZPageAllocation">
       <setting name="enabled">true</setting>
-      <setting name="threshold">10 ms</setting>
+      <setting name="stackTrace">true</setting>
+      <setting name="threshold">1 ms</setting>
     </event>
 
-    <event name="jdk.ZThreadPhase">
+    <event name="jdk.ZPageCacheFlush">
+      <setting name="enabled">true</setting>
+      <setting name="stackTrace">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZRelocationSet">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZRelocationSetGroup">
       <setting name="enabled">true</setting>
       <setting name="threshold">0 ms</setting>
     </event>
 
     <event name="jdk.ZStatisticsCounter">
+      <setting name="enabled">false</setting>
       <setting name="threshold">0 ms</setting>
-      <setting name="enabled">false</setting>
     </event>
 
     <event name="jdk.ZStatisticsSampler">
@@ -725,11 +742,21 @@
       <setting name="threshold">0 ms</setting>
     </event>
 
+    <event name="jdk.ZThreadPhase">
+      <setting name="enabled">false</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
+    <event name="jdk.ZUncommit">
+      <setting name="enabled">true</setting>
+      <setting name="threshold">0 ms</setting>
+    </event>
+
     <event name="jdk.Deoptimization">
       <setting name="enabled">true</setting>
       <setting name="stackTrace">true</setting>
     </event>
-	
+
     <event name="jdk.HeapDump">
       <setting name="enabled">true</setting>
       <setting name="threshold">0 ns</setting>
@@ -855,7 +882,7 @@
         <option label="High" name="high">high</option>
         <option label="Ludicrous (High Overhead)" name="ludicrous">ludicrous</option>
       </selection>
-      
+
       <condition name="method-sampling-java-interval" true="999 d">
         <test name="method-sampling-interval" operator="equal" value="off"/>
       </condition>
@@ -871,7 +898,7 @@
       <condition name="method-sampling-java-interval" true="1 ms">
         <test name="method-sampling-interval" operator="equal" value="ludicrous"/>
       </condition>
-      
+
       <condition name="method-sampling-native-interval" true="999 d">
         <test name="method-sampling-interval" operator="equal" value="off"/>
       </condition>
@@ -882,8 +909,8 @@
           <test name="method-sampling-interval" operator="equal" value="high"/>
           <test name="method-sampling-interval" operator="equal" value="ludicrous"/>
         </or>
-      </condition>    
-      
+      </condition>
+
       <condition name="method-sampling-enabled" true="false" false="true">
         <test name="method-sampling-interval" operator="equal" value="off"/>
       </condition>