Messages in this thread | | | Subject | Re: [RFC][PATCH] perf: Rewrite enabled/running timekeeping | From | Alexey Budankov <> | Date | Mon, 4 Sep 2017 17:56:06 +0300 |
| |
On 04.09.2017 15:08, Peter Zijlstra wrote: > On Mon, Sep 04, 2017 at 01:46:45PM +0300, Alexey Budankov wrote: >>> So the below completely rewrites timekeeping (and probably breaks >>> world) but does away with the need to touch events that don't get >>> scheduled. >> >> We still need and do iterate thru all events at some points e.g. on context switches. > > Why do we _need_ to?
We do so in the current implementation with several tstamp_* fields.
> On ctx switch we should stop iteration for a PMU once we fail toschedule an event, same as for rotation> >>> The basic idea is really simple, we have a single timestamp and >>> depending on the state we update enabled/running. This obviously only >>> requires updates when we change state and when we need up-to-date >>> timestamps (read). >> >> I would prefer to have this rework in a FSM similar to that below, >> so state transition and the corresponding tstamp, total_time_enabled >> and total_time_running manipulation logic would be consolidated in >> one place and adjacent lines of code. >> >> From the table below event->state FSM is not as simple as it may seem >> on the first sight so in order to avoid regressions after rework we >> better keep that in mind and explicitly implement allowed and disallowed >> state transitions. > > Maybe if we introduce something like CONFIG_PERF_DEBUG, but I fear that > for normal operation that's all fairly horrible overhead. > >> A I O E X D U >> >> A Te+,Tr+ Te+,Tr+ Te+,Tr+ Te+,Tr+ Te+,Tr+ Te+,Tr+ --- >> ts ts ts ts ts ts >> >> I Te+,ts Te+,ts Te+,ts Te+,ts Te+,ts Te+,ts --- >> >> O Te=0,Tr=0, Te=0,Tr=0, Te=0,Tr=0 Te=0,Tr=0 Te=0,Tr=0 Te=0,Tr=0 --- >> ts ts ts ts ts ts >> >> E Te=0,Tr=0, Te=0,Tr=0, Te=0,Tr=0 Te=0,Tr=0 Te=0,Tr=0 Te=0,Tr=0 --- >> ts ts ts ts ts ts >> >> X --- --- --- --- --- --- --- >> >> D --- --- --- --- --- --- --- >> >> U --- Te=0,Tr=0 Te=0,Tr=0 --- --- --- --- >> ts ts >> >> LEGEND: >> >> U - allocation, A - ACTIVE, I - INACTIVE, O - OFF, >> E - ERROR, X - EXIT, D - DEAD, > > Not sure we care about the different <0 values, they're all effectively > OFF.
We still need to care about proper initial state of timings when moving above >=0 state.
> > >
| |