| Thread overview | |||||
|---|---|---|---|---|---|
|
December 13, 2007 Measuring CPU load | ||||
|---|---|---|---|---|
| ||||
Hi!
It's not really D related, I know, but I don't know where else to ask.
So: I've got this little class that measures in/out time of threads with the rdtsc assembler opcode. The relevant thread gets started periodically, takes time of start in[t] at the entry point and time of exit out [t] with "scope (exit) ...".
This gives me the following measurments:
in[t] // thread entered (current iteration)
out[t] // thread exited (current iteration)
in[t-1] // thread entered (last iteration)
And the following formula:
cpuload = 100 * (out[t] - in[t]) / (in[t] - in[t-1]);
to get the cpu load in %.
Now I've tested this and I'm not quite sure. The results are at least somewhat reasonable, although they seem to be double the real value (I've got a dual core system) so that might explain that.
But before guessing around I thought I'll ask here if this way of measuring is completely wrong or if there's a better way to do that.
-Mike
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
| ||||
December 14, 2007 Re: Measuring CPU load | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Mike | Mike wrote: > Hi! > > It's not really D related, I know, but I don't know where else to ask. > > So: I've got this little class that measures in/out time of threads with the rdtsc assembler opcode. The relevant thread gets started periodically, takes time of start in[t] at the entry point and time of exit out [t] with "scope (exit) ...". > > This gives me the following measurments: > > in[t] // thread entered (current iteration) > out[t] // thread exited (current iteration) > in[t-1] // thread entered (last iteration) > > And the following formula: > > cpuload = 100 * (out[t] - in[t]) / (in[t] - in[t-1]); > > to get the cpu load in %. > > Now I've tested this and I'm not quite sure. The results are at least somewhat reasonable, although they seem to be double the real value (I've got a dual core system) so that might explain that. > > But before guessing around I thought I'll ask here if this way of measuring is completely wrong or if there's a better way to do that. > > -Mike > RDTSC is no longer safe on multicore systems. Wikipedia has some notes on it: http://en.wikipedia.org/wiki/RDTSC | |||
December 14, 2007 Re: Measuring CPU load | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Mike | Reply to mike,
> Hi!
>
> It's not really D related, I know, but I don't know where else to ask.
>
> So: I've got this little class that measures in/out time of threads
> with the rdtsc assembler opcode. The relevant thread gets started
> periodically, takes time of start in[t] at the entry point and time
> of exit out [t] with "scope (exit) ...".
>
> This gives me the following measurments:
>
> in[t] // thread entered (current iteration)
> out[t] // thread exited (current iteration)
> in[t-1] // thread entered (last iteration)
> And the following formula:
>
> cpuload = 100 * (out[t] - in[t]) / (in[t] - in[t-1]);
>
this is only valid if the thread is not context switched.
the ony reliable way to get CPU loads I can think of would be to ask the OS.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply