<div><span style="color: rgb(160, 160, 168); ">On Tuesday, February 14, 2012 at 2:31 PM, Tom Rodriguez wrote:</span></div>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div><div><br></div><div>On Feb 14, 2012, at 2:10 PM, Igor Veresov wrote:</div><div><br></div><blockquote type="cite"><div><div>On Tuesday, February 14, 2012 at 1:20 PM, Tom Rodriguez wrote:</div><blockquote type="cite"><div><div><br></div><div>On Feb 14, 2012, at 1:08 PM, Igor Veresov wrote:</div><div><br></div><blockquote type="cite"><div>I tried that. It made no measurable difference. I figured it's better to start running a compile while we're doing GC, which is what will happen after the bailout.</div></blockquote><div><br></div><div>So it's not about yielding to a safepoint? It's about starting the compile sooner?</div></div></blockquote><div>No-no, starting compiler is just an alternative of entering a safepoint. The choices basically are:</div><div>1. Safepoint right in the sweeper and continue sweeping after the safepoint.</div><div>2. Bailout from the sweeper but safepoint immediately, don't select the task from the compile queue and don't compile.</div><div>3. Bailout and processed with selecting the task and transition to native to compile (at which point a safepoint will happen).</div><div><br></div><div>So, I chose (3) because the process of selecting a task from the queue and transitioning to native to start a compile appear to be fast enough. </div></div></blockquote><div><br></div><div>But it can arbitrarily starve the sweeper if we're safepointing often enough, like for scavenges.</div></div></div></span></blockquote><div>That is theoretically possible I guess. Well, I think the only solution here would be to safepoint inside of the sweeper loop and restart then sweep after we wake up. And also to limit the amount of methods it does per sweep (instead of the fraction) so that it doesn't starve compilation. &nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><blockquote type="cite"><div><blockquote type="cite"><div>Then I think you should gate the amount of work the sweeper does instead. That would actually tend to distribute the sweeper work between different compiler threads better. Right now a single compile can be delayed a long time because it's trying to process a quarter of the cache.</div></blockquote><div>You're right. The a big fraction can starve compilation. I guess I could change the code to use a concrete amount of methods to sweep instead of the fraction. Fractions are not very convenient. But the bailout will be necessary in any case.</div></div></blockquote><div><br></div><div>I agree that we need to allow safepoints in the sweeper loop but I'd rather not simply abort the sweeper loop if a safepoint happens in the middle.  That just seems arbitrary.</div><div><br></div><div>Maybe the sweeper should have a time limit instead?</div></div></div></span></blockquote><div>But that would mean that we inhibit safepoints for that amount of time? If we don't enter the safepoint within a couple of ms after we see the request that would be really bad.</div><div><br></div><div>igor&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><br></div><div>tom</div><div><br></div><blockquote type="cite"><div><div><br></div><div> igor</div><blockquote type="cite"><div><div><br></div><div>tom</div><div><br></div><blockquote type="cite"><div><div><br></div><div>igor</div><div><br></div><div>On Tuesday, February 14, 2012 at 1:04 PM, Tom Rodriguez wrote:</div><div><br></div><blockquote type="cite"><div><div><br></div><div>On Feb 14, 2012, at 12:36 PM, Igor Veresov wrote:</div><div><br></div><blockquote type="cite"><div>Code cache sweeper must yield to safepoint. With high numbers of methods sweeping can block the safepoint from happening.</div></blockquote><div><br></div><div>Why don't you just safepoint instead of aborting the current sweep?</div><div><br></div><div>We may also want to increase the sweep fraction for tiered.</div><div><br></div><div>tom</div><div><br></div><blockquote type="cite"><div><div><br></div><div>Webrev: <a href="http://cr.openjdk.java.net/~iveresov/7145345/webrev.00/">http://cr.openjdk.java.net/~iveresov/7145345/webrev.00/</a></div><div><br></div><div><br></div><div>igor</div></div></blockquote></div></blockquote></div></blockquote></div></blockquote></div></blockquote></div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>