Author: sewardj
Date: 2007-10-01 11:21:07 +0100 (Mon, 01 Oct 2007)
New Revision: 6927

Log:
Improve performance for OpenOffice-sized applications by messing with
N_SECMAP_BITS, and update some associated comments.

Modified:
   branches/THRCHECK/thrcheck/tc_main.c


Modified: branches/THRCHECK/thrcheck/tc_main.c
===================================================================
--- branches/THRCHECK/thrcheck/tc_main.c        2007-09-30 10:48:32 UTC (rev 
6926)
+++ branches/THRCHECK/thrcheck/tc_main.c        2007-10-01 10:21:07 UTC (rev 
6927)
@@ -571,7 +571,14 @@
 
 /* Primary Map is the usual FiniteMap Addr SecMap* w/ cache */
 
-#define N_SECMAP_BITS   11
+/* See comments below on shadow_mem_make_NoAccess re performance
+   effects of N_SECMAP_BITS settings.  On a 2.4GHz Core2,
+   starting/quitting OOo (32-bit), I have these rough numbers:
+      N_SECMAP_BITS = 11    2m23
+      N_SECMAP_BITS = 12    1m58
+      N_SECMAP_BITS = 13    1m53
+*/
+#define N_SECMAP_BITS   13
 #define N_SECMAP_ARANGE (1 << N_SECMAP_BITS)
 #define N_SECMAP_MASK   (~(N_SECMAP_ARANGE - 1))
 #define N_SECMAP_W32S   (N_SECMAP_ARANGE / 4)
@@ -2499,35 +2506,35 @@
    Otherwise, the range contains some locks.  Then we have to do all
    the complexity below and only then set the range to NoAccess.
 
-   // make up a set containing the which are deleted
-   ToDelete = NULL
-   scan the range in map_locks, 
-   for each lock lk found {
-      add lk to ToDelete
-    
-      case lk of
-         UnlockedNew.  simply free up the Lock
-         UnlockedBy.   makes a reference to Segment (via
-                       map_segments) but just leave that.
-                       Maybe we will later GC the segment graph.
+   1. Make up a set containing the locks which are deleted:
 
-         LockedBy.     Bad case.  Report error.
-                       remove from from the currlocks set of the
-                       owning thread
-   }
+     ToDelete = NULL
 
-   modify all shadow words, by removing ToDelete from the lockset
-   of all ShM and ShR states.  
+     for each lk in map_locks {
+        if lk's guest addr falls in the range to memory be deleted
+           add lk to ToDelete
 
-   Finally set the range to NoAccess.
+        if lk is held, issue an error message - freeing memory
+           containing a held lock
+     }
+    
+   2. Modify all shadow words, by removing ToDelete from the lockset
+      of all ShM and ShR states.  Note this involves a complete scan
+      over map_shmem, which is very expensive according to OProfile.
+      Hence it depends critically on the size of each entry in
+      map_shmem.  See comments on definition of N_SECMAP_BITS above.
 
-   Optimisation 1: skip SecMaps which do not have .hasShared set
+   3. Set the range to NoAccess.  Clear the .hasShared and .anyLocks
+      hint bits for any completely vacated SecMaps.
 
-   Optimisation 2: for each SecMap, have a summary lock set which is
-   the union of all locks mentioned in locksets on this page.
-   Then skip the page if the summary lockset does not intersect with
-   ToDelete.
+   Optimisation 1 (implemented): skip SecMaps which do not have
+   .hasShared set
 
+   Optimisation 2 (not implemented, needs rethink): for each SecMap,
+   have a summary lock set which is the union of all locks mentioned
+   in locksets on this page.  Then skip the page if the summary
+   lockset does not intersect with ToDelete.
+
    that's potentially cheap, since the usual lockset refinement
    only shrinks locksets; hence there is no point in updating the
    summary lockset for ShM/R -> ShM/R transitions
@@ -3229,7 +3236,7 @@
    }
 
    // FIXME: error-if: exiting thread holds any locks
-   //        or shouw evh__pre_thread_ll_exit do that?
+   //        or should evh__pre_thread_ll_exit do that?
 
    /* Delete thread from ShM/ShR thread sets and restore Excl states
       where appropriate */


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to