Re: [RFC] Unprepare callback for cpuidle_device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hello Vaidy,
           doesn't tick_nohz_get_sleep_length just return ts->sleep_length

variable value from the tick_sched structure for that cpu ?

The calculation of this sleep_length variable happens in function

tick_nohz_stop_Sched_tick after call to function get_next_timer_interrupt ??

thanks,
amar



> * asinghal@xxxxxxxxxxxxxx <asinghal@xxxxxxxxxxxxxx> [2011-07-11 10:26:56]:
>
>> hello Deepthi,
>>           please see my replies inline:
>>
>>
>> > Hi Amar,
>> >
>> > On Friday 08 July 2011 01:22 AM, asinghal@xxxxxxxxxxxxxx wrote:
>> >> Hello Trinabh,
>> >>               i cannot use the enter callback due to the following
>> >> reason:
>> >>
>> >> the residency calculation(tick)nohz_get_sleep_length) and the idle
>> state
>> >> selection happens in the menu governor. The enter callback is called
>> >> with
>> >> the selected state.
>> >
>> >   One would first execute prepare then call select and enter .
>> >   So in the newer proposed code, there is no prepare routine. One
>> would
>> >   just execute select() and then enter() (Prepare functionality is
>> part of
>> > the
>> >   enter routine itself) Is it not possible to cancel the timer,
>> >   calculate the execute nohz_get_sleep in enter routine again,
>> >   then select the idle state depending on the time . Automatically
>> promote
>> > or demote
>> >   idle state based on the latest value returned in the driver ?
>> >
>> Cancelling the timer and calculating the sleep length again in the enter
>> callback is possible; but what does not make sense is calling the select
>> routine again ; definitely the select routine of the governor needs to
>> be
>> called only once.  And actually, the sleep length is calculated in the
>
> Can you promote the idle state within the driver based on the new
> information provided by tick_nohz_get_sleep_length() after canceling
> the timer?  This will be a hack... but better than calling select()
> again.  You are right, we need to design in such a way that select()
> makes the right choice.
>
>> function tick_nohz_stop_sched_tick.( so shld the prepare callback be
>> moved
>> before that in cpu_idle ??)
>
> The prepare callback is in the right place now... if you cancel the
> timer in prepare, then subsequent select() which calls
> tick_nohz_get_sleep_length() will get the correct idle time.  Your
> problem is in restarting the timer in case we abort the idle.  The
> current place of prepare is fine and more over we are heading in the
> direction to deprecate the prepare itself.
>
>> I am looking for a nice way to cancel and restart the high resolution
>> timers in the idle code; even if that means rearranging the cpu_idle
>> code.
>
> Slight difference, you can cancel and restart within the driver, the
> problem is that you want the ->select() to be executed _after_
> canceling your hrtimer because it will predict idle much shorter
> otherwise.  This is where the cpuidle framework should help.
>
>> Another way i was looking to solve this issue was add deferrable feature
>> to HR timers; if someone has thoughts on that please chime in.
>
> This seems to be a much better idea, where the
> tick_nohz_get_sleep_length() can automatically skip your deferred
> hrtimer with a hope that it will be canceled.  We don't have
> a mechanism to actually defer it.
>
> You can try to add deferred flag in hrtimer_mode { } similar to how
> pinned was added.  Enhance tick_nohz_get_sleep_length() to skip over
> deferred hrtimer as well.
>
> But the number of users for this feature will be very little to
> justify the complexity.
>
> --Vaidy
>
>
>


_______________________________________________
linux-pm mailing list
linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/linux-pm


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux