I posted this on this mailing list before at Jane Street we have developed very fast code to get timing information based on TSC if available. It's all ocaml but well documented and mostly just calls to c functions so should be easy to port to C and we release it under a very liberal license so it should be no problem to take the ideas:
Also I'm sorry for top posting. hackers is the only mailing list I'm on that requires this and some others require top posting so this runs counter my habits and I only realized after sending...
On Tue, May 13, 2014 at 11:34 PM, Greg Stark <stark@mit.edu> wrote: > I always assumed the kernel used rdtsc to implement some of the high > performance timers. It can save the current time in a mapped page when > it schedules a process and then in the vdso syscall (ie in user-space) > it can use rdtsc to calculate the offset needed to adjust that > timestamp to the current time. This seems consistent with your > calculations that showed the 40ns overhead with +/- 10ns precision.
Crazy idea: Instead of trying to time precisely the amount of time we spend in each node, configure a very-high frequency timer interrupt (or background thread?) that does:
SomeGlobalVariablePointingToTheCurrentNode->profiling_counter++; -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company