Re: [INTERNALS-WIN] [PATCH] Microsecond resolution and accuracy on Windows
[email protected] ("Matt Wilmas")
| Newsgroups | php.internals |
|---|---|
| Message-ID | <017CEF5564AC4DF388331B030EF11A91@pc1> |
Hi Anatol, Stas, ----- Original Message ----- From: "Anatol Belski" Sent: Tuesday, September 02, 2014 > On Mon, September 1, 2014 22:49, Stas Malyshev wrote: >> Hi! >> >> >>> It's much more optimized than what's there now, and slightly over the >>> old implementation. Not sure if I should give the saved patch link, or >>> the "live compare" (?) on Github, so I'll do both for now: >>> http://realplain.com/php/microtime_5_4.diff >>> https://github.com/matt-moo/php-src/compare/PHP-5.4.diff >>> >>> >>> Against 5.4 since that's what I quickly worked on so it's ready for the >>> next 5.4 release (Stas?). (Although I guess we're supposed to change >>> the oldest branch usually?) >> >> Looking at the patch, it looks like unfortunately it changes a global >> structure (_php_win32_core_globals) which breaks binary compatibility. I >> think if you move the additional value to the end of the structure it >> should be ok though, since other offsets should not change then. >> > AFAIR the patch with ABI break was at the time where 5.5 was alpha, so the > change was backported. Was not intentional to break ABI and just based on > the good user feedback, and good tested anyway. Still used and shows no > issue in the phpt and app unit tests. OK before, so should be OK now, right? I just figured the Windows globals were "special"/not important and could be changed after seeing that... Is anyone/anything actually using _php_win32_core_globals besides the core? Nothing interesting there...? >> I'm also not sure how important it is how have it for 5.4. Does the >> problem that this patch fixes exist only in older versions of Windows or >> on >> all versions? What are the actual effects of this problem - is it just >> lower resolution of microtime or there can be something seriously wrong >> with the whole result? If it's just lower resolution, I'd prefer this to >> go into 5.5 as the change is pretty extensive. -- > That's the lower resolution on systems preceding win8. The previous issue > was time_before > time_after which was caused by the same approach Matt > has now in the patch. Hopefully fixed now! > Also I've developed pecl.php.net/hrtime since then which provides the > exact solution - a stopwatch for inteval measurements, no synchronized > timestamps. The microtime in the core delivers the real timestamp, not a > computed one. But well, with an accuracy which one could wish to be > better. Currently, something like this can never be true > > $time0 = microtime(true); > time1 = microtime(true); > > var_dump($time1 - $time0 < 0); Of course it *can* be true, currently. IF the system time is set backwards! Unlike time itself, computer clocks aren't monotonic. > For the practical case, i'm not sure if with the Matt's patch one will be > able to make an ebay bid in the right time (assumed it's expected to have > microsecond precision). However with a lower accuracy there might be an > issue, too. Phony buggy timestamp vs. worse accuracy. Please consider also > the other issues like hardware/software i mentioned in the other mail. eBay bid?!? :-O You'd have bigger problems than timestamps with that. Like waiting for Windows' timers, before the unknowns like network latency. :-) > Regards > > Anatol - Matt