Closed Bug 1125398 Opened 7 years ago Closed 7 years ago

Add additional loads to GC ubench

Categories

(Core :: JavaScript: GC, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla38

People

(Reporter: sfink, Assigned: sfink)

References

(Blocks 1 open bug)

Details

Attachments

(9 files)

Add in some more variants of mutator allocation behavior.
Refactoring: split out the ubench code into a separate file.
Attachment #8554002 - Flags: review?(terrence)
Some of the mutator allocation loads I will be adding really need their own set of garbage/frame, total garbage parameters. (eg, if you create as many weakmap entries as you do plain objects, you're gonna have a bad time.)

Also change around the UI a bit. Make it more obvious what's going on when you're running a test or tests. Indent stuff. More gooderify.
Attachment #8554006 - Flags: review?(terrence)
Everyone's favorite GC nightmare: WeakMaps!
Attachment #8554008 - Flags: review?(terrence)
So certain optimizations would work really well if you're only considering a single weakmap. Make two of them.
Attachment #8554010 - Flags: review?(terrence)
Benchmark large slots allocation
Attachment #8554011 - Flags: review?(terrence)
Now for the really interesting stuff: DOM nodes!

Hm, come to think of it, I ought to have one where I put expandos on stuff.
Attachment #8554013 - Flags: review?(terrence)
ArrayBuffer objects are small and malloc a bunch of data. Good test.
Attachment #8554015 - Flags: review?(terrence)
Let's see how much we can suffer from foreground finalization.
Attachment #8554017 - Flags: review?(terrence)
Attachment #8554002 - Flags: review?(terrence) → review+
Comment on attachment 8554006 [details] [diff] [review]
Give each test load its own parameters

Review of attachment 8554006 [details] [diff] [review]:
-----------------------------------------------------------------

Much nicer.

::: js/src/devtools/gc-ubench/index.html
@@ +10,5 @@
>    <script src="benchmarks/globalArrayArrayLiteral.js"></script>
>    <script src="benchmarks/globalArrayLargeArray.js"></script>
>    <script src="benchmarks/globalArrayObjectLiteral.js"></script>
>    <script src="benchmarks/globalArrayReallocArray.js"></script>
> +  <script src="benchmarks/selfCyclicWeakMap.js"></script>

I guess this needs to move down a couple patches.

@@ +25,5 @@
>      <input type="button" id="stop" value="Pause" onclick="stopstart()"></input>
>  </div>
>  
>  <div>
> +    Duration: <input type="text" id="test-duration" size=3 value="8" onchange="duration_changed()"></input>s

"" around the 3 in size=3.
Attachment #8554006 - Flags: review?(terrence) → review+
Comment on attachment 8554008 [details] [diff] [review]
Benchmark load: self-referential WeakMap

Review of attachment 8554008 [details] [diff] [review]:
-----------------------------------------------------------------

I winced reading this. You'll also want to move the import <script> from the prior patch to this patch.
Attachment #8554008 - Flags: review?(terrence) → review+
Comment on attachment 8554010 [details] [diff] [review]
Benchmark load: Pair of mutually recursive weakmaps

Review of attachment 8554010 [details] [diff] [review]:
-----------------------------------------------------------------

Heh.
Attachment #8554010 - Flags: review?(terrence) → review+
Comment on attachment 8554011 [details] [diff] [review]
Benchmark load: large objects

Review of attachment 8554011 [details] [diff] [review]:
-----------------------------------------------------------------

Yup. This should be the slots equivalent of globalArrayReallocArray.
Attachment #8554011 - Flags: review?(terrence) → review+
Comment on attachment 8554013 [details] [diff] [review]
Benchmark load; DOM textNodes

Review of attachment 8554013 [details] [diff] [review]:
-----------------------------------------------------------------

::: js/src/devtools/gc-ubench/benchmarks/textNodes.js
@@ +8,5 @@
> +    unload: () => { garbage = []; garbageIndex = 0; },
> +
> +    defaultGarbagePerFrame: "100K",
> +    defaultGarbageTotal: "8",
> +    

Whitespace at end of line.

@@ +12,5 @@
> +    
> +    makeGarbage: (N) => {
> +        var a = [];
> +        for (var i = 0; i < N; i++)
> +            a.push(document.createTextNode("t" + i));

We'll also want a test with extremely large text nodes.
Attachment #8554013 - Flags: review?(terrence) → review+
Comment on attachment 8554015 [details] [diff] [review]
Benchmark load: large ArrayBuffers (for big malloc data)

Review of attachment 8554015 [details] [diff] [review]:
-----------------------------------------------------------------

I guess those don't get nursery alloc with inline storage anymore?
Attachment #8554015 - Flags: review?(terrence) → review+
Attachment #8554017 - Flags: review?(terrence) → review+
(In reply to Terrence Cole [:terrence] from comment #14)
> Comment on attachment 8554015 [details] [diff] [review]
> Benchmark load: large ArrayBuffers (for big malloc data)
> 
> Review of attachment 8554015 [details] [diff] [review]:
> -----------------------------------------------------------------
> 
> I guess those don't get nursery alloc with inline storage anymore?

Large ones do not because they're large. Then again, small ones don't either, because they have finalizers. :-)

But it's probably not a loss, because small typed arrays and typed objects store their data inline now as long as you don't ask for their buffers. And I *think* they're nursery-allocatable too.
Borrowing from smaug's event creation microbenchmark.
Attachment #8554862 - Flags: review?(terrence)
Attachment #8554862 - Flags: review?(terrence) → review+
Blocks: 1147983
You need to log in before you can comment on or make changes to this bug.