[pypy-svn] r72699 - in pypy/branch/fix-64/pypy/rpython/memory: gc test

arigo at codespeak.net arigo at codespeak.net
Wed Mar 24 12:08:26 CET 2010


Author: arigo
Date: Wed Mar 24 12:08:24 2010
New Revision: 72699

Modified:
   pypy/branch/fix-64/pypy/rpython/memory/gc/generation.py
   pypy/branch/fix-64/pypy/rpython/memory/gc/hybrid.py
   pypy/branch/fix-64/pypy/rpython/memory/test/test_gc.py
   pypy/branch/fix-64/pypy/rpython/memory/test/test_transformed_gc.py
Log:
Revert r72698, and fix the issue more generally by giving
small sizes that are expressed in multiples of the word size.


Modified: pypy/branch/fix-64/pypy/rpython/memory/gc/generation.py
==============================================================================
--- pypy/branch/fix-64/pypy/rpython/memory/gc/generation.py	(original)
+++ pypy/branch/fix-64/pypy/rpython/memory/gc/generation.py	Wed Mar 24 12:08:24 2010
@@ -8,9 +8,11 @@
 from pypy.rlib.objectmodel import free_non_gc_object
 from pypy.rlib.debug import ll_assert
 from pypy.rlib.debug import debug_print, debug_start, debug_stop
-from pypy.rlib.rarithmetic import intmask
+from pypy.rlib.rarithmetic import intmask, LONG_BIT
 from pypy.rpython.lltypesystem.lloperation import llop
 
+WORD = LONG_BIT // 8
+
 # The following flag is never set on young objects, i.e. the ones living
 # in the nursery.  It is initially set on all prebuilt and old objects,
 # and gets cleared by the write_barrier() when we write in them a
