I'd look into how the VM knows what time it is. Sooner or later there will be a primitive or some FFI call that asks the OS to tell you the time. You should follow the VM Code Lawyer's Standard Procedure(TM):

1.  What is the VM doing, exactly?

2. What are the relevant *official* specifications governing what the VM is doing? Be thorough in your search.

3. Does the VM implementation comply 100% with the specifications' requirements?

If you cannot answer "yes" at step 3, then you don't know what's going on. Chances are the VM merely *appears* to work, but you can't quite explain why. This is bad and should be rectified.

If you are forced to answer "no" at step 3, then you know the VM is Broken(TM). A lot of bugs are caused by specification violations. I know working with C specifications is not cool because it's not Smalltalk and all of that stuff, but I think it's even less cool to have a Broken(TM) VM so something has to be done.

I did some investigation about similar problems for Windows not long ago. Basically, relying on the function QueryPerformanceCounter() is just bad. Moreover, if the x86 VMs depend on the CPU's timestamp counter, then you are going to get problems like those you get with QueryPerformanceCounter(). Trace through the documentation on the function QueryPerformanceCounter(), the boot switch /usepmtimer, and something called HPET.

On 5/2/11 0:49 , Mariano Martinez Peck wrote:


On Mon, May 2, 2011 at 12:56 AM, Andres Valloud
<avall...@smalltalk.comcastbiz.net
<mailto:avall...@smalltalk.comcastbiz.net>> wrote:

    Does the Windows VM depend on QueryPerformanceCounter()?


I have no idea what that is, but a quick

grep -n "QueryPerformanceCounte" -r
~/Pharo/vm/git/cogVMMaster/blessed/platforms

tell me that not.



    On 5/1/11 16:53 , Alexandre Bergel wrote:

        Strange. I cannot produce this problem on OSX.

        Alexandre


        On 30 Apr 2011, at 22:15, Jimmie Houchin wrote:

            Hello,

            My OS for this application is Windows. On a freshly opened
            image, the image and OS time are in sync. Over a period of
            time the image drifted 34 seconds away from OS time. I do
            not know how long I had this image open, but it has been a
            number of days, possibly a week plus.

            I saved the image and quit. I reopened the image and did
            DateAndTime now and it was in sync with the OS once again.
            Same image, vm and OS that was out of sync by 34 seconds
            only one minute before.

            I have opened an image on my server which is also running
            the latest cog vm, the current Pharo 1.3 and Windows Vista.
            I am going to periodically do a DateAndTime now to log the
            drift if any. Prior to opening this image I updated the OS
            system clock with time.nist.gov <http://time.nist.gov> which
            is about 1000 miles away.

            I know that within a second or so it can be subject to my
            coordination of doing DateAndTime now while watching my OS
            system clocks seconds. But 34 seconds is beyond any
            subjective standards.

            The only reason I discovered this was while exploring how I
            want to retrieve my data, act upon my data and then pause
            (Delay wait) until time to repeat.
                dtnow := DateAndTime now.
                dtnext := DateAndTime year: 2011 month: 4 day: 30 hour:
            11 minute: i second: 5. "The next minute in the future"
                (Delay forDuration: (dtnext - dtnow)) wait.

            I got an error, that Duration cannot be a negative number.
            As I processed the debugger, I saw that dtnow was greater
            than dtnext. I watched the OS clock and manually selected
            the next minute before I executed. However, I was within
            that 34 second window.

            So now I am exploring the problem.

            Thanks.

            Jimmie

            On 4/30/2011 5:06 PM, Alexandre Bergel wrote:

                'Time now' gives me the same result than OSX

                Alexandre


                On 30 Apr 2011, at 16:15, Jimmie Houchin wrote:

                    On 4/30/2011 11:50 AM, Stéphane Ducasse wrote:

                            I am developing a time sensitive
                            application. I poll a server every minute
                            for new data. The data is time sensitive and
                            the sooner I can get the data to the release
                            of the data the better.

                            I have noticed that Pharo's system time
                            drifts away from the OS system time. I would
                            really like the Pharo system time to be the
                            correct time.

                        do you have a repeatable scenario?
                        VM
                        Image information.

                    Pharo 1.3 and the latest Cog.

                            I have not been able to find where in Pharo
                            I can call to update the System clock to the
                            correct time.

                        you can use OSProcess (only mac and linux)

                    No, that's not the problem. The OS clock is right.
                    It's Pharo that has drifted away from correct time.
                    Regardless it would be nice if I have to correct the
                    OS clock, it would still be nice to resync Pharo
                    with the OS, keep both in sync and correct. What I
                    am wanting is simply to resync the Pharo clock with
                    the OS clock.

                    It seems that when the Pharo image is started that
                    it gets the OS System time, but keeps its own time
                    after that. Now I do not know the consequences of
                    Pharo adjusting its time backward. If this isn't
                    possible, then I might have to do some workarounds
                    to insure that I get my data in a timely manner.

                    The image I have been developing in is currently
                    about 30 seconds ahead of the OS clock. It is on my
                    laptop. It might be due to the laptops sleep and
                    hibernation. I have not tested this on my server.

                    That is the situation as best I know it.

                    Thanks.

                    Jimmie








--
Mariano
http://marianopeck.wordpress.com


Reply via email to