On 26-Apr-09, at 12:09 PM, Taylor Venable wrote:
On Sun, Apr 26, 2009 at 10:10:39AM -0400, Marc Feeley wrote:
This sounds like more than one UNIX process is running. Can you try running "top" while you execute ./a.out ?
First of all, I'm on a system that looks like it has two CPUs (I have one of those Pentium 4 processors with hyper-threading).
Looking at `top` and comparing the three aforementioned Scheme implementations, I see some interesting results: whereas Chicken and MzScheme both stay in the process running state (onproc), Gambit frequently does a nanosleep which forces it to go into the ready-to-run state (run) before it can execute again. The Chicken and MzScheme impls will use the CPU that they're running on 100% but it's about 40% - 60% idle when running the Gambit version.
Strange indeed! Is your program calling thread-sleep! or process- status? I don't see why it would call nanosleep otherwise. Actually can you send me your program?
Here's something you can try to see if it solves the problem. At line 798 of lib/os_io.c insert the line
#undef USE_nanosleep
You can read the comment to see why nanosleep is used here (better timeout resolution).
Please let me know if that solves the problem. It would be interesting to know if this problem also occurs on other UNIX flavors, or if it is specific to Linux (which I assume you are using). Which kernel is this on?
Marc