[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR: 8309271: A way to align already compiled methods with compiler directives [v8]
From:       Dmitry Chuyko <dchuyko () openjdk ! org>
Date:       2023-09-28 15:39:17
Message-ID: xkEh-94pPsYAAdQQ5b6ZJ87cq-PBzdxzfzH2J9ciQCw=.af7e463b-1439-4b18-8b17-ad84f94207a4 () github ! com
[Download RAW message or body]

> Compiler Control (https://openjdk.org/jeps/165) provides method-context dependent \
> control of the JVM compilers (C1 and C2). The active directive stack is built from \
> the directive files passed with the `-XX:CompilerDirectivesFile` diagnostic \
> command-line option and the Compiler.add_directives diagnostic command. It is also \
> possible to clear all directives or remove the top from the stack. 
> A matching directive will be applied at method compilation time when such \
> compilation is started. If directives are added or changed, but compilation does \
> not start, then the state of compiled methods doesn't correspond to the rules. This \
> is not an error, and it happens in long running applications when directives are \
> added or removed after compilation of methods that could be matched. For example, \
> the user decides that C2 compilation needs to be disabled for some method due to a \
> compiler bug, issues such a directive but this does not affect the application \
> behavior. In such case, the target application needs to be restarted, and such an \
> operation can have high costs and risks. Another goal is testing/debugging \
> compilers. 
> It would be convenient to optionally reconcile at least existing matching nmethods \
> to the current stack of compiler directives (so bypass inlined methods). 
> Natural way to eliminate the discrepancy between the result of compilation and the \
> broken rule is to discard the compilation result, i.e. deoptimization. Prior to \
> that we can try to re-compile the method letting compile broker to perform it \
> taking new directives stack into account. Re-compilation helps to prevent hot \
> methods from execution in the interpreter. 
> A new flag `-r` has beed introduced for some directives related to compile \
> commands: `Compiler.add_directives`, `Compiler.remove_directives`, \
> `Compiler.clear_directives`. The default behavior has not changed (no flag). If the \
> new flag is present, the command scans already compiled methods and puts methods \
> that have any active non-default matching compiler directives to re-compilation if \
> possible, otherwise marks them for deoptimization. There is currently no \
> distinction which directives are found. In particular, this means that if there are \
> rules for inlining into some method, it will be refreshed. On the other hand, if \
> there are rules for a method and it was inlined, top-level methods won't be \
> refreshed, but this can be achieved by having rules for them. 
> In addition, a new diagnostic command `Compiler.replace_directives`, has been added \
> for ...

Dmitry Chuyko has updated the pull request with a new target base due to a merge or a \
rebase. The pull request now contains 26 commits:

 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - jcheck
 - Unnecessary import
 - force_update->refresh
 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - Use only top directive for add/remove; better mutex rank definition; texts
 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - Merge branch 'openjdk:master' into compiler-directives-force-update
 - ... and 16 more: https://git.openjdk.org/jdk/compare/fc989986...d95d2609

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

Changes: https://git.openjdk.org/jdk/pull/14111/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14111&range=07
  Stats: 372 lines in 15 files changed: 339 ins; 3 del; 30 mod
  Patch: https://git.openjdk.org/jdk/pull/14111.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14111/head:pull/14111

PR: https://git.openjdk.org/jdk/pull/14111


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic