[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 [v6]
From: Dmitry Chuyko <dchuyko () openjdk ! org>
Date: 2023-08-31 12:07:25
Message-ID: R6ACN5BBi-tokcXcH0_i7fhjufu1cBl-rQwmWv2g-NI=.4a324175-c336-44d2-b65b-00545fd9436e () 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 24 commits:
- 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
- Safe handling of non-java methods
- Merge branch 'openjdk:master' into compiler-directives-force-update
- ... and 14 more: https://git.openjdk.org/jdk/compare/145d8bc1...b4eb6de0
-------------
Changes: https://git.openjdk.org/jdk/pull/14111/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14111&range=05
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