[gambit-list] Leopard bug causing extremely slow parsing times

Marc Feeley feeley at iro.umontreal.ca
Tue Oct 30 02:56:46 EDT 2007


On 29-Oct-07, at 12:21 PM, James Long wrote:

> I was initially using the prebuilt version, but I recompiled v4.0.1
> from source (with --enable-single-host and --enable-gcc-opts) and
> nothing changed.
>
> I just installed the newest version of the Apple Developer Tools,  
> gcc reports:
> i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)
>
> Bug has been posted.  Tell me if you need any more info about it.
> http://www.iro.umontreal.ca/~gambit/bugzilla/show_bug.cgi?id=15
>
> James


This bug is sufficiently severe that I am sending the solution to the  
whole list.  It might affect other operating systems than MacOS  
Leopard so you might find the patch useful.

Marc

The problem is not with I/O. Apparently MacOS X has a very high  
resolution interval timer (setitimer). When the Gambit thread system  
is initialized, it sets up the interval timer for implementing the  
thread quantum. In _thread.scm you will find this call:

(##thread-heartbeat-interval-set! (macro-inexact-+0))

which is the same as

(##thread-heartbeat-interval-set! 0.0)

The value 0.0 is a special value indicating that the shortest possible  
time interval should be used. On MacOS 10.4 this time is 1e-2 or 1e-3  
seconds (I don't remember which, but fairly coarse). On MacOS 10.5 the  
time is 1e-6, i.e. one microsecond! Because the quantum is so small,  
the system is spending a lot of time being interrupted by the timer  
for no good reason.

I just installed MacOS 10.5 and haven't yet installed Mercurial (so I  
can't upload a patch). In the meantime simply replace the problematic  
line in lib/_thread.scm by

(##thread-heartbeat-interval-set! 0.01)

and run "make".  Note that the compiler will take forever to compile  
lib/_thread.scm (because gsc-comp will be running with a heartbeat  
interval of 1e-6 second).  If you want to save some time do this:

% cd lib
% echo "(##thread-heartbeat-interval-set! 0.01)" > gambcini.scm
% ../gsc-comp -:=.. -c -check _thread.scm
% ../gsc-comp -:=.. -link -flat -o _gambc.c _kernel.c _system.c _num.c  
_std.c _eval.c _io.c _nonstd.c _thread.c _repl.c
% make
% cd ../gsc
% echo "(##thread-heartbeat-interval-set! 0.01)" > gambcini.scm
% ../gsc-comp -:=".." -link _host.c _utils.c _source.c _parms.c _env.c  
_ptree1.c _ptree2.c _gvm.c _back.c _front.c _prims.c _t-c-1.c _t-c-2.c  
_t-c-3.c _gsc.c
% make
% cp gsc ../gsc-comp
% cd ..
% make




More information about the Gambit-list mailing list