ARM: idle sleep time for hotplugged cpu
Hello,
I was looking at the arch/arm/process.c:cpu_die, I was wondering why we do not exit from NOHZ for a hotplugged/offline cpu?
If I understand correctly an offlined cpu too will enter NOHz(tick_nohz_idle_enter) and update the idle_entrytime. The cpu will die and it will reenter the idle thread and update idle_entrytime onces it comes back online and only then it will exit NOHz, but time spent in sleep idle_sleeptime will be wrongly calculated.
void cpu_idle(void)
{
.....
/* endless idle loop with no priority at all */
while (1) {
idle_notifier_call_chain(IDLE_START);
tick_nohz_idle_enter();--> Offline CPU entering NOHZ
rcu_idle_enter();
while (!need_resched()) {
#ifdef CONFIG_HOTPLUG_CPU
if (cpu_is_offline(smp_processor_id()))cpu_die(); ---> CPU becomes offline and re-enter the idle thread without exiting from NOHZ,
#endif
...
}
Is it a good idea to exit from NOHZ before cpu_die() or it could be achieved in some other way? Please provide your comments.
Signature · 4 lines
Thanks & Regards, Taniya Das. QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation.
Quoted 2 lines · Taniya Das
I was looking at the arch/arm/process.c:cpu_die, I was wondering why we do not exit from NOHZ for a hotplugged/offline cpu?
Offlined CPUs are not supposed to just 'return' from cpu_die(), and in actual fact they can't.
Quoted 6 lines · Russell King - ARM Linux
Quoted 2 lines · Taniya Das
I was looking at the arch/arm/process.c:cpu_die, I was wondering why we do not exit from NOHZ for a hotplugged/offline cpu?
Offlined CPUs are not supposed to just 'return' from
cpu_die(), and in actual fact they can't.
Although an offline CPU will not come back into the idle thread by returning from cpu_die(), I believe the question about exiting nohz mode before cpu_die() still stands.
Quoted 1 line
From arch/arm/process.c:cpu_idle() it appears a CPU could enter
pm_idle() for a while (in nohz mode), then execute the inner loop again and call cpu_die(). Is there the potential for cpu idle time accounting to get messed up here by not exiting nohz mode prior to the cpu dying, so that missed ticks from nohz are properly accounted for?
thanks,
Steve
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Quoted 11 lines · Steve Muckle
Quoted 6 lines · Russell King - ARM Linux
Quoted 2 lines · Taniya Das
I was looking at the arch/arm/process.c:cpu_die, I was wondering why we do not exit from NOHZ for a hotplugged/offline cpu?
Offlined CPUs are not supposed to just 'return' from
cpu_die(), and in actual fact they can't.Although an offline CPU will not come back into the idle thread by returning from
cpu_die(), I believe the question about exiting nohz mode beforecpu_die()still stands.
Well, that depends on the design of all that. I don't know that, but what I do know is we're doing exactly the same as x86 which I presume is correct.
Quoted 5 lines
Quoted 1 line
From arch/arm/process.c:cpu_idle() it appears a CPU could enter
pm_idle()for a while (in nohz mode), then execute the inner loop again and callcpu_die(). Is there the potential for cpu idle time accounting to get messed up here by not exiting nohz mode prior to the cpu dying, so that missed ticks from nohz are properly accounted for?
Why does the idle time matter if the CPU has been taken offline?
In any case, I think this is a question for the CPU idle people; it's not a feature that I've ever knowingly used or have any interest in using at the moment.