RFR: 8203359: Container level resources events [v9]

Jaroslav Bachorik jbachorik at openjdk.java.net
Wed May 19 17:01:51 UTC 2021


On Wed, 21 Apr 2021 22:38:32 GMT, Erik Gahlin <egahlin at openjdk.org> wrote:

>> Jaroslav Bachorik has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR.
>
> I wonder if something similar to below could be added to jdk.jfr.internal.Utils:
> 
>     private static Metrics[] metrics;
>     public static Metrics getMetrics() {
>         if (metrics == null) {
>             metrics = new Metrics[] { Metrics.systemMetrics() };
>         }
>         return metrics[0];
>     }
> 
>     public static boolean shouldSkipBytecode(String eventName, Class<?> superClass) {
>         if (superClass != AbstractJDKEvent.class) {
>             return false;
>         }
>         if (!eventName.startsWith("jdk.Container")) {
>             return false;
>         }
>         return getMetrics() == null;
>     }
> 
> Then we could add checks to jdk.jfr.internal.JVMUpcalls::bytesForEagerInstrumentation(...)
> 
>     eventName = ei.getEventName();
>     if (Utils.shouldSkipBytecode(eventName, superClass))) {
>         return oldBytes;
>     }
> 
> and jdk.jfr.internal.JVMUpcalls:onRetransform(...)
> 
>     if (jdk.internal.event.Event.class.isAssignableFrom(clazz) && !Modifier.isAbstract(clazz.getModifiers())) {
>         if (Utils.shouldSkipBytecode(clazz.getName(), clazz.getSuperclass())) {
>             return oldBytes;
>         }
> 
> This way we would not pay for generating bytecode for events in a non-container environment. 
> 
> Not sure if it works, but could perhaps make startup faster? We would still pay for generating the event handlers during registration, but it's much trickier to avoid since we need to store the event type somewhere.

@egahlin Unfortunately, I had to make one late change in the periodic event hook registration.
If the events are registered conditionally only when running in a container the event metadata are not correct and `TestDefaultConfigurations.java` test will fail. When I register the hooks unconditionally, the metadata is correctly generated and the test passes.
I will hold off integration until I hear back from you whether this is acceptable or I should try to find an alternative solution.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3126


More information about the core-libs-dev mailing list