On Mon, Dec 17, 2018 at 7:55 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > On Fri, Dec 14, 2018 at 09:15:06AM -0800, Suren Baghdasaryan wrote: > > The psi monitoring patches will need to determine the same states as > > record_times(). To avoid calculating them twice, maintain a state mask > > that can be consulted cheaply. Do this in a separate patch to keep the > > churn in the main feature patch at a minimum. > > > > Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> > > --- > > include/linux/psi_types.h | 3 +++ > > kernel/sched/psi.c | 29 +++++++++++++++++++---------- > > 2 files changed, 22 insertions(+), 10 deletions(-) > > > > diff --git a/include/linux/psi_types.h b/include/linux/psi_types.h > > index 2cf422db5d18..2c6e9b67b7eb 100644 > > --- a/include/linux/psi_types.h > > +++ b/include/linux/psi_types.h > > @@ -53,6 +53,9 @@ struct psi_group_cpu { > > /* States of the tasks belonging to this group */ > > unsigned int tasks[NR_PSI_TASK_COUNTS]; > > > > + /* Aggregate pressure state derived from the tasks */ > > + u32 state_mask; > > + > > /* Period time sampling buckets for each state of interest (ns) */ > > u32 times[NR_PSI_STATES]; > > > > Since we spend so much time counting space in that line, maybe add a > note to the Changlog about how this fits. Will do. > Also, since I just had to re-count, you might want to add explicit > numbers to the psi_res and psi_states enums. Sounds reasonable. > > + if (state_mask & (1 << s)) > > We have the BIT() macro, but I'm honestly not sure that will improve > things. I was mimicking the rest of the code in psi.c that uses this kind of bit masking. Can change if you think that would be better.