Hi Gary,

Meta-question partially raised in the the recent bug report comments: do we care about this any more? Does anything need to disable UsePerfData? Can we not deprecate it in 11 then obsolete in 12? That would be a lot simpler.

That aside ...

It's hard to see how all the different paths in these related API's stitch together - especially when you have to consider the API being used on the current VM or a different one. I'm not at all clear what the control flow is, so it is hard to see exactly how the initialization issue is being handled. As I wrote in the initial report it is unclear exactly which parts of the "perf" subsystem are impacted by the value of UsePerfData.

Can you summarize the role of the is_initialized check versus a direct UsePerfData check on the VM side i.e. which should be checked when? I immediately see an issue that Perf_Detach is a no-op when !UsePerfdata, yet Perf_Attach doesn't examine the flag at all! But perhaps we never reach those methods because of a higher-level call filtering it out ??

More below ...

On 1/06/2018 5:09 AM, Gary Adams wrote:
A patch was done previously to prevent an error when -XX:-UsePerfData
is used, but this bug was filed to make the setting more visible in the
jdk.internal.perf package.

    Webrev: http://cr.openjdk.java.net/~gadams/8069149/webrev.00/
    Issue: https://bugs.openjdk.java.net/browse/JDK-8069149

I have tried a few initial tests using:

    make run-tests \
          TEST_OPTS=VM_OPTIONS=-XX:-UsePerfData \
          TEST=open/test/jdk/sun/management/jmxremote

While I'm tracking down one test timeout,  I'd like to get some
feedback on the approach used here :

   - the basic mechanism propagates the "is initialized" state up to Perf.java;

Within PerfMemory UsePerfData and is_usable() are used for guarding execution. Perhaps that is what needs to be propagated up?

      does the state need to be exposed to users getPerf(), or is it sufficient
       to provide exceptions at this level.

Unclear what the control flow is here. I don't see that Perf triggers initialization of the perf subsystem, so what guarantees initialization should have happened by the time the Perf class is initialized ??

   - an existing use of IOException was used in the case of attach failures;       added IOExceptions to the createXXX methods if the memory was not initialized

On the VM side can you at least add a message to the IOException so that the user can tell why it was thrown.

    - presuming a CSR would be needed to cover the IOExceptions

It's not a public API so no CSR should be needed.

    - it appears that jdk.internal.perf has very limited usage,
       is it still needed/used (?)

I can't answer that part, but I don't think UsePerfData is needed any more.

Thanks,
David

Any feedback appreciated.

Reply via email to