[M3devel] gettimeofday called from CheckLoadTracedRef?

Jay jay.krell at cornell.edu
Mon May 25 00:02:37 CEST 2009


Can you try like this? I haven't even compiled it.
 
 
--- RTCollector.m3 2009-05-24 14:56:43.510632700 -0700
+++ RTCollector.m3.mine1 2009-05-24 15:00:25.323132700 -0700
@@ -687,12 +687,11 @@
     IF impureCopy.page # NIL THEN
       
     END;
-  END CollectorOn;
+  END CollectorOnWithoutTimeKeeping;
 
 PROCEDURE CollectorOn (VAR timeOnEntry: Time.T) =
   (* LL>= RTOS.LockHeap *)
   BEGIN
-    
     CollectorOnWithoutTimeKeeping();
     timeOnEntry := Time.Now();
   END CollectorOn;
@@ -713,16 +712,14 @@
       signalWeak := FALSE;
       RTOS.BroadcastHeap();
     END;
-  END CollectorOff;
+  END CollectorOffWithoutTimeKeeping;
 
 PROCEDURE CollectorOff (VAR timeOnEntry: Time.T; allocator := FALSE) =
   (* LL>= RTOS.LockHeap *)
   VAR timeOnExit := Time.Now();
   BEGIN
     
-
     CollectorOffWithoutTimeKeeping();
-
     cycleCost := cycleCost + (timeOnExit - timeOnEntry);
     IF allocator AND tsIndex>= 0 THEN
       tStamps[tsIndex] := timeOnEntry; INC(tsIndex);
@@ -2259,7 +2256,6 @@
      to heap state. *)
   VAR
     p := Word.RightShift (LOOPHOLE(ref, Word.T), LogBytesPerPage);
-    t0: Time.T;
     thread := ThreadF.MyHeapState();
   BEGIN
     INC(checkLoadTracedRef);   (* race, so only approximate *)











----------------------------------------
> From: jay.krell at cornell.edu
> To: mika at async.caltech.edu
> CC: m3devel at elegosoft.com
> Subject: RE: [M3devel] gettimeofday called from CheckLoadTracedRef?
> Date: Sun, 24 May 2009 18:20:50 +0000
>
>
> I can send you a diff to try later but I won't likely have confidence in it. Tony will have to judge.
>
>
> - Jay
>
>
> ----------------------------------------
>> To: jay.krell at cornell.edu
>> Date: Sun, 24 May 2009 11:15:51 -0700
>> From: mika at async.caltech.edu
>> CC: m3devel at elegosoft.com
>> Subject: Re: [M3devel] gettimeofday called from CheckLoadTracedRef?
>>
>> It makes a syscall. A slow one!
>>
>> Mika
>>
>> Jay writes:
>>>
>>>It does appear to be making policy decisions based on elapsed time, not just collecting times to report.
>>>
>>>Does gettimeofday on your system make a syscall or read a global?
>>>
>>> - Jay
>>>
>>>Maybe since the intent is just to process one object/page, the CollectorOn/Off calls can be replaced by just
>>> collectorOn := TRUE or FALSE
>>>
>>> ? For CollectorOff that isn't clear since it does more, but CollectorOn is just that plus time recording plus an assertion. Still, given that the intent is some limited processing, I think the time collection could be avoided and might not even be a good thing?
>>>
>>>
>>> - Jay
>>>
>>>
>>>----------------------------------------
>>>> To: m3devel at elegosoft.com
>>>> Date: Sat, 23 May 2009 13:34:16 -0700
>>>> From: mika at async.caltech.edu
>>>> CC: mika at camembert.async.caltech.edu
>>>> Subject: [M3devel] gettimeofday called from CheckLoadTracedRef?
>>>>
>>>>
>>>> Hi Modula-3ers, especially Tony,
>>>>
>>>> I'm seeing the following behavior a lot in a program I'm running:
>>>>
>>>> #0 0x68ecbba7 in gettimeofday () from /lib/libc.so.5
>>>> #1 0x68611cb9 in Now () at ../src/time/POSIX/TimePosix.m3:16
>>>> #2 0x685ecf06 in CollectorOn (timeOnEntry=Invalid C/C++ type code 30 in symbol table.
>>>> ) at ../src/runtime/common/RTCollector.m3:674
>>>> #3 0x685f2476 in CheckLoadTracedRef (ref=Invalid C/C++ type code 46 in symbol table.
>>>> ) at ../src/runtime/common/RTCollector.m3:2271
>>>> #4 0x68139379 in Get (tbl=Invalid C/C++ type code 26 in symbol table.
>>>> )
>>>> at ../FreeBSD4/SortedTotalOrderLRTbl.m3 => /usr/local/cm3/pkg/libm3/src/sortedtable/SortedTable.mg:145
>>>>
>>>> Is it normal for CheckLoadTracedRef to make system calls?
>>>>
>>>> Hmm, why is it even doing CheckLoadTracedRef? Here's the code (from SortedTable.mg):
>>>>
>>>>
>>>> PROCEDURE Get ( tbl : Default;
>>>> READONLY k : Key.T;
>>>> VAR(*OUT*) v : Value.T): BOOLEAN =
>>>> VAR
>>>> x : Node := tbl.h.hi;
>>>> cmp : Cmp;
>>>> BEGIN
>>>> WHILE (x # NIL) DO
>>>> cmp := tbl.keyCompare (k, x.key);
>>>> IF cmp = 0 THEN v := x.value; RETURN TRUE; END;
>>>> IF (cmp < 0)
>>>> THEN x := x.lo; (* line 145 *)
>>>> ELSE x := x.hi;
>>>> END;
>>>> END;
>>>> RETURN FALSE;
>>>> END Get;
>>>>
>>>> where Node is defined as
>>>>
>>>> TYPE
>>>> Node = REF RECORD
>>>> key : Key.T;
>>>> value : Value.T;
>>>> lo : Node := NIL;
>>>> hi : Node := NIL;
>>>> priority: INTEGER (* random num; tree is a heap on these *)
>>>> END;
>>>>
>>>> It seems odd to me that, under these circumstances, x := x.lo would
>>>> cause any sort of checking activity...
>>>>
>>>> I'm using a CM3 that's about a month old, on FreeBSD4.
>>>>
>>>> Mika
>>>>
>>>> P.S. Needless to say, the code in question runs about 10x faster under
>>>> PM3 than with this relatively new CM3... but my m3gdb is having trouble
>>>> with PM3's LONGREALs for some reason.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: diff.txt
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090524/aca21665/attachment-0002.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: RTCollector.m3.orig
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090524/aca21665/attachment-0004.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: RTCollector.m3.mine1
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090524/aca21665/attachment-0005.ksh>


More information about the M3devel mailing list