[Checkins] SVN: ZODB/branches/3.10/src/ZEO/ Made a small improvement to the client cache to that makes it slightly

Jim Fulton jim at zope.com
Mon Apr 11 17:24:55 EDT 2011


Log message for revision 121394:
  Made a small improvement to the client cache to that makes it slightly
  MRUish.
  
  In some experiments, this led to significant reductions in cache miss
  rates.
  

Changed:
  U   ZODB/branches/3.10/src/ZEO/cache.py
  U   ZODB/branches/3.10/src/ZEO/scripts/cache_simul.py
  U   ZODB/branches/3.10/src/ZEO/tests/test_cache.py

-=-
Modified: ZODB/branches/3.10/src/ZEO/cache.py
===================================================================
--- ZODB/branches/3.10/src/ZEO/cache.py	2011-04-11 21:24:53 UTC (rev 121393)
+++ ZODB/branches/3.10/src/ZEO/cache.py	2011-04-11 21:24:55 UTC (rev 121394)
@@ -152,7 +152,7 @@
     # default of 20MB.  The default here is misleading, though, since
     # ClientStorage is the only user of ClientCache, and it always passes an
     # explicit size of its own choosing.
-    def __init__(self, path=None, size=200*1024**2):
+    def __init__(self, path=None, size=200*1024**2, rearrange=.8):
 
         # - `path`:  filepath for the cache file, or None (in which case
         #   a temp file will be created)
@@ -163,6 +163,11 @@
         size = max(size, ZEC_HEADER_SIZE)
         self.maxsize = size
 
+        # rearrange: if we read a current record and it's more than
+        # rearrange*size from the end, then copy it forward to keep it
+        # from being evicted.
+        self.rearrange = rearrange * size
+
         # The number of records in the cache.
         self._len = 0
 
@@ -497,6 +502,7 @@
         size, saved_oid, tid, end_tid, lver, ldata = unpack(
             ">I8s8s8sHI", read(34))
         assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
+        assert end_tid == z64, (ofs, self.f.tell(), oid, tid, end_tid)
         assert lver == 0, "Versions aren't supported"
 
         data = read(ldata)
@@ -508,6 +514,25 @@
 
         self._n_accesses += 1
         self._trace(0x22, oid, tid, end_tid, ldata)
+
+        ofsofs = self.currentofs - ofs
+        if ofsofs < 0:
+            ofsofs += self.maxsize
+
+        if (ofsofs > self.rearrange and
+            self.maxsize > 10*len(data) and
+            size > 4):
+            # The record is far back and might get evicted, but it's
+            # valuable, so move it forward.
+
+            # Remove fromn old loc:
+            del self.current[oid]
+            self.f.seek(ofs)
+            self.f.write('f'+pack(">I", size))
+
+            # Write to new location:
+            self._store(oid, tid, None, data, size)
+
         return data, tid
 
     ##
@@ -599,6 +624,16 @@
         self._n_added_bytes += size
         self._len += 1
 
+        self._store(oid, start_tid, end_tid, data, size)
+
+        if end_tid:
+            self._trace(0x54, oid, start_tid, end_tid, dlen=len(data))
+        else:
+            self._trace(0x52, oid, start_tid, dlen=len(data))
+
+    def _store(self, oid, start_tid, end_tid, data, size):
+        # Low-level store used by store and load
+
         # In the next line, we ask for an extra to make sure we always
         # have a free block after the new alocated block.  This free
         # block acts as a ring pointer, so that on restart, we start
@@ -618,6 +653,7 @@
             extra = 'f' + pack(">I", excess)
 
         ofs = self.currentofs
+        seek = self.f.seek
         seek(ofs)
         write = self.f.write
 
@@ -639,13 +675,12 @@
 
         if end_tid:
             self._set_noncurrent(oid, start_tid, ofs)
-            self._trace(0x54, oid, start_tid, end_tid, dlen=len(data))
         else:
             self.current[oid] = ofs
-            self._trace(0x52, oid, start_tid, dlen=len(data))
 
         self.currentofs += size
 
+
     ##
     # If `tid` is None,
     # forget all knowledge of `oid`.  (`tid` can be None only for
@@ -660,7 +695,6 @@
     # - oid object id
     # - tid the id of the transaction that wrote a new revision of oid,
     #        or None to forget all cached info about oid.
-
     @locked
     def invalidate(self, oid, tid):
         ofs = self.current.get(oid)

Modified: ZODB/branches/3.10/src/ZEO/scripts/cache_simul.py
===================================================================
--- ZODB/branches/3.10/src/ZEO/scripts/cache_simul.py	2011-04-11 21:24:53 UTC (rev 121393)
+++ ZODB/branches/3.10/src/ZEO/scripts/cache_simul.py	2011-04-11 21:24:55 UTC (rev 121394)
@@ -19,6 +19,7 @@
 Options:
 -s size: cache size in MB (default 20 MB)
 -i: summarizing interval in minutes (default 15; max 60)
