Open Bug 1896729 Opened 20 days ago Updated 3 days ago

15.35 - 9.97% perf_reftest_singletons external-string-pass.html / perf_reftest_singletons external-string-pass.html (OSX) regression on Thu May 9 2024

Categories

(Core :: String, defect)

defect

Tracking

()

Tracking Status
firefox-esr115 --- unaffected
firefox126 --- unaffected
firefox127 --- wontfix
firefox128 --- affected

People

(Reporter: aglavic, Unassigned)

References

(Regression)

Details

(4 keywords)

Perfherder has detected a talos performance regression from push 0adcd161c68ab1a6e1dd1e851c446bfbc1fa9c2a. As author of one of the patches included in that push, we need your help to address this regression.

Regressions:

Ratio Test Platform Options Absolute values (old vs new)
15% perf_reftest_singletons external-string-pass.html macosx1015-64-shippable-qr e10s fission stylo webrender 659.98 -> 761.28
10% perf_reftest_singletons external-string-pass.html macosx1015-64-shippable-qr e10s fission stylo webrender 658.65 -> 724.35

Details of the alert can be found in the alert summary, including links to graphs and comparisons for each of the affected tests. Please follow our guide to handling regression bugs and let us know your plans within 3 business days, or the patch(es) may be backed out in accordance with our regression policy.

If you need the profiling jobs you can trigger them yourself from treeherder job view or ask a sheriff to do that for you.

You can run these tests on try with ./mach try perf --alert 211

For more information on performance sheriffing please see our FAQ.

Flags: needinfo?(emilio)

Set release status flags based on info from the regressing bug 1893683

I'm a bit confused, what's the difference between the first and the second table entry? It seems the same test in the same platform?

In any case this doesn't seem like a too concerning regression, the profile doesn't show extra string copies, it's just a code generation regression effectively. My guess is that nsTSubString::Assign is not getting inline where it was before or something, will give something like that a shot.

Flags: needinfo?(aglavic)

So I also tried some local profiling on an intel mac, but there are no symbols under set DataTransfer.dropEffect which is the interesting stuff. Markus, do you know what might be going on there? See https://share.firefox.dev/3UM9CQs

Flags: needinfo?(mstange.moz)

There are also no symbols in the profiles above for the interesting part of the profile, wtf? https://share.firefox.dev/4bnurJ8

Nazim, any idea about what might be going on?

Flags: needinfo?(canaltinova)

FWIW the "intel mac not showing anything under the set DataTransfer ... marker happens on release. It's like inline symbols are not there, which are on the arm mac...

In any case I was able to confirm that no string copy was introduced by my patch, so it's probably a codegen difference somehow, and given it only affects intel mac I think it's probably not a big deal...

A try trying to inline Assign(StringBuffer):

You'll be able to find a performance comparison here once the tests are complete (ensure you select the right framework): https://treeherder.mozilla.org/perfherder/compare?originalProject=try&originalRevision=63f02a17fab2cf51723bc45088c76a5ecde37af9&newProject=try&newRevision=27ba5b2ad99b0e7dc5af443ee21f0f227f9a7589


*******************************************************
*          2 commits/try-runs are created...          *
*******************************************************
Base revision's try run: https://treeherder.mozilla.org/jobs?repo=try&revision=63f02a17fab2cf51723bc45088c76a5ecde37af9
Local revision's try run: https://treeherder.mozilla.org/jobs?repo=try&revision=27ba5b2ad99b0e7dc5af443ee21f0f227f9a7589

But given I don't see anything in the interesting bits of the profile seems likely it was getting inlined anyways.

Ideally I'd be able to see the disassembly of that set datatransfer stuff but I don't see how immediately since there's no non-inline frame until the gecko marker?

(In reply to Emilio Cobos Álvarez (:emilio) from comment #2)

I'm a bit confused, what's the difference between the first and the second table entry? It seems the same test in the same platform?

In any case this doesn't seem like a too concerning regression, the profile doesn't show extra string copies, it's just a code generation regression effectively. My guess is that nsTSubString::Assign is not getting inline where it was before or something, will give something like that a shot.

The first and second entry are duplicates created by perfherder graphs view, it's a bug and I've usually noticed and removed them, but I forgot to this time, my apologies for the confusion.

Flags: needinfo?(aglavic)

(In reply to Emilio Cobos Álvarez (:emilio) from comment #4)

there are no symbols under set DataTransfer.dropEffect which is the interesting stuff. Markus, do you know what might be going on there? See https://share.firefox.dev/3UM9CQs

Huh, this is indeed quite weird. I wonder if a useful stack address is being removed by this heuristic which is supposed to elide some hex address frames for JIT frames. Do you have an Intel Mac that you could use to get profiles locally?

Flags: needinfo?(mstange.moz)

I do, they have the same issues (comment 4)

Oops sorry to answer your ni very late. I was on PTO. It looks like Markus has some ideas about it. It might be good to check that. I can spend some to time look into it today or tomorrow.

Flags: needinfo?(canaltinova)
You need to log in before you can comment on or make changes to this bug.