profiler issues: time overflows, conversion to seconds, gui/html output

timotheecour thelastmammoth at gmail.com
Fri Aug 24 10:35:34 PDT 2012


Thanks,

> The trace code is in druntime/rt/trace.d. There you can see 
> that the ticks/sec is just set to the shown constant value for 
> anything but Windows, but RDTSC is used to read the processor 
> cycles. So the values are probably off by a factor of 300 to 
> 1000.

So I'm still not sure how to convert those numbers to seconds. Is 
there a deterministic way? Is the multiplicative factor (300 to 
1000) fixed on a given machine or what does it depend on ?

> The time in ms is calculated as (time * 1000000) / freq, so 
> with a processor speed of 2GHz, this will overflow after about 
> 2000s.

Why not use 64 bit integer instead of 32 bit for counter?

> This doesn't seem to explain negative values in your run, so 
> some random hints:
>
> - if you rerun the program, results will accumulate in trace.log

I ran it just once


> - if you are calling recursive functions from inside main, 
> there might be some issues with the timings of these functions 
> (from my own experience from writing a profiler, it can get 
> quite tricky to measure the execution time of recursive 
> functions), and these are used to calculate the FuncTime of 
> main.

No recursive functions

> Visual D lets you explore trace.log in a browse window inside 
> Visual Studio, but I guess this won't help you on OSX.

great! Is there a way to run it on a project build outside of 
visualD? I use a makefile instead of relying on visualD's build 
system. When I open the profiler window and open trace.log inside 
nothing is shown. Ideally all it should do is demangle symbols 
and convert to a table, so I'm assuming trace.log is 
self-contained.



More information about the Digitalmars-d mailing list