On Dec 13, 2011, at 12:31 AM, Rémi Forax wrote: > On 12/12/2011 05:38 PM, Charles Oliver Nutter wrote: >> I'm still of the opinion that you shouldn't fix it, or at least >> shouldn't demote "noisy" call sites to never optimize. It's not >> common, but there are Ruby programs that may define a new class or >> method at runtime even at steady state. Not for every request, but >> occasionally. I don't like the thought that a "read mostly" call site >> that never completely settles down might get demoted and never >> optimized when it's still mostly steady. >> >> The cost of updating call sites or switch points is part of the fun :) >> I consider that cost when I'm deciding how and when to update call >> sites, how and when to failover my own logic to a demoted version, and >> so on. I think it's my responsibility to deal with those costs, not >> yours... >> >> - Charlie > > I agree. > > In my opinion, it's up to the language runtime designer to estimate > if it's a good idea to invalidate something at some point or not > because the runtime has more information than the VM. > > Moreover any throttle logic just make the API less predictable, > the throttle logic should be removed to help the designers > to easily predict the behaviour of their runtimes.
I'm fine with that. Currently there is no such logic. -- Chris > > Rémi > >> >> On Mon, Dec 12, 2011 at 6:25 AM, Christian Thalinger >> <christian.thalin...@oracle.com> wrote: >>> If the bugger here is a repeatedly invalidated SwitchPoint then we (reads: >>> I) should fix: >>> >>> 7087838: JSR 292: add throttling logic for optimistic call site >>> optimizations >>> >>> I just don't have a good frequency-based logic yet... >>> >>> -- Chris >>> >>> On Dec 1, 2011, at 10:55 PM, Charles Oliver Nutter wrote: >>> >>>> Perfect, Tom, thanks. >>>> >>>> On Thu, Dec 1, 2011 at 3:21 PM, Tom Rodriguez<tom.rodrig...@oracle.com> >>>> wrote: >>>>> On Dec 1, 2011, at 1:34 AM, Charles Oliver Nutter wrote: >>>>> >>>>>> My recent explorations into Stephen B's perf degradation on JRuby have >>>>>> led me to an unfortunate conclusion: something SwitchPoint-related is >>>>>> responsible for the remaining slowdown. >>>>>> >>>>>> I had bugs I fixed, like the awful PIC-causes-repeat-rebinding issue >>>>>> or the heavy-class-mutation-never-stabilizes issue, but the last "fix" >>>>>> I found was to disable SwitchPoint-based call site invalidation >>>>>> entirely. >>>>> The upside of the push based invalidation of SwitchPoint is that the >>>>> executed code runs quickly but the downside is that invalidation is >>>>> expensive, possibly requiring a deopt and recompilation. If you suspect >>>>> that's happening, try running with -XX:+UnlockDiagnosticVMOptions >>>>> -XX:+LogVMOutput -XX:+PrintCompilation and look for dependency_failed >>>>> messages where type='call_site_target_value'. Any following >>>>> make_not_entrant messages are probably caused by the invalidation of the >>>>> SwitchPoint. >>>>> >>>>> tom >>>>> >>>>>> Now I'm not (yet) saying this is a perf issue in SwitchPoint itself. >>>>>> My problem is that it's very difficult to get any visibility into how >>>>>> frequently SwitchPoints are being invalidated (though I could >>>>>> instrument my own code, of course), or more importantly how >>>>>> drastically those invalidations are affecting performance. Does a >>>>>> single SwitchPoint invalidation happening repeatedly completely tank >>>>>> performance across the entire system? Does it require SwitchPoint >>>>>> invalidation that affects a broader surface area? >>>>>> >>>>>> I will continue investigating on my side. I suspect the problem is >>>>>> that there's just a handful of SwitchPoint locations that are >>>>>> repeatedly invalidated, but that those invalidations are having a >>>>>> drastic global impact. I'm not yet sure how to work around such a >>>>>> situation, where one bad apple is spoiling the whole bunch... >>>>>> >>>>>> - Charlie >>>>>> _______________________________________________ >>>>>> mlvm-dev mailing list >>>>>> mlvm-dev@openjdk.java.net >>>>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>>>> _______________________________________________ >>>>> mlvm-dev mailing list >>>>> mlvm-dev@openjdk.java.net >>>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>>> _______________________________________________ >>>> mlvm-dev mailing list >>>> mlvm-dev@openjdk.java.net >>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev