<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap:break-word"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Roman,</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Thanks for the reply. Inline (ha!)</div> <br> <div id="bloop_sign_1511297255080131072" class="bloop_sign"><div><br></div><div><div>—————</div><div>Tony Printezis | @TonyPrintezis | <a href="mailto:tprintezis@twitter.com">tprintezis@twitter.com</a></div></div><div><br></div></div> <br><p class="airmail_on">On November 21, 2017 at 3:40:03 PM, Roman Kennke (<a href="mailto:rkennke@redhat.com">rkennke@redhat.com</a>) wrote:</p> <div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span><div><div></div><div>Am 21.11.2017 um 21:15 schrieb Tony Printezis:<span class="Apple-converted-space"> </span><br>> Hi all,<span class="Apple-converted-space"> </span><br>><span class="Apple-converted-space"> </span><br>> I’ve been looking at the safepoint behavior of one of our services and I<span class="Apple-converted-space"> </span><br>> noticed that around 55% of the safepoints that happen don’t execute a VM<span class="Apple-converted-space"> </span><br>> operation. I’d need to confirm this, but I assume they only happen in<span class="Apple-converted-space"> </span><br>> order to do some cleanup (SafepointSynchronize::is_cleanup_needed()<span class="Apple-converted-space"> </span><br>> returns true, which in JDK 8 translates to !InlineCacheBuffer::is_empty()).<span class="Apple-converted-space"> </span><br><br>This is true. This cleanup is done regularily to clean up zombie<span class="Apple-converted-space"> </span><br>nmethods and deflate idle monitors (and some other relatively minor<span class="Apple-converted-space"> </span><br>cleanups).<span class="Apple-converted-space"> </span></div></div></span></blockquote></div><p><br></p><p>Sure, there are several things that are done during the pre-safepoint cleanup phase (8 separate steps). However, the decision on whether to do a non-VM safepoint or not, basically just to do the cleanup, only seems to consider whether the InlineCacheBuffer is empty or not (in JDK 8; in 10 it also checks the ObjectSynchronizer).</p><p><br></p><div><div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span><div><div><br>> I’m not familiar with the InlineCacheBuffer at all. How important is it<span class="Apple-converted-space"> </span><br>> to execute InlineCacheBuffer::update_inline_caches() at regular<span class="Apple-converted-space"> </span><br>> intervals? Would a modified heuristic, like "a safepoint is required if<span class="Apple-converted-space"> </span><br>> the buffer is >P% full" (maybe in conjunction with increasing the buffer<span class="Apple-converted-space"> </span><br>> size) be reasonable? Or maybe increase the value of<span class="Apple-converted-space"> </span><br>> GuaranteedSafepointInterval? Or both?<span class="Apple-converted-space"> </span><br><br>I think such a modified heuristic would be reasonable.<span class="Apple-converted-space"> </span><br><br>> Note that the overhead of the non-VM op safepoints is actually<span class="Apple-converted-space"> </span><br>> negligible. I’d just like to try to cut down the number of safepoints we<span class="Apple-converted-space"> </span><br>> do, as we had issues in the past with safepoint initiation taking too long.<span class="Apple-converted-space"> </span><br>><span class="Apple-converted-space"> </span><br><br>I can feel your pain.<span class="Apple-converted-space"> </span></div></div></span></blockquote></div><p><br></p><p>I’m all for decreasing the overhead of the various cleanups that are done pre-safepoint (and thanks for the pointers). But, I’m also interested in just decreasing the number of safepoints that we do, if they are not absolutely necessary.</p><p><br></p><p>Tony</p><p><br></p><div><blockquote type="cite" class="clean_bq" style="font-family:Helvetica,Arial;font-size:13px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span><div><div><br>There are some ongoing (or infact not-yet-started) efforts to cut this<span class="Apple-converted-space"> </span><br>down. One is concurrent monitor deflation:<span class="Apple-converted-space"> </span><br><br><a href="https://bugs.openjdk.java.net/browse/JDK-8183909">https://bugs.openjdk.java.net/browse/JDK-8183909</a><span class="Apple-converted-space"> </span><br><br>Another one is using multiple threads for nmethod sweeping (I proposed a<span class="Apple-converted-space"> </span><br>mechanism to do that some months ago, but has been stalled because<span class="Apple-converted-space"> </span><br>upstream didn't want it back then), here's some related issue around that:<span class="Apple-converted-space"> </span><br><br><a href="https://bugs.openjdk.java.net/browse/JDK-8132849">https://bugs.openjdk.java.net/browse/JDK-8132849</a><span class="Apple-converted-space"> </span><br><a href="https://bugs.openjdk.java.net/browse/JDK-8184751">https://bugs.openjdk.java.net/browse/JDK-8184751</a><span class="Apple-converted-space"> </span><br><a href="https://bugs.openjdk.java.net/browse/JDK-8153224">https://bugs.openjdk.java.net/browse/JDK-8153224</a><span class="Apple-converted-space"> </span><br><br>I'd be happy to re-open the discussions around parallel safepoint cleanup.<span class="Apple-converted-space"> </span><br><br>Roman<span class="Apple-converted-space"> </span><br></div></div></span></blockquote></div></div></body></html>