Messages in this thread | | | From | "Luck, Tony" <> | Subject | RE: [PATCH 4/6] x86/mbm: Memory bandwidth monitoring event management | Date | Mon, 7 Mar 2016 23:27:26 +0000 |
| |
>> + bytes = mbm_current->interval_bytes * MSEC_PER_SEC; >> + do_div(bytes, diff_time); >> + mbm_current->bandwidth = bytes; >> + mbm_current->interval_bytes = 0; >> + mbm_current->interval_start = cur_time; >> + } >>> + >> + return mbm_current; >> +} > > How does the above time tracking deal with the event not actually having > been scheduled the whole time?
That's been the topic of a few philosophical debates ... what exactly are we trying to say when we report that a process has a "memory bandwidth" of, say, 1523 MBytes/s? We need to know both the amount of data moved and to pick an interval to measure and divide by. Does it make a difference whether the process voluntarily gave up the cpu for some part of the interval (by blocking on I/O)? Or did the scheduler time-slice it out to run other jobs?
The above code gives the average bandwidth across the last interval (with a minimum interval size of 100ms to avoid craziness with rounding errors on exceptionally tiny intervals). Some folks apparently want to get a "rate" directly from perf. I think many folks will find the "bytes" counters more helpful (where they control the sample interval with '-I" flag to perf utility).
-Tony
| |