Re: [RFC/RFT][PATCH v6] cpuidle: New timer events oriented governor for tickless systems

From: Rafael J. Wysocki
Date: Thu Dec 06 2018 - 04:11:56 EST


On Thu, Dec 6, 2018 at 12:06 AM Doug Smythies <dsmythies@xxxxxxxxx> wrote:
>
> On 2018.12.03 03:48 Rafael J. Wysocki wrote:
>
> >>> There is an additional issue where if idle state 0 is disabled (with the above suggested code patch),
> >>> idle state usage seems to fall to deeper states than idle state 1.
> >>> This is not the expected behaviour.
> >>
> >> No, it isn't.
> >>
> >>> Kernel 4.20-rc3 works as expected.
> >>> I have not figured this issue out yet, in the code.
> >>>
> >>> Example (1 minute per sample. Number of entries/exits per state):
> >>> State 0 State 1 State 2 State 3 State 4 Watts
> >>> 28235143, 83, 26, 17, 837, 64.900
> >>> 5583238, 657079, 5884941, 8498552, 30986831, 62.433 << Transition sample, after idle state 0 disabled
> >>> 0, 793517, 7186099, 10559878, 38485721, 61.900 << ?? should have all gone into Idle state 1
> >>> 0, 795414, 7340703, 10553117, 38513456, 62.050
> >>> 0, 807028, 7288195, 10574113, 38523524, 62.167
> >>> 0, 814983, 7403534, 10575108, 38571228, 62.167
> >>> 0, 838302, 7747127, 10552289, 38556054, 62.183
> >>> 9664999, 544473, 4914512, 6942037, 25295361, 63.633 << Transition sample, after idle state 0 enabled
> >>> 27893504, 96, 40, 9, 912, 66.500
> >>> 26556343, 83, 29, 7, 814, 66.683
> >>> 27929227, 64, 20, 10, 931, 66.683
> >>
> >> I see.
> >>
> >> OK, I'll look into this too, thanks!
> >
> > This probably is the artifact of the fix for the teo_find_shallower_state()
> > issue.
> >
> > Anyway, I'm not able to reproduce this with the teo_find_shallower_state() issue
> > fixed differently.
>
> I am not able to reproduce with your teo_find_shallower_state(), or teo V 7,
> either. Everything is graceful now, as states are disabled:
> (10 seconds per sample. Number of entries/exits per state):
>
> State 0 State 1 State 2 State 3 State 4 Watts
> 0, 6, 4, 1, 414, 3.700
> 2, 4, 30, 3, 578, 3.700 << No load
> 168619, 37, 39, 4, 480, 5.600 << Transition sample
> 4643618, 45, 8, 1, 137, 61.200 << All idle states enabled
> 4736227, 40, 3, 5, 111, 61.800
> 1888417, 4369314, 25, 2, 89, 62.000 << Transition sample
> 0, 7266864, 9, 0, 0, 62.200 << state 0 disabled
> 0, 7193372, 9, 0, 0, 62.700
> 0, 5539898, 1744007, 0, 0, 63.500 << Transition sample
> 0, 0, 8152956, 0, 0, 63.700 << states 0,1 disabled
> 0, 0, 8015151, 0, 0, 63.900
> 0, 0, 4146806, 6349619, 0, 63.000 << Transition sample
> 0, 0, 0, 13252144, 0, 61.600 << states 0,1,2 disabled
> 0, 0, 0, 13258313, 0, 61.800
> 0, 0, 0, 10417428, 1984451, 61.200 << Transition sample
> 0, 0, 0, 0, 9247172, 58.500 << states 0,1,2,3 disabled
> 0, 0, 0, 0, 9242657, 58.500
> 0, 0, 0, 0, 9233749, 58.600
> 0, 0, 0, 0, 9238444, 58.700
> 0, 0, 0, 0, 9236345, 58.600
>
> For reference, this is kernel 4.20-rc5 (with your other proposed patches):
>
> State 0 State 1 State 2 State 3 State 4 Watts
> 0, 4, 8, 6, 426, 3.700
> 1592870, 279, 149, 96, 831, 21.800
> 5071279, 154, 25, 6, 105, 61.200
> 5095090, 78, 21, 1, 86, 61.800
> 5001493, 94, 30, 4, 101, 62.200
> 616019, 5446924, 5, 3, 38, 62.500
> 0, 6249752, 0, 0, 0, 63.300
> 0, 6293671, 0, 0, 0, 63.800
> 0, 3751035, 2529964, 0, 0, 64.100
> 0, 0, 6101167, 0, 0, 64.500
> 0, 0, 6172526, 0, 0, 64.700
> 0, 0, 6163797, 0, 0, 64.900
> 0, 0, 1724841, 9567528, 0, 63.300
> 0, 0, 0, 13349668, 0, 62.700
> 0, 0, 0, 13360471, 0, 62.700
> 0, 0, 0, 13355424, 0, 62.700
> 0, 0, 0, 8854491, 3132640, 61.600
> 0, 0, 0, 0, 9302824, 59.000
> 0, 0, 0, 0, 9303561, 58.900
> 0, 0, 0, 0, 9313397, 59.000
> 0, 0, 0, 0, 9333944, 59.000
>
> Test kernel:
> 94a976a cpuidle: New timer events oriented governor for tickless systems <<< V7
> 935be4e cpuidle: poll_state: Disregard disable idle states
> e3670df cpuidle: Add 'high' and 'low' idle state metrics
> dfa672c Documentation: admin-guide: PM: Add cpuidle document
> 2595646 Linux 4.20-rc5
>
> Reference kernel:
> f418681 cpuidle: poll_state: Disregard disable idle states
> 1be0e87 cpuidle: Add 'high' and 'low' idle state metrics
> 279ec1d Documentation: admin-guide: PM: Add cpuidle document
> 2595646 Linux 4.20-rc5

Thanks for the data!

I seem to see an improvement with teo as it draws less power in the
corresponding bins, roughly speaking.