@@ -47,10 +49,10 @@
     nursery_hash_base = -1
 
     def __init__(self, config, chunk_size=DEFAULT_CHUNK_SIZE,
-                 nursery_size=128,
-                 min_nursery_size=128,
+                 nursery_size=32*WORD,
+                 min_nursery_size=32*WORD,
                  auto_nursery_size=False,
-                 space_size=4096,
+                 space_size=1024*WORD,
                  max_space_size=sys.maxint//2+1):
         SemiSpaceGC.__init__(self, config, chunk_size = chunk_size,
                              space_size = space_size,

Modified: pypy/branch/fix-64/pypy/rpython/memory/gc/hybrid.py
==============================================================================
--- pypy/branch/fix-64/pypy/rpython/memory/gc/hybrid.py	(original)
+++ pypy/branch/fix-64/pypy/rpython/memory/gc/hybrid.py	Wed Mar 24 12:08:24 2010
@@ -1,6 +1,6 @@
 import sys
 from pypy.rpython.memory.gc.semispace import SemiSpaceGC
-from pypy.rpython.memory.gc.generation import GenerationGC
+from pypy.rpython.memory.gc.generation import GenerationGC, WORD
 from pypy.rpython.memory.gc.semispace import GCFLAG_EXTERNAL, GCFLAG_FORWARDED
 from pypy.rpython.memory.gc.semispace import GCFLAG_HASHMASK
 from pypy.rpython.memory.gc.generation import GCFLAG_NO_YOUNG_PTRS
@@ -89,8 +89,8 @@
     # condition: large_object <= large_object_gcptrs < min_nursery_size/4
 
     def __init__(self, *args, **kwds):
-        large_object = kwds.pop('large_object', 24)
-        large_object_gcptrs = kwds.pop('large_object_gcptrs', 32)
+        large_object = kwds.pop('large_object', 6*WORD)
+        large_object_gcptrs = kwds.pop('large_object_gcptrs', 8*WORD)
         self.generation3_collect_threshold = kwds.pop(
             'generation3_collect_threshold', GENERATION3_COLLECT_THRESHOLD)
         GenerationGC.__init__(self, *args, **kwds)

Modified: pypy/branch/fix-64/pypy/rpython/memory/test/test_gc.py
==============================================================================
--- pypy/branch/fix-64/pypy/rpython/memory/test/test_gc.py	(original)
+++ pypy/branch/fix-64/pypy/rpython/memory/test/test_gc.py	Wed Mar 24 12:08:24 2010
@@ -1,7 +1,6 @@
 import py
 import sys
 
-#from pypy.rpython.memory.support import INT_SIZE
 from pypy.rpython.memory import gcwrapper
 from pypy.rpython.memory.test import snippet
 from pypy.rpython.test.test_llinterp import get_interpreter
@@ -12,6 +11,10 @@
 from pypy.rlib.objectmodel import compute_unique_id, keepalive_until_here
 from pypy.rlib import rgc
 from pypy.rlib.rstring import StringBuilder
+from pypy.rlib.rarithmetic import LONG_BIT
+
+WORD = LONG_BIT // 8
+
 
 def stdout_ignore_ll_functions(msg):
     strmsg = str(msg)
@@ -436,7 +439,7 @@
         assert res == 42
 
     def test_can_move(self):
-        TP = lltype.GcArray(lltype.UniChar)
+        TP = lltype.GcArray(lltype.Float)
         def func():
             return rgc.can_move(lltype.malloc(TP, 1))
         assert self.interpret(func, []) == self.GC_CAN_MOVE
@@ -629,7 +632,7 @@
     GC_CAN_SHRINK_ARRAY = True
 
 class TestGrowingSemiSpaceGC(TestSemiSpaceGC):
-    GC_PARAMS = {'space_size': 64}
+    GC_PARAMS = {'space_size': 16*WORD}
 
 class TestGenerationalGC(TestSemiSpaceGC):
     from pypy.rpython.memory.gc.generation import GenerationGC as GCClass
@@ -641,7 +644,7 @@
         py.test.skip("Not implemented yet")
 
 class TestMarkCompactGCGrowing(TestMarkCompactGC):
-    GC_PARAMS = {'space_size': 64}
+    GC_PARAMS = {'space_size': 16*WORD}
 
 class TestHybridGC(TestGenerationalGC):
     from pypy.rpython.memory.gc.hybrid import HybridGC as GCClass
@@ -716,11 +719,11 @@
     GC_CAN_MOVE = False # with this size of heap, stuff gets allocated
                         # in 3rd gen.
     GC_CANNOT_MALLOC_NONMOVABLE = False
-    GC_PARAMS = {'space_size': 192,
-                 'min_nursery_size': 48,
-                 'nursery_size': 48,
-                 'large_object': 12,
-                 'large_object_gcptrs': 12,
+    GC_PARAMS = {'space_size': 48*WORD,
+                 'min_nursery_size': 12*WORD,
+                 'nursery_size': 12*WORD,
+                 'large_object': 3*WORD,
+                 'large_object_gcptrs': 3*WORD,
                  'generation3_collect_threshold': 5,
                  }
 

Modified: pypy/branch/fix-64/pypy/rpython/memory/test/test_transformed_gc.py
==============================================================================
--- pypy/branch/fix-64/pypy/rpython/memory/test/test_transformed_gc.py	(original)
+++ pypy/branch/fix-64/pypy/rpython/memory/test/test_transformed_gc.py	Wed Mar 24 12:08:24 2010
@@ -1,6 +1,6 @@
 import py
 import sys
-import struct, inspect
+import inspect
 from pypy.translator.c import gc
 from pypy.annotation import model as annmodel
 from pypy.annotation import policy as annpolicy
@@ -14,8 +14,9 @@
 from pypy import conftest
 from pypy.rlib.rstring import StringBuilder
 from pypy.rlib.objectmodel import keepalive_until_here
+from pypy.rlib.rarithmetic import LONG_BIT
 
-INT_SIZE = struct.calcsize("i")   # only for estimates
+WORD = LONG_BIT // 8
 
 
 def rtype(func, inputtypes, specialize=True, gcname='ref', stacklessgc=False,
@@ -219,7 +220,7 @@
         run, statistics = self.runner("llinterp_lists", statistics=True)
         run([])
         heap_size = self.heap_usage(statistics)
-        assert heap_size < 16000 * INT_SIZE / 4 # xxx
+        assert heap_size < 16000 * WORD / 4 # xxx
 
     def define_llinterp_tuples(cls):
         def malloc_a_lot():
@@ -239,7 +240,7 @@
         run, statistics = self.runner("llinterp_tuples", statistics=True)
         run([])
         heap_size = self.heap_usage(statistics)
-        assert heap_size < 16000 * INT_SIZE / 4 # xxx
+        assert heap_size < 16000 * WORD / 4 # xxx
 
     def skipdefine_global_list(cls):
         gl = []
@@ -275,7 +276,7 @@
         res = run([100, 0])
         assert res == len(''.join([str(x) for x in range(100)]))
         heap_size = self.heap_usage(statistics)
-        assert heap_size < 16000 * INT_SIZE / 4 # xxx
+        assert heap_size < 16000 * WORD / 4 # xxx
 
     def define_nongc_static_root(cls):
         T1 = lltype.GcStruct("C", ('x', lltype.Signed))
@@ -883,7 +884,7 @@
     gcname = "marksweep"
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
-            GC_PARAMS = {'start_heap_size': 4096 }
+            GC_PARAMS = {'start_heap_size': 1024*WORD }
             root_stack_depth = 200
 
 
@@ -1121,7 +1122,7 @@
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.marksweep import PrintingMarkSweepGC as GCClass
-            GC_PARAMS = {'start_heap_size': 4096 }
+            GC_PARAMS = {'start_heap_size': 1024*WORD }
             root_stack_depth = 200
 
 class TestSemiSpaceGC(GenericMovingGCTests):
@@ -1131,7 +1132,7 @@
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.semispace import SemiSpaceGC as GCClass
-            GC_PARAMS = {'space_size': 2048}
+            GC_PARAMS = {'space_size': 512*WORD}
             root_stack_depth = 200
 
 class TestMarkCompactGC(GenericMovingGCTests):
@@ -1143,7 +1144,7 @@
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.markcompact import MarkCompactGC as GCClass
-            GC_PARAMS = {'space_size': 2048}
+            GC_PARAMS = {'space_size': 512*WORD}
             root_stack_depth = 200
 
 class TestGenerationGC(GenericMovingGCTests):
@@ -1154,8 +1155,8 @@
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.generation import GenerationGC as \
                                                           GCClass
-            GC_PARAMS = {'space_size': 2048,
-                         'nursery_size': 128}
+            GC_PARAMS = {'space_size': 512*WORD,
+                         'nursery_size': 32*WORD}
             root_stack_depth = 200
 
     def define_weakref_across_minor_collection(cls):
@@ -1351,8 +1352,8 @@
                 self.__ready = False # collecting here is expected
                 GenerationGC._teardown(self)
                 
-            GC_PARAMS = {'space_size': 2048,
-                         'nursery_size': 512}
+            GC_PARAMS = {'space_size': 512*WORD,
+                         'nursery_size': 128*WORD}
             root_stack_depth = 200
 
     def define_working_nursery(cls):
@@ -1382,9 +1383,9 @@
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.hybrid import HybridGC as GCClass
-            GC_PARAMS = {'space_size': 2048,
-                         'nursery_size': 128,
-                         'large_object': 32}
+            GC_PARAMS = {'space_size': 512*WORD,
+                         'nursery_size': 32*WORD,
+                         'large_object': 8*WORD}
             root_stack_depth = 200
 
     def define_ref_from_rawmalloced_to_regular(cls):
@@ -1522,7 +1523,7 @@
     gcname = "marksweep"
     class gcpolicy(gc.FrameworkGcPolicy):
         class transformerclass(framework.FrameworkGCTransformer):
-            GC_PARAMS = {'start_heap_size': 4096 }
+            GC_PARAMS = {'start_heap_size': 1024*WORD }
             root_stack_depth = 200
 
 class TestHybridTaggedPointerGC(TaggedPointerGCTests):
@@ -1532,6 +1533,6 @@
         class transformerclass(framework.FrameworkGCTransformer):
             from pypy.rpython.memory.gc.generation import GenerationGC as \
                                                           GCClass
-            GC_PARAMS = {'space_size': 2048,
-                         'nursery_size': 128}
+            GC_PARAMS = {'space_size': 512*WORD,
+                         'nursery_size': 32*WORD}
             root_stack_depth = 200



More information about the Pypy-commit mailing list