Open Bug 1352486 (emberperf) Opened 7 years ago Updated 1 year ago

[meta] Improve performance on EmberPerf benchmark

Categories

(Core :: JavaScript Engine, defect, P3)

defect

Tracking

()

Tracking Status
firefox52 --- wontfix
firefox53 --- affected
firefox54 --- affected
firefox55 --- affected
firefox56 --- affected

People

(Reporter: evilpie, Unassigned)

References

(Blocks 1 open bug, )

Details

(Keywords: meta, perf, Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS])

http://emberperf.eviltrout.com/

I just ran "Render Complex List" on Nightly and we are only about half as fast as Chrome.
Dupe of bug 1133864? Or at least that bug should depend on this one.
I'll take a look next week. I also want to figure out where that high error % comes from.
Flags: needinfo?(jdemooij)
Jeff Atwood reports that Chrome Canary and Edge both recently doubled their "Render Complex List" performance:

https://twitter.com/codinghorror/status/841775015917887488

https://twitter.com/codinghorror/status/847693460572225536
Blocks: QF-EmberJS
No longer blocks: 1241091
Keywords: perf
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS]
(In reply to Jan de Mooij [:jandem] from comment #2)
> I also want to figure out where that high error % comes from.

Part of this is EAGER_ALLOC_TRIGGER GCs, if I just disable that GC trigger my error % drops from > 100% to 75-80%. That's still nothing to be proud of, but it suggests GC definitely plays a role here. The next step is understanding what kind of GC things we allocate here.
OK, we're allocating (among other things) a lot of FAT_INLINE_STRING, STRING, and EXTERNAL_STRING arenas. There might be some easy wins here like bug 1352323. It's unfortunate we don't nursery allocate strings yet because I bet many of these are short-lived.
Depends on: 1352323
Ember (still) has some terrible logging. We're allocating many strings here:

  _glimmerUtil.LOGGER.debug('[VM] OP ' + opcode.type);

The debug-function is quite complicated so it's not trivial for the JIT to optimize this concatenation away.

We really want to use nursery allocation for these strings so we don't trigger full GCs.
Depends on: 903519
Depends on: 1346217
Depends on: 1337773
nominating for QF triage
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS] → [platform-rel-Frameworks][platform-rel-EmberJS][qf]
I think we should be mentioning the logging issue to the Ember team, seems like something they could be interested in fixing on their side.
(In reply to Tom Schuster [:evilpie] from comment #9)
> I think we should be mentioning the logging issue to the Ember team, seems
> like something they could be interested in fixing on their side.

:jandem and others have access to our mailing list with the Ember core team. I'd encourage them reaching out if we deem that Tom Dale and others would find this interesting...
Depends on: 1353758
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS][qf] → [platform-rel-Frameworks][platform-rel-EmberJS][qf:p1]
Depends on: 1354582
The code is transpiled to JS (Babel) and Object.setPrototypeOf is used on functions to represent class inheritance. This confuses TI and we don't inline these functions in Ion, and then we end up with megamorphic ICs. This should be fixable, I just need to figure out the best way to do it.
Robert Jackson says Ember's new debug stripping should remove the logging function calls and avoid the string allocations. The Ember team is considering back porting to Ember LTS (2.12).

https://github.com/glimmerjs/glimmer-build/pull/42
Depends on: 1357680
Alias: emberperf
Keywords: meta
Summary: Improve performance on Ember → Improve performance on EmberPerf benchmark
Here is a link to a profile from a user that was viewing Twitch (which uses the Ember framework, apparently), in the background:

https://perfht.ml/2qAJFHe

Quite a bit of main thread jank on Content Process 5. Not sure if this is useful, but thought I'd attach.
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS][qf:p1] → [platform-rel-Frameworks][platform-rel-EmberJS][qf:p2]
Depends on: 1368626
Flags: needinfo?(jdemooij)
How's the situation changed with Fx 55 and Bug 1352323 fixed?
I see no improvement in Firefox 55 or 56 on my Windows 10 laptop. Results for the "Render Complex List" test with Ember version 2.13.0:

* Firefox 54 = 12.56 ops/sec
* Beta 55    = 12.89 ops/sec
* Nightly 56 = 12.04 ops/sec
* Edge 15    = 16.20 ops/sec
* Chrome 60  = 39.24 ops/sec
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS][qf:p2] → [platform-rel-Frameworks][platform-rel-EmberJS][qf:meta]
Priority: -- → P3
Depends on: 1442481
Performance Impact: --- → ?
Whiteboard: [platform-rel-Frameworks][platform-rel-EmberJS][qf:meta] → [platform-rel-Frameworks][platform-rel-EmberJS]
Summary: Improve performance on EmberPerf benchmark → [meta] Improve performance on EmberPerf benchmark
Performance Impact: ? → ---
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.