[pypy-svn] r68969 - in pypy/branch/gc-jit-hack/pypy: jit/metainterp rpython/memory/gctransform

arigo at codespeak.net arigo at codespeak.net
Wed Nov 4 12:02:29 CET 2009


Author: arigo
Date: Wed Nov  4 12:02:29 2009
New Revision: 68969

Modified:
   pypy/branch/gc-jit-hack/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/gc-jit-hack/pypy/jit/metainterp/warmspot.py
   pypy/branch/gc-jit-hack/pypy/rpython/memory/gctransform/framework.py
Log:
Use resize_nursery() in the JIT.


Modified: pypy/branch/gc-jit-hack/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/gc-jit-hack/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/gc-jit-hack/pypy/jit/metainterp/pyjitpl.py	Wed Nov  4 12:02:29 2009
@@ -1079,6 +1079,20 @@
     def log(self, msg):
         debug_print(msg)
 
+    # ---- tweaking the size of the GC nursery --------
+
+    def enlarge_nursery(self, enlarge):
+        warmrunnerdesc = self.warmrunnerdesc
+        if warmrunnerdesc is not None and warmrunnerdesc.can_resize_nursery:
+            from pypy.rpython.lltypesystem import lltype, lloperation
+            if enlarge:
+                newsize = 10*1024*1024         # XXX a rather custom number
+                if sys.maxint > 2147483647:
+                    newsize *= 2
+            else:
+                newsize = 0
+            lloperation.llop.gc_resize_nursery(lltype.Void, newsize)
+
 # ____________________________________________________________
 
 class MetaInterpGlobalData(object):
@@ -1367,10 +1381,12 @@
     def compile_and_run_once(self, *args):
         debug_start('jit-tracing')
         self.staticdata._setup_once()
+        self.staticdata.enlarge_nursery(True)
         self.create_empty_history()
         try:
             return self._compile_and_run_once(*args)
         finally:
+            self.staticdata.enlarge_nursery(False)
             if self.history is None:
                 debug_stop('jit-blackhole')
             else:
@@ -1397,12 +1413,15 @@
         must_compile = warmrunnerstate.must_compile_from_failure(key)
         if must_compile:
             debug_start('jit-tracing')
+            self.staticdata.enlarge_nursery(True)
         else:
             debug_start('jit-blackhole')
         self.initialize_state_from_guard_failure(key, must_compile)
         try:
             return self._handle_guard_failure(key)
         finally:
+            if must_compile:
+                self.staticdata.enlarge_nursery(False)
             if self.history is None:
                 debug_stop('jit-blackhole')
             else:

Modified: pypy/branch/gc-jit-hack/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/gc-jit-hack/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/branch/gc-jit-hack/pypy/jit/metainterp/warmspot.py	Wed Nov  4 12:02:29 2009
@@ -192,6 +192,8 @@
         self.translator = translator
         self.rtyper = translator.rtyper
         self.gcdescr = gc.get_description(translator.config)
+        self.can_resize_nursery = (
+            translator.config.translation.gctransformer == "framework")
 
     def find_portal(self):
         graphs = self.translator.graphs

Modified: pypy/branch/gc-jit-hack/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/gc-jit-hack/pypy/rpython/memory/gctransform/framework.py	(original)
+++ pypy/branch/gc-jit-hack/pypy/rpython/memory/gctransform/framework.py	Wed Nov  4 12:02:29 2009
@@ -806,8 +806,7 @@
 
     def gct_gc_resize_nursery(self, hop):
         if not hasattr(self, 'resizenursery_ptr'):
-            raise NotImplementedError("gc_resize_nursery: "
-                                      "only for generational gcs")
+            return    # only for generational gcs
         livevars = self.push_roots(hop)
         [v_number] = hop.spaceop.args
         hop.genop("direct_call",



More information about the Pypy-commit mailing list