2010/6/11 Steven McCoy <span dir="ltr"><<a href="mailto:steven.mccoy@miru.hk">steven.mccoy@miru.hk</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im">On 11 June 2010 16:11, Steven McCoy <span dir="ltr"><<a href="mailto:steven.mccoy@miru.hk" target="_blank">steven.mccoy@miru.hk</a>></span> wrote:<br></div><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">



<div>"<span style="font-family: 'Lucida Grande',Verdana,Arial,sans-serif; font-size: 12px; color: rgb(68, 68, 68); line-height: 21px;">It takes 324 cycles per call to complete 1 million GTOD calls without RDTSCP and 221 cycles per call with the capability."</span></div>



<div class="gmail_quote">
<div><br></div><div><br></div></div></blockquote><div><br></div></div><div>Compare this with HPET which I clock about 500ns when using mmap(), it would be significantly slower when using libc IO to read from the device.</div>

<div>

<br></div><div>WIthout RDTSCP or HPET you can use CPUID+RDTSC or complicated tracking of current cores and TSC offsets, etc, which is absolutely broken on hyperthreading processors.</div></div></blockquote><div><br>A micro-benchmark comparing various time-tracking methods (for FreeBSD but probably easily portable) was posted on <a href="http://unix.derkeiler.com/Mailing-Lists/FreeBSD/performance/2008-06/msg00000.html">http://unix.derkeiler.com/Mailing-Lists/FreeBSD/performance/2008-06/msg00000.html</a> On Linux the fastest is clock_getttime(CLOCK_MONOTONIC_COARSE) (recently introduced in 2.6.3X - see <a href="http://lwn.net/Articles/347811/">http://lwn.net/Articles/347811/</a>)<br>

<br></div></div>-- <br>Marcin Gozdalik<br>