On 01/25/2017 03:23 AM, Nicolas B. Pierron wrote:
Thanks for this email, and these investigations.

On 01/25/2017 05:47 AM, Steve Fink wrote:
[what is slower in Fx vs Chrome]>>    - eliminate all or most bailouts

I will try to explain more the details here, and hopefully help people
understand why this is a bad idea to eliminate *all* bailouts.

When we have no bailout from a code produced by a compiler, this means
that the compiler generated code which is infallible, and thus handle
all the cases.  Basically, this implies that we have to handle all the
cases, this is what our Baseline compiler do.

Bailouts are a necessary evil. They give us the opportunity to remove
code paths which are unlikely to be used, and thus to have more
optimization coming out of it, such as most basic one: unboxing values.

Bailouts are a JIT compiler trade-off.  They are optimization which can
be costly to proove, bailouts are a trade-off between the time we spend
in an all-guarantee compiler, and the time we get we a heuristic-based
compiler. Also, a heuristic-based compiler has more opportunities to
find optimizations can cannot be safely guaranteed.

I honestly would prefer to optimize our compiler such that we could
afford more heuristic-based optimizations, including the trade-off of
having more bailouts.  And, I already suggested ways to achieve that in
SpiderMonkey!

Let's not follow other JS engine on this fact, there is much more
performance opportunities to gain by embracing bailouts than refusing them.

Sorry, I didn't meant to imply that eliminating bailouts is at all a good idea. I understand those reasons. But it *is* a natural reaction to seeing the current profiler output -- the only information it gives is a list of bailouts, and the very name implies something bad. And most importantly, when people are looking for stuff within their control to fix, it is bailouts are an obvious target -- since it's possible to change the JS code to make things single-typed, people are going to kill themselves trying to do that because it makes all those scary bailouts go away. (And then they'll be pissed off because their code runs slower.)

So bailout counts *are* a good example of a naive suggestion that will come up over and over again when people start looking at performance problems. Which implies to me that we need to give them a better metric to focus on. Repeated bailouts, or compiles that ended up not being worth it, or something.

_______________________________________________
dev-tech-js-engine-internals mailing list
dev-tech-js-engine-internals@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

Reply via email to