+-r: rearrange factor
 
 Note:
 
@@ -52,18 +53,22 @@
     # Parse options.
     MB = 1<<20
     cachelimit = 20*MB
+    rearrange = 0.8
     simclass = CircularCacheSimulation
     interval_step = 15
     try:
-        opts, args = getopt.getopt(args, "s:i:")
+        opts, args = getopt.getopt(args, "s:i:r:")
     except getopt.error, msg:
         usage(msg)
         return 2
+
     for o, a in opts:
         if o == '-s':
             cachelimit = int(float(a)*MB)
         elif o == '-i':
             interval_step = int(a)
+        elif o == '-r':
+            rearrange = float(a)
         else:
             assert False, (o, a)
 
@@ -103,8 +108,8 @@
             return 1
 
     # Create simulation object.
-    sim = simclass(cachelimit)
-    interval_sim = simclass(cachelimit)
+    sim = simclass(cachelimit, rearrange)
+    interval_sim = simclass(cachelimit, rearrange)
 
     # Print output header.
     sim.printheader()
@@ -141,6 +146,8 @@
             if last_interval is not None:
                 interval_sim.report()
                 interval_sim.restart()
+                if not interval_sim.warm:
+                    sim.restart()
             last_interval = this_interval
         sim.event(ts, dlen, version, code, oid, start_tid, end_tid)
         interval_sim.event(ts, dlen, version, code, oid, start_tid, end_tid)
@@ -160,10 +167,12 @@
     finish() method also calls report().
     """
 
-    def __init__(self, cachelimit):
+    def __init__(self, cachelimit, rearrange):
         self.cachelimit = cachelimit
+        self.rearrange = rearrange
         # Initialize global statistics.
         self.epoch = None
+        self.warm = False
         self.total_loads = 0
         self.total_hits = 0       # subclass must increment
         self.total_invals = 0     # subclass must increment
@@ -284,20 +293,19 @@
 
 # For use in CircularCacheSimulation.
 class CircularCacheEntry(object):
-    __slots__ = (# object key:  an (oid, start_tid) pair, where
-                 # start_tid is the tid of the transaction that created
-                 # this revision of oid
-                 'key',
+    __slots__ = (
+        # object key: an (oid, start_tid) pair, where start_tid is the
+        # tid of the transaction that created this revision of oid
+        'key',
 
-                 # tid of transaction that created the next revision;
-                 # z64 iff this is the current revision
-                 'end_tid',
+        # tid of transaction that created the next revision; z64 iff
+        # this is the current revision
+        'end_tid',
 
-                 # Offset from start of file to the object's data
-                 # record; this includes all overhead bytes (status
-                 # byte, size bytes, etc).
-                 'offset',
-                )
+        # Offset from start of file to the object's data record; this
+        # includes all overhead bytes (status byte, size bytes, etc).
+        'offset',
+        )
 
     def __init__(self, key, end_tid, offset):
         self.key = key
@@ -316,10 +324,12 @@
 
     extras = "evicts", "inuse"
 
-    def __init__(self, cachelimit):
+    evicts = 0
+
+    def __init__(self, cachelimit, rearrange):
         from ZEO import cache
 
-        Simulation.__init__(self, cachelimit)
+        Simulation.__init__(self, cachelimit, rearrange)
         self.total_evicts = 0  # number of cache evictions
 
         # Current offset in file.
@@ -348,6 +358,8 @@
 
     def restart(self):
         Simulation.restart(self)
+        if self.evicts:
+            self.warm = True
         self.evicts = 0
         self.evicted_hit = self.evicted_miss = 0
 
@@ -358,6 +370,20 @@
             if oid in self.current: # else it's a cache miss
                 self.hits += 1
                 self.total_hits += 1
+
+                tid = self.current[oid]
+                entry = self.key2entry[(oid, tid)]
+                offset_offset = self.offset - entry.offset
+                if offset_offset < 0:
+                    offset_offset += self.cachelimit
+                    assert offset_offset >= 0
+
+                if offset_offset > self.rearrange * self.cachelimit:
+                    # we haven't accessed it in a while.  Move it forward
+                    size = self.filemap[entry.offset][0]
+                    self._remove(*entry.key)
+                    self.add(oid, size, tid)
+
             elif oid in self.evicted:
                 size, e = self.evicted[oid]
                 self.write(oid, size, e.key[1], z64, 1)

Modified: ZODB/branches/3.10/src/ZEO/tests/test_cache.py
===================================================================
--- ZODB/branches/3.10/src/ZEO/tests/test_cache.py	2011-04-11 21:24:53 UTC (rev 121393)
+++ ZODB/branches/3.10/src/ZEO/tests/test_cache.py	2011-04-11 21:24:55 UTC (rev 121394)
@@ -553,52 +553,52 @@
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
     Jul 11 12:30-44     818     213      22     687   26.0%
-    Jul 11 12:45-59     818     297      20     603   36.3%
-    Jul 11 13:00-14     818     297      35     603   36.3%
-    Jul 11 13:15-29     818     280      29     620   34.2%
-    Jul 11 13:30-44     819     275      26     625   33.6%
-    Jul 11 13:45-59     818     254      24     646   31.1%
-    Jul 11 14:00-14     818     300      32     600   36.7%
-    Jul 11 14:15-29     818     267      35     633   32.6%
-    Jul 11 14:30-44     818     309      37     591   37.8%
-    Jul 11 14:45-59     819     271      26     629   33.1%
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 12:45-59     818     291      19     609   35.6%
+    Jul 11 13:00-14     818     295      36     605   36.1%
+    Jul 11 13:15-29     818     277      31     623   33.9%
+    Jul 11 13:30-44     819     276      29     624   33.7%
+    Jul 11 13:45-59     818     251      25     649   30.7%
+    Jul 11 14:00-14     818     295      27     605   36.1%
+    Jul 11 14:15-29     818     262      33     638   32.0%
+    Jul 11 14:30-44     818     297      32     603   36.3%
+    Jul 11 14:45-59     819     268      23     632   32.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_stats.main('-q cache.trace'.split())
                        loads    hits  inv(h)  writes hitrate
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_stats.main('-v cache.trace'.split())
     ... # doctest: +ELLIPSIS
@@ -620,27 +620,27 @@
     Jul 11 15:14:58 20              b8a 0000000000000000 0000000000000000 -
     Jul 11 15:14:58 52              b8a 00000000000003e9 0000000000000000 - 838
     Jul 11 15:14:59 22             1085 0000000000000357 0000000000000000 - 217
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15:00 22             1072 000000000000037e 0000000000000000 - 204
     Jul 11 15:15:01 20             16c5 0000000000000000 0000000000000000 -
     Jul 11 15:15:01 52             16c5 00000000000003e9 0000000000000000 - 1712
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_stats.main('-h cache.trace'.split())
                        loads    hits  inv(h)  writes hitrate
@@ -649,33 +649,33 @@
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
     Jul 11 12:30-44     818     213      22     687   26.0%
-    Jul 11 12:45-59     818     297      20     603   36.3%
-    Jul 11 13:00-14     818     297      35     603   36.3%
-    Jul 11 13:15-29     818     280      29     620   34.2%
-    Jul 11 13:30-44     819     275      26     625   33.6%
-    Jul 11 13:45-59     818     254      24     646   31.1%
-    Jul 11 14:00-14     818     300      32     600   36.7%
-    Jul 11 14:15-29     818     267      35     633   32.6%
-    Jul 11 14:30-44     818     309      37     591   37.8%
-    Jul 11 14:45-59     819     271      26     629   33.1%
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 12:45-59     818     291      19     609   35.6%
+    Jul 11 13:00-14     818     295      36     605   36.1%
+    Jul 11 13:15-29     818     277      31     623   33.9%
+    Jul 11 13:30-44     819     276      29     624   33.7%
+    Jul 11 13:45-59     818     251      25     649   30.7%
+    Jul 11 14:00-14     818     295      27     605   36.1%
+    Jul 11 14:15-29     818     262      33     638   32.0%
+    Jul 11 14:30-44     818     297      32     603   36.3%
+    Jul 11 14:45-59     819     268      23     632   32.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
     <BLANKLINE>
     Histogram of object load frequency
     Unique oids: 4,585
@@ -699,42 +699,42 @@
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
     Jul 11 12:30-44     818     213      22     687   26.0%
-    Jul 11 12:45-59     818     297      20     603   36.3%
-    Jul 11 13:00-14     818     297      35     603   36.3%
-    Jul 11 13:15-29     818     280      29     620   34.2%
-    Jul 11 13:30-44     819     275      26     625   33.6%
-    Jul 11 13:45-59     818     254      24     646   31.1%
-    Jul 11 14:00-14     818     300      32     600   36.7%
-    Jul 11 14:15-29     818     267      35     633   32.6%
-    Jul 11 14:30-44     818     309      37     591   37.8%
-    Jul 11 14:45-59     819     271      26     629   33.1%
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 12:45-59     818     291      19     609   35.6%
+    Jul 11 13:00-14     818     295      36     605   36.1%
+    Jul 11 13:15-29     818     277      31     623   33.9%
+    Jul 11 13:30-44     819     276      29     624   33.7%
+    Jul 11 13:45-59     818     251      25     649   30.7%
+    Jul 11 14:00-14     818     295      27     605   36.1%
+    Jul 11 14:15-29     818     262      33     638   32.0%
+    Jul 11 14:30-44     818     297      32     603   36.3%
+    Jul 11 14:45-59     819     268      23     632   32.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
     <BLANKLINE>
     Histograms of object sizes
     <BLANKLINE>
     <BLANKLINE>
-    Unique sizes written: 1,781
+    Unique sizes written: 1,782
           size   objs writes
-           200      6      6
+           200      5      5
            201      4      4
-           202      5      5
+           202      4      4
            203      1      1
            204      1      1
            205      6      6
@@ -742,9 +742,9 @@
     ...
          1,995      1      2
          1,996      2      2
-         1,997      2      3
+         1,997      1      1
          1,998      2      2
-         1,999      2      2
+         1,999      2      4
          2,000      1      1
 
     >>> ZEO.scripts.cache_stats.main('-S cache.trace'.split())
@@ -754,16 +754,16 @@
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
     Jul 11 12:30-44     818     213      22     687   26.0%
-    Jul 11 12:45-59     818     297      20     603   36.3%
-    Jul 11 13:00-14     818     297      35     603   36.3%
-    Jul 11 13:15-29     818     280      29     620   34.2%
-    Jul 11 13:30-44     819     275      26     625   33.6%
-    Jul 11 13:45-59     818     254      24     646   31.1%
-    Jul 11 14:00-14     818     300      32     600   36.7%
-    Jul 11 14:15-29     818     267      35     633   32.6%
-    Jul 11 14:30-44     818     309      37     591   37.8%
-    Jul 11 14:45-59     819     271      26     629   33.1%
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 12:45-59     818     291      19     609   35.6%
+    Jul 11 13:00-14     818     295      36     605   36.1%
+    Jul 11 13:15-29     818     277      31     623   33.9%
+    Jul 11 13:30-44     819     276      29     624   33.7%
+    Jul 11 13:45-59     818     251      25     649   30.7%
+    Jul 11 14:00-14     818     295      27     605   36.1%
+    Jul 11 14:15-29     818     262      33     638   32.0%
+    Jul 11 14:30-44     818     297      32     603   36.3%
+    Jul 11 14:45-59     819     268      23     632   32.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15-15       2       1       0       1   50.0%
 
     >>> ZEO.scripts.cache_stats.main('-X cache.trace'.split())
@@ -773,33 +773,33 @@
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
     Jul 11 12:30-44     818     213      22     687   26.0%
-    Jul 11 12:45-59     818     297      20     603   36.3%
-    Jul 11 13:00-14     818     297      35     603   36.3%
-    Jul 11 13:15-29     818     280      29     620   34.2%
-    Jul 11 13:30-44     819     275      26     625   33.6%
-    Jul 11 13:45-59     818     254      24     646   31.1%
-    Jul 11 14:00-14     818     300      32     600   36.7%
-    Jul 11 14:15-29     818     267      35     633   32.6%
-    Jul 11 14:30-44     818     309      37     591   37.8%
-    Jul 11 14:45-59     819     271      26     629   33.1%
-    Jul 11 15:00-14     818     292      30     608   35.7%
+    Jul 11 12:45-59     818     291      19     609   35.6%
+    Jul 11 13:00-14     818     295      36     605   36.1%
+    Jul 11 13:15-29     818     277      31     623   33.9%
+    Jul 11 13:30-44     819     276      29     624   33.7%
+    Jul 11 13:45-59     818     251      25     649   30.7%
+    Jul 11 14:00-14     818     295      27     605   36.1%
+    Jul 11 14:15-29     818     262      33     638   32.0%
+    Jul 11 14:30-44     818     297      32     603   36.3%
+    Jul 11 14:45-59     819     268      23     632   32.7%
+    Jul 11 15:00-14     818     291      30     609   35.6%
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_stats.main('-i 5 cache.trace'.split())
                        loads    hits  inv(h)  writes hitrate
@@ -812,53 +812,53 @@
     Jul 11 12:30-34     272      60       8     240   22.1%
     Jul 11 12:35-39     273      68       6     232   24.9%
     Jul 11 12:40-44     273      85       8     215   31.1%
-    Jul 11 12:45-49     273      85       7     215   31.1%
-    Jul 11 12:50-54     272     105       9     195   38.6%
-    Jul 11 12:55-59     273     107       4     193   39.2%
-    Jul 11 13:00-04     273      93      12     207   34.1%
-    Jul 11 13:05-09     273     103       7     197   37.7%
-    Jul 11 13:10-14     272     101      16     199   37.1%
-    Jul 11 13:15-19     273      93       9     207   34.1%
-    Jul 11 13:20-24     273      94       9     206   34.4%
-    Jul 11 13:25-29     272      93      11     207   34.2%
-    Jul 11 13:30-34     273      84      14     216   30.8%
-    Jul 11 13:35-39     273     102       6     198   37.4%
-    Jul 11 13:40-44     273      89       6     211   32.6%
-    Jul 11 13:45-49     272      81       6     219   29.8%
-    Jul 11 13:50-54     273      87       8     213   31.9%
-    Jul 11 13:55-59     273      86      10     214   31.5%
-    Jul 11 14:00-04     273      96      12     204   35.2%
-    Jul 11 14:05-09     272      95      11     205   34.9%
-    Jul 11 14:10-14     273     109       9     191   39.9%
-    Jul 11 14:15-19     273      92       9     208   33.7%
-    Jul 11 14:20-24     272      84      17     216   30.9%
-    Jul 11 14:25-29     273      91       9     209   33.3%
-    Jul 11 14:30-34     273     106      13     194   38.8%
-    Jul 11 14:35-39     273      90      13     210   33.0%
-    Jul 11 14:40-44     272     113      11     187   41.5%
-    Jul 11 14:45-49     273      83      10     217   30.4%
-    Jul 11 14:50-54     273     101       9     199   37.0%
-    Jul 11 14:55-59     273      87       7     213   31.9%
-    Jul 11 15:00-04     272      99       6     201   36.4%
-    Jul 11 15:05-09     273      95      12     205   34.8%
-    Jul 11 15:10-14     273      98      12     202   35.9%
+    Jul 11 12:45-49     273      84       6     216   30.8%
+    Jul 11 12:50-54     272     104       9     196   38.2%
+    Jul 11 12:55-59     273     103       4     197   37.7%
+    Jul 11 13:00-04     273      92      12     208   33.7%
+    Jul 11 13:05-09     273     103       8     197   37.7%
+    Jul 11 13:10-14     272     100      16     200   36.8%
+    Jul 11 13:15-19     273      91      11     209   33.3%
+    Jul 11 13:20-24     273      96       9     204   35.2%
+    Jul 11 13:25-29     272      90      11     210   33.1%
+    Jul 11 13:30-34     273      82      14     218   30.0%
+    Jul 11 13:35-39     273     102       9     198   37.4%
+    Jul 11 13:40-44     273      92       6     208   33.7%
+    Jul 11 13:45-49     272      82       6     218   30.1%
+    Jul 11 13:50-54     273      83       8     217   30.4%
+    Jul 11 13:55-59     273      86      11     214   31.5%
+    Jul 11 14:00-04     273      95      11     205   34.8%
+    Jul 11 14:05-09     272      91      10     209   33.5%
+    Jul 11 14:10-14     273     109       6     191   39.9%
+    Jul 11 14:15-19     273      89       9     211   32.6%
+    Jul 11 14:20-24     272      84      16     216   30.9%
+    Jul 11 14:25-29     273      89       8     211   32.6%
+    Jul 11 14:30-34     273      97      12     203   35.5%
+    Jul 11 14:35-39     273      93      10     207   34.1%
+    Jul 11 14:40-44     272     107      10     193   39.3%
+    Jul 11 14:45-49     273      80       8     220   29.3%
+    Jul 11 14:50-54     273     100       8     200   36.6%
+    Jul 11 14:55-59     273      88       7     212   32.2%
+    Jul 11 15:00-04     272      99       8     201   36.4%
+    Jul 11 15:05-09     273      95      11     205   34.8%
+    Jul 11 15:10-14     273      97      11     203   35.5%
     Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 18,837 trace records (640,450 bytes) in 0.0 seconds
+    Read 18,876 trace records (641,776 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (58.4%), average size 1106 bytes
-    Hit rate:   31.6% (load hits / loads)
+    Data recs:  11,000 (58.3%), average size 1108 bytes
+    Hit rate:   31.2% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              673  10  invalidate (miss)
-              327  1c  invalidate (hit, saving non-current)
-            6,836  20  load (miss)
-            3,164  22  load (hit)
-            7,836  52  store (current, non-version)
+              682  10  invalidate (miss)
+              318  1c  invalidate (hit, saving non-current)
+            6,875  20  load (miss)
+            3,125  22  load (hit)
+            7,875  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_simul.main('-s 2 -i 5 cache.trace'.split())
     CircularCacheSimulation, cache size 2,097,152 bytes
@@ -870,39 +870,39 @@
     Jul 11 12:30   4:59     272      60      8    240   22.1%       0    67.1
     Jul 11 12:35   4:59     273      68      6    232   24.9%       0    79.8
     Jul 11 12:40   4:59     273      85      8    215   31.1%       0    91.4
-    Jul 11 12:45   4:59     273      85      7    215   31.1%      61   100.0
-    Jul 11 12:50   4:59     272     105      9    195   38.6%     193   100.0
-    Jul 11 12:55   4:59     273     107      4    193   39.2%     184   100.0
-    Jul 11 13:00   4:59     273      93     12    207   34.1%     215    99.9
-    Jul 11 13:05   4:59     273     103      7    197   37.7%     191    99.9
-    Jul 11 13:10   4:59     272     101     16    199   37.1%     191    99.9
-    Jul 11 13:15   4:59     273      93      9    207   34.1%     227    99.9
-    Jul 11 13:20   4:59     273      94      9    206   34.4%     211    99.9
-    Jul 11 13:25   4:59     272      93     11    207   34.2%     208    99.9
-    Jul 11 13:30   4:59     273      84     14    216   30.8%     221    99.9
-    Jul 11 13:35   4:59     273     102      6    198   37.4%     201    99.9
-    Jul 11 13:40   4:59     273      88      6    212   32.2%     215   100.0
-    Jul 11 13:45   4:59     272      81      5    219   29.8%     209   100.0
-    Jul 11 13:50   4:59     273      87      8    213   31.9%     223   100.0
-    Jul 11 13:55   4:59     273      86     10    214   31.5%     196    99.9
-    Jul 11 14:00   4:59     273      96     12    204   35.2%     195   100.0
-    Jul 11 14:05   4:59     272      95     11    205   34.9%     201    99.9
-    Jul 11 14:10   4:59     273     110      9    190   40.3%     189    99.9
-    Jul 11 14:15   4:59     273      94      9    206   34.4%     210    99.9
-    Jul 11 14:20   4:59     272      87     17    213   32.0%     207   100.0
-    Jul 11 14:25   4:59     273      91     10    209   33.3%     214    99.9
-    Jul 11 14:30   4:59     273     106     13    194   38.8%     210   100.0
-    Jul 11 14:35   4:59     273      90     13    210   33.0%     206   100.0
-    Jul 11 14:40   4:59     272     113     11    187   41.5%     180   100.0
-    Jul 11 14:45   4:59     273      83     10    217   30.4%     230    99.9
-    Jul 11 14:50   4:59     273     101      9    199   37.0%     204   100.0
-    Jul 11 14:55   4:59     273      87      7    213   31.9%     223   100.0
-    Jul 11 15:00   4:59     272      99      6    201   36.4%     192    99.9
-    Jul 11 15:05   4:59     273      96     12    204   35.2%     203    99.9
-    Jul 11 15:10   4:59     273      98     12    202   35.9%     182    99.9
-    Jul 11 15:15      1       2       1      0      1   50.0%       1    99.9
+    Jul 11 12:45   4:59     273      84      6    216   30.8%      77    99.1
+    Jul 11 12:50   4:59     272     104      9    196   38.2%     196    98.9
+    Jul 11 12:55   4:59     273     104      4    196   38.1%     188    99.1
+    Jul 11 13:00   4:59     273      92     12    208   33.7%     213    99.3
+    Jul 11 13:05   4:59     273     103      8    197   37.7%     190    99.0
+    Jul 11 13:10   4:59     272     100     16    200   36.8%     203    99.2
+    Jul 11 13:15   4:59     273      91     11    209   33.3%     222    98.7
+    Jul 11 13:20   4:59     273      96      9    204   35.2%     210    99.2
+    Jul 11 13:25   4:59     272      89     11    211   32.7%     212    99.1
+    Jul 11 13:30   4:59     273      82     14    218   30.0%     220    99.1
+    Jul 11 13:35   4:59     273     101      9    199   37.0%     191    99.5
+    Jul 11 13:40   4:59     273      92      6    208   33.7%     214    99.4
+    Jul 11 13:45   4:59     272      80      6    220   29.4%     217    99.3
+    Jul 11 13:50   4:59     273      81      8    219   29.7%     214    99.2
+    Jul 11 13:55   4:59     273      86     11    214   31.5%     208    98.8
+    Jul 11 14:00   4:59     273      95     11    205   34.8%     188    99.3
+    Jul 11 14:05   4:59     272      93     10    207   34.2%     207    99.3
+    Jul 11 14:10   4:59     273     110      6    190   40.3%     198    98.8
+    Jul 11 14:15   4:59     273      91      9    209   33.3%     209    99.1
+    Jul 11 14:20   4:59     272      85     16    215   31.2%     210    99.3
+    Jul 11 14:25   4:59     273      89      8    211   32.6%     226    99.3
+    Jul 11 14:30   4:59     273      96     12    204   35.2%     214    99.3
+    Jul 11 14:35   4:59     273      90     10    210   33.0%     213    99.3
+    Jul 11 14:40   4:59     272     106     10    194   39.0%     196    98.8
+    Jul 11 14:45   4:59     273      80      8    220   29.3%     230    99.0
+    Jul 11 14:50   4:59     273      99      8    201   36.3%     202    99.0
+    Jul 11 14:55   4:59     273      87      8    213   31.9%     205    99.4
+    Jul 11 15:00   4:59     272      98      8    202   36.0%     211    99.3
+    Jul 11 15:05   4:59     273      93     11    207   34.1%     198    99.2
+    Jul 11 15:10   4:59     273      96     11    204   35.2%     184    99.2
+    Jul 11 15:15      1       2       1      0      1   50.0%       1    99.2
     --------------------------------------------------------------------------
-    Jul 11 12:11 3:03:19   10000    3170    327   7830   31.7%    5993    99.9
+    Jul 11 12:45 2:30:01    8184    2794    286   6208   34.1%    6067    99.2
 
     >>> cache_run('cache4', 4)
 
@@ -917,29 +917,29 @@
     Jul 11 13:00-14     818     381      43     519   46.6%
     Jul 11 13:15-29     818     450      44     450   55.0%
     Jul 11 13:30-44     819     503      47     397   61.4%
-    Jul 11 13:45-59     818     501      51     399   61.2%
-    Jul 11 14:00-14     818     523      50     377   63.9%
-    Jul 11 14:15-29     818     528      61     372   64.5%
-    Jul 11 14:30-44     818     509      49     391   62.2%
-    Jul 11 14:45-59     819     522      51     378   63.7%
-    Jul 11 15:00-14     818     504      52     396   61.6%
+    Jul 11 13:45-59     818     496      49     404   60.6%
+    Jul 11 14:00-14     818     516      48     384   63.1%
+    Jul 11 14:15-29     818     532      59     368   65.0%
+    Jul 11 14:30-44     818     516      51     384   63.1%
+    Jul 11 14:45-59     819     529      53     371   64.6%
+    Jul 11 15:00-14     818     515      49     385   63.0%
     Jul 11 15:15-15       2       2       0       0  100.0%
     <BLANKLINE>
-    Read 16,935 trace records (575,782 bytes) in 0.0 seconds
+    Read 16,918 trace records (575,204 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
-    Data recs:  11,000 (65.0%), average size 1105 bytes
-    Hit rate:   50.7% (load hits / loads)
+    Data recs:  11,000 (65.0%), average size 1104 bytes
+    Hit rate:   50.8% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
-              496  10  invalidate (miss)
-              504  1c  invalidate (hit, saving non-current)
-            4,934  20  load (miss)
-            5,066  22  load (hit)
-            5,934  52  store (current, non-version)
+              501  10  invalidate (miss)
+              499  1c  invalidate (hit, saving non-current)
+            4,917  20  load (miss)
+            5,083  22  load (hit)
+            5,917  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_simul.main('-s 4 cache.trace'.split())
     CircularCacheSimulation, cache size 4,194,304 bytes
@@ -950,16 +950,16 @@
     Jul 11 12:45  14:59     818     322     23    578   39.4%       0    61.4
     Jul 11 13:00  14:59     818     381     43    519   46.6%       0    75.8
     Jul 11 13:15  14:59     818     450     44    450   55.0%       0    88.2
-    Jul 11 13:30  14:59     819     503     47    397   61.4%       0    98.9
-    Jul 11 13:45  14:59     818     501     51    399   61.2%     368   100.0
-    Jul 11 14:00  14:59     818     523     50    377   63.9%     372   100.0
-    Jul 11 14:15  14:59     818     528     61    372   64.5%     361   100.0
-    Jul 11 14:30  14:59     818     507     49    393   62.0%     404   100.0
-    Jul 11 14:45  14:59     819     523     51    377   63.9%     387   100.0
-    Jul 11 15:00  14:59     818     503     52    397   61.5%     384   100.0
-    Jul 11 15:15      1       2       2      0      0  100.0%       0   100.0
+    Jul 11 13:30  14:59     819     503     47    397   61.4%      36    98.2
+    Jul 11 13:45  14:59     818     496     49    404   60.6%     388    98.5
+    Jul 11 14:00  14:59     818     515     48    385   63.0%     376    98.3
+    Jul 11 14:15  14:59     818     529     58    371   64.7%     391    98.1
+    Jul 11 14:30  14:59     818     511     51    389   62.5%     376    98.5
+    Jul 11 14:45  14:59     819     529     53    371   64.6%     410    97.9
+    Jul 11 15:00  14:59     818     512     49    388   62.6%     379    97.7
+    Jul 11 15:15      1       2       2      0      0  100.0%       0    97.7
     --------------------------------------------------------------------------
-    Jul 11 12:11 3:03:19   10000    5064    504   5936   50.6%    2276   100.0
+    Jul 11 13:30 1:45:01    5730    3597    355   2705   62.8%    2356    97.7
 
     >>> cache_run('cache1', 1)
 
@@ -969,54 +969,54 @@
     Jul 11 12:11:41 ==================== Restart ====================
     Jul 11 12:11-14     180       1       2     197    0.6%
     Jul 11 12:15-29     818     107       9     793   13.1%
-    Jul 11 12:30-44     818     159      16     741   19.4%
-    Jul 11 12:45-59     818     155       7     745   18.9%
+    Jul 11 12:30-44     818     160      16     740   19.6%
+    Jul 11 12:45-59     818     158       8     742   19.3%
     Jul 11 13:00-14     818     141      21     759   17.2%
     Jul 11 13:15-29     818     128      17     772   15.6%
-    Jul 11 13:30-44     819     152      12     748   18.6%
-    Jul 11 13:45-59     818     121      17     779   14.8%
-    Jul 11 14:00-14     818     157      17     743   19.2%
-    Jul 11 14:15-29     818     149      14     751   18.2%
-    Jul 11 14:30-44     818     159      16     741   19.4%
-    Jul 11 14:45-59     819     140      14     760   17.1%
-    Jul 11 15:00-14     818     155      10     745   18.9%
-    Jul 11 15:15-15       2       0       0       2    0.0%
+    Jul 11 13:30-44     819     151      13     749   18.4%
+    Jul 11 13:45-59     818     120      17     780   14.7%
+    Jul 11 14:00-14     818     159      17     741   19.4%
+    Jul 11 14:15-29     818     141      13     759   17.2%
+    Jul 11 14:30-44     818     157      16     743   19.2%
+    Jul 11 14:45-59     819     133      13     767   16.2%
+    Jul 11 15:00-14     818     158      10     742   19.3%
+    Jul 11 15:15-15       2       1       0       1   50.0%
     <BLANKLINE>
-    Read 20,277 trace records (689,410 bytes) in 0.0 seconds
+    Read 20,286 trace records (689,716 bytes) in 0.0 seconds
     Versions:   0 records used a version
     First time: Sun Jul 11 12:11:41 2010
     Last time:  Sun Jul 11 15:15:01 2010
     Duration:   11,000 seconds
     Data recs:  11,000 (54.2%), average size 1105 bytes
-    Hit rate:   17.2% (load hits / loads)
+    Hit rate:   17.1% (load hits / loads)
     <BLANKLINE>
             Count Code Function (action)
                 1  00  _setup_trace (initialization)
               828  10  invalidate (miss)
               172  1c  invalidate (hit, saving non-current)
-            8,276  20  load (miss)
-            1,724  22  load (hit)
-            9,276  52  store (current, non-version)
+            8,285  20  load (miss)
+            1,715  22  load (hit)
+            9,285  52  store (current, non-version)
 
     >>> ZEO.scripts.cache_simul.main('-s 1 cache.trace'.split())
     CircularCacheSimulation, cache size 1,048,576 bytes
       START TIME   DUR.   LOADS    HITS INVALS WRITES HITRATE  EVICTS   INUSE
     Jul 11 12:11   3:17     180       1      2    197    0.6%       0    21.5
-    Jul 11 12:15  14:59     818     107      9    793   13.1%      94    99.9
-    Jul 11 12:30  14:59     818     159     16    741   19.4%     722    99.9
-    Jul 11 12:45  14:59     818     156      8    744   19.1%     743    99.9
-    Jul 11 13:00  14:59     818     141     21    759   17.2%     767    99.9
-    Jul 11 13:15  14:59     818     126     16    774   15.4%     786    99.9
-    Jul 11 13:30  14:59     819     148     12    752   18.1%     736   100.0
-    Jul 11 13:45  14:59     818     123     17    777   15.0%     764    99.9
-    Jul 11 14:00  14:59     818     158     18    742   19.3%     739   100.0
-    Jul 11 14:15  14:59     818     148     14    752   18.1%     776    99.9
-    Jul 11 14:30  14:59     818     156     15    744   19.1%     745    99.9
-    Jul 11 14:45  14:59     819     142     15    758   17.3%     749    99.9
-    Jul 11 15:00  14:59     818     150     10    750   18.3%     740    99.8
-    Jul 11 15:15      1       2       1      0      1   50.0%       0    99.9
+    Jul 11 12:15  14:59     818     107      9    793   13.1%      96    99.6
+    Jul 11 12:30  14:59     818     160     16    740   19.6%     724    99.6
+    Jul 11 12:45  14:59     818     158      8    742   19.3%     741    99.2
+    Jul 11 13:00  14:59     818     140     21    760   17.1%     771    99.5
+    Jul 11 13:15  14:59     818     125     17    775   15.3%     781    99.6
+    Jul 11 13:30  14:59     819     147     13    753   17.9%     748    99.5
+    Jul 11 13:45  14:59     818     120     17    780   14.7%     763    99.5
+    Jul 11 14:00  14:59     818     159     17    741   19.4%     728    99.4
+    Jul 11 14:15  14:59     818     141     13    759   17.2%     787    99.6
+    Jul 11 14:30  14:59     818     150     15    750   18.3%     755    99.2
+    Jul 11 14:45  14:59     819     132     13    768   16.1%     771    99.5
+    Jul 11 15:00  14:59     818     154     10    746   18.8%     723    99.2
+    Jul 11 15:15      1       2       1      0      1   50.0%       0    99.3
     --------------------------------------------------------------------------
-    Jul 11 12:11 3:03:19   10000    1716    173   9284   17.2%    8361    99.9
+    Jul 11 12:15 3:00:01    9820    1694    169   9108   17.3%    8388    99.3
 
 Cleanup:
 



More information about the checkins mailing list