On Thu, 22 Apr 2021 15:08:59 GMT, Jaroslav Bachorik <[email protected]>
wrote:
>> 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 Sounds good.
> Any particular reason you are using `Metrics[]` array?
@jbachorik Has this been tested on cgroups v1 and cgroups v2 Linux systems?
-------------
PR: https://git.openjdk.java.net/jdk/pull/3126