[Vm-dev] [commit] r2245 - Improved high-priority ticker (deal with sleep). VMMaker image has reader cache

commits at squeakvm.org commits at squeakvm.org
Tue Jul 20 23:00:57 UTC 2010


Author: eliot
Date: 2010-07-20 16:00:57 -0700 (Tue, 20 Jul 2010)
New Revision: 2245

Modified:
   branches/Cog/image/VMMaker-Squeak4.1.changes
   branches/Cog/image/VMMaker-Squeak4.1.image
   branches/Cog/platforms/Cross/vm/sqTicker.c
Log:
Improved high-priority ticker (deal with sleep).  VMMaker image has reader cache
flushed (38Mb => 13Mb).


Modified: branches/Cog/image/VMMaker-Squeak4.1.changes
===================================================================
--- branches/Cog/image/VMMaker-Squeak4.1.changes	2010-07-20 18:20:26 UTC (rev 2244)
+++ branches/Cog/image/VMMaker-Squeak4.1.changes	2010-07-20 23:00:57 UTC (rev 2245)
@@ -124051,4 +124051,21 @@
 ----STARTUP----{19 July 2010 . 2:36:15 pm} as /Users/eliot/Cog/oscog/Cog.squeakvm.org/image/VMMaker-Squeak4.1.image!
 
 
-----QUIT/NOSAVE----{19 July 2010 . 2:41:01 pm} VMMaker-Squeak4.1.image priorSource: 5003704!
\ No newline at end of file
+----QUIT/NOSAVE----{19 July 2010 . 2:41:01 pm} VMMaker-Squeak4.1.image priorSource: 5003704!
+
+----STARTUP----{20 July 2010 . 12:35:23 pm} as /Users/eliot/Cog/oscog/Cog.squeakvm.org/image/VMMaker-Squeak4.1.image!
+
+
+TimeStamp instanceCount!
+
+----STARTUP----{20 July 2010 . 1:00:28 pm} as /Users/eliot/Cog/oscog/Cog.squeakvm.org/image/VMMaker-Squeak4.1.image!
+
+
+MCFileBasedRepository flushAllCaches!
+
+----QUIT----{20 July 2010 . 1:00:59 pm} VMMaker-Squeak4.1.image priorSource: 5003704!
+
+----STARTUP----{20 July 2010 . 1:14:28 pm} as /Users/eliot/Cog/oscog/Cog.squeakvm.org/image/VMMaker-Squeak4.1.image!
+
+
+----QUIT/NOSAVE----{20 July 2010 . 1:14:37 pm} VMMaker-Squeak4.1.image priorSource: 5004308!
\ No newline at end of file

Modified: branches/Cog/image/VMMaker-Squeak4.1.image
===================================================================
(Binary files differ)

Modified: branches/Cog/platforms/Cross/vm/sqTicker.c
===================================================================
--- branches/Cog/platforms/Cross/vm/sqTicker.c	2010-07-20 18:20:26 UTC (rev 2244)
+++ branches/Cog/platforms/Cross/vm/sqTicker.c	2010-07-20 23:00:57 UTC (rev 2245)
@@ -193,6 +193,18 @@
 	sqLowLevelMFence();
 }
 
+/* If the heartbeat fails to invoke checkHighPriorityTickees in a timely manner
+ * for wahtever reason (e.g. the user has put the machine to sleep) we need to
+ * readjust the deadline, moving it forward to a delta from the current time.
+ * If we don't then the heartbeat will spin calling checkHighPriorityTickees as
+ * it inches forward at tickeePeriodUsecs.  But if we always base the deadline
+ * on the current time and for whatever reason there is a slight hiccup then all
+ * subsequent deadlines will be pushed into the future.  The HiccupThreshold of
+ * 10 seconds distinguishes between the two cases; longer than 10 seconds and we
+ * assume the system has slept.
+ */
+#define HiccupThreshold 10000000ULL /* 10 seconds */
+
 void
 checkHighPriorityTickees(usqLong utcMicrosecondClock)
 {
@@ -217,7 +229,13 @@
 			sqCompareAndSwapRes(async[i].inProgress,0,1,previousInProgress);
 			if (previousInProgress == 0) {
 				assert(async[i].inProgress);
-				async[i].tickeeDeadlineUsecs += async[i].tickeePeriodUsecs;
+				if (async[i].tickeeDeadlineUsecs + HiccupThreshold
+					< utcMicrosecondClock)
+					async[i].tickeeDeadlineUsecs
+						= utcMicrosecondClock + async[i].tickeePeriodUsecs;
+				else
+					async[i].tickeeDeadlineUsecs
+						+= async[i].tickeePeriodUsecs;
 				async[i].tickee();
 				async[i].inProgress = 0;
 			}



More information about the Vm-dev mailing list