Closed Bug 969391 Opened 10 years ago Closed 10 years ago

Firefox slower than Chrome on BitcoinBench

Categories

(Core :: JavaScript Engine: JIT, defect)

defect
Not set
normal

Tracking

()

RESOLVED WORKSFORME
Tracking Status
firefox29 --- affected
firefox30 --- affected
firefox31 --- fixed
firefox32 --- fixed

People

(Reporter: luke, Unassigned)

References

(Depends on 1 open bug)

Details

(Keywords: perf)

Attachments

(1 file)

44.35 KB, application/x-zip-compressed
Details
Patrick pointed me at this benchmark:
  https://www.bitgo.com/bitcoinbenchmark/
Nightly gets a score of 105, Chrome Dev gets 148.  As discussed in this blog post:
  http://www.belshe.com/2014/01/31/introducing-the-js-bitcoin-benchmark/
the authors expect this benchmark is representative of bitcoin computations.  (As an aside: I wonder if sites have started to embed Web Workers that mine bitcoins as an alternative to ads.)
So I profiled just the first two subtests: "Address Creation" and "Sign And Verify".  The main thing jumping out at me from the profile is that 25% is under js::SetObjectElement, of which half is under JSObject::growElements.

Another 50% is in jitcode somewhere.

Another 9% is compiling jitcode, looks like.

Everything else is fairly long-tail....
The website uses the Octane harness, I'll try to create a shell benchmark.
Attached file Shell version
Was pretty easy to run in the shell. I also ran the scripts through jsbeautifier.org
(In reply to Boris Zbarsky [:bz] from comment #1)
> So I profiled just the first two subtests: "Address Creation" and "Sign And
> Verify".  The main thing jumping out at me from the profile is that 25% is
> under js::SetObjectElement, of which half is under JSObject::growElements.

Most of the SetObjectElement calls in "Address Creation" are for SETELEMs like this one:

    for (c = this.t - 1; c >= 0; --c)
        b[c + g + 1] = this[c] >> e | h, h = (this[c] & f) << d;

b has no elements, so the first time we run this loop LSetElementHole's OOL path will call the slow/generic SetObjectElement. Instead, the OOL path could call an helper that just does growElements, if we know there are no indexed elements on the proto. With GGC, we could even realloc the elements in JIT code.
(In reply to Luke Wagner [:luke] from comment #0)
> (As an aside: I wonder if sites have started to embed Web Workers that mine
> bitcoins as an alternative to ads.)

Turns out, yes: http://tidbit.co.in/
And they're using asm.js to boot.  I wonder how long until we'll need to add CPU quota management functionality to FF.
My results on Windows 7

Nightly

Address Creation 79.5
Sign And Verify 123*
SHA 89.2
Scrypt 131
AddressChain 91.2
AES 73.3

Chrome 34

Address Creation 40.8
Sign And Verify 76.2
SHA 146
Scrypt 107
AddressChain 62.1
AES 111

*made Nightly hang - on about:telemetry - Browser Hangs there is:
Hang Report #1 (11 seconds)
0xffffffff
0xffffffff
Firefox 31 handily beats Chrome 35.

Firefox 29 = 176
Beta 30    = 171
Aurora 31  = 264*
Nightly 32 = 262*
Chrome 35  = 184

Nightly 32:
    Address Creation 170
    Sign And Verify 279
    SHA 411
    Scrypt 266
    AddressChain 221
    AES 231

Chrome 35:
    Address Creation 157
    Sign And Verify 232
    SHA 243
    Scrypt 210
    AddressChain 165
    AES 199
Status: NEW → RESOLVED
Closed: 10 years ago
Keywords: perf
Resolution: --- → FIXED
Summary: FF slower than Chrome on BitcoinBench → Firefox slower than Chrome on BitcoinBench
awesome
Resolution: FIXED → WORKSFORME
Flags: in-qa-testsuite?
Keywords: verifyme
jmaher, is this something you could use as a performance benchmark for Talos?
Flags: needinfo?(jmaher)
Keywords: verifyme
Thanks Lizz for pointing this out.  I have filed bug 1040054 to investigate this.  We are always working on our benchmarks and tests to make them more reliable and relevant.
Flags: needinfo?(jmaher)
Depends on: 1190723
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: