2011-03-29 Geoffrey Garen <ggaren@apple.com>
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Mar 2011 21:50:52 +0000 (21:50 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Mar 2011 21:50:52 +0000 (21:50 +0000)
        Reviewed by Darin Adler.

        ~25% regression on v8-splay in the SunSpider harness
        https://bugs.webkit.org/show_bug.cgi?id=56128

        I'm not sure if this is the root cause of the regression Stephanie
        measured, but it seems to get us back to previous v8-splay times.

        SunSpider reports no change. v8-splay says 41% faster.

        * runtime/Heap.cpp:
        (JSC::Heap::reset): Make marking proportional to 1X the size of the heap,
        not .5X the size of the heap. When the heap is large, this makes a big
        difference. (Our old heap growth policy matched this. You can see by
        looking at resizeBlocks in revisions prior to r77699.)

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@82327 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/Heap.cpp

index 6b39e71..065b6bb 100644 (file)
@@ -1,3 +1,21 @@
+2011-03-29  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+
+        ~25% regression on v8-splay in the SunSpider harness
+        https://bugs.webkit.org/show_bug.cgi?id=56128
+        
+        I'm not sure if this is the root cause of the regression Stephanie
+        measured, but it seems to get us back to previous v8-splay times.
+        
+        SunSpider reports no change. v8-splay says 41% faster.
+
+        * runtime/Heap.cpp:
+        (JSC::Heap::reset): Make marking proportional to 1X the size of the heap,
+        not .5X the size of the heap. When the heap is large, this makes a big
+        difference. (Our old heap growth policy matched this. You can see by
+        looking at resizeBlocks in revisions prior to r77699.)
+
 2011-03-29  Steve Falkenburg  <sfalken@apple.com>
 
         Reviewed by Darin Adler.
index 9b95a32..e3ef8bb 100644 (file)
@@ -383,7 +383,11 @@ void Heap::reset(SweepToggle sweepToggle)
         m_markedSpace.shrink();
     }
 
-    size_t proportionalBytes = static_cast<size_t>(1.5 * m_markedSpace.size());
+    // To avoid pathological GC churn in large heaps, we set the allocation high
+    // water mark to be proportional to the current size of the heap. The exact
+    // proportion is a bit arbitrary. A 2X multiplier gives a 1:1 (heap size :
+    // new bytes allocated) proportion, and seems to work well in benchmarks.
+    size_t proportionalBytes = 2 * m_markedSpace.size();
     m_markedSpace.setHighWaterMark(max(proportionalBytes, minBytesPerCycle));
 
     JAVASCRIPTCORE_GC_END();