Integrated: 8264223: CodeHeap::verify fails extra_hops assertion in fastdebug test
Hui Shi
hshi at openjdk.java.net
Thu Apr 1 10:48:22 UTC 2021
On Fri, 26 Mar 2021 02:50:59 GMT, Hui Shi <hshi at openjdk.org> wrote:
> When test with -XX:+VerifyCodeCache, many tests fail due to extra_hops assertion in CodeHeap::verify. See full dump in JBS.
>
> # Internal Error (src/hotspot/share/memory/heap.cpp:838), pid=1525697, tid=1525715
> # assert((count == 0) || (extra_hops < (16 + 2*count))) failed: CodeHeap: many extra hops due to optimization. blocks: 234, extra hops: 484.
> Discussion in https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2019-October/035508.html doesn't tell where assertion (extra_hops < (16 + 2*count) comes from.
>
> In CodeHeap::mark_segmap_as_used wehn is_FreeBlock_join is true, it creates extra hops in _segmap. _fragmentation_count in inced and trigger defrag_segmap when reach threshold. In my understanding, extra hop can not guarantee under (16 + 2*count).
>
> In following extreme case, before HeapBlock free, segmap is all 0 (each blob use 1 smallest segment), suppose free action is applied from right to left. This increase 9 unnecessary hop for 1 continous HeapBlock. assertion (extra_hops < (16 + 2*count) is not safe.
> |0|0|0|0|0|0|0|0|0|0|
> after free, it will be
> |0|1|1|1|1|1|1|1|1|1|
>
> Proposed fix is assert extra hops not exceed _fragmentation_count. And if it exceeds (16 + 2 * count), give warning on two many extra hops.
>
> fastdebug tier1, tier2 with VerifyCodeCache passed on X86_64 linux, no extra assertion found.
This pull request has now been integrated.
Changeset: 011f6d13
Author: Hui Shi <hshi at openjdk.org>
Committer: Lutz Schmidt <lucy at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/011f6d13
Stats: 13 lines in 2 files changed: 11 ins; 0 del; 2 mod
8264223: CodeHeap::verify fails extra_hops assertion in fastdebug test
Reviewed-by: lucy, shade
-------------
PR: https://git.openjdk.java.net/jdk/pull/3212
More information about the hotspot-compiler-dev
mailing list