问个SMP suspend的问题
9 messages
Li Yang-R58472 <[email protected]> Tue, Mar 17, 2009 at 5:11 PM
关于多处理器的电源管理里有一个疑问,不知道有没有研究过的同学可以帮助解答或者讨 论一下?

SMP在进入suspend(standby)模式的时候,各平台通用的电源管理代码会先把除了引导cpu以外的其他cpu都关掉, 然后引导cpu自己再进入睡眠。当睡眠结束的时候,引导cpu会从进入睡眠的地方继续执行,而其他cpu则要重新启动。

我的疑问是,既然进入suspend状态后,cpu可以保留休眠前的状态。那么为什么不能让非引导cpu也从休眠的地方继续,而 是要有个停掉和重启的过程。这么做有什么特殊的考虑或者不这么做有什么难以克服的困难么?

- Leo
_______________________________________________
Linux 内核开发中文邮件列表
[email protected]
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org

marywangran <[email protected]> Tue, Mar 17, 2009 at 8:03 PM
To: Li Yang-R58472 <[email protected]>
完全可以,不过内核没有那么做,你想想机器要suspend的时候,每个 cpu上都在执行任意的任务,有的在内核空间,有的在用户空间,有的在处理中断,情况及其复杂,因此linux使用更简单的方式,就 是先等待其它的cpu都开始执行idle,也就是说不再执行用户任务和内核线程,然后再suspend,此时其它的cpu都在执行 idle,那么保存idle的状态有什么意义呢?因此就重新启动了。再一个想想机器刚启动时也是一个cpu先启动然后带动别的cpu启 动的,一切都是为了简单




在2009-03-17?17:11:47,"Li?Yang-R58472"?<[email protected]>?写道:
[Quoted text hidden]

Bob <[email protected]> Wed, Mar 18, 2009 at 10:08 AM
Cc: 中文内核邮件列表 <[email protected]>


>
> 完全可以,不过内核没有那么做,你想想机器要suspend的时候,每个cpu上都在执行任意的任务,有的在内核空间,有 的在用户空间,有的在处理中断,情况及其复杂,因此linux使用更简单的方式,就是先等待其它的cpu都开始执行idle,也 就是说不再执行用户任务和内核线程,然后再suspend,此时其它
的cpu都在执行idle,那么保存idle的状态有什么意义呢?因此就重新启动了。再一个想想机器刚启动时也是一个cpu先启动然 后带动别的cpu启动的,一切都是为了简单
>

搭贴问一下.要等待其它的cpu都开始执行idle.是要在调度中做手脚吗?
load_balance中把别的CPU上的进程移到引导CPU.不然别的CPU可能一直都不会idle

>
>
>
> 在2009-03-17?17:11:47,"Li?Yang-R58472"??写道:
>>关于多处理器的电源管理里有一个疑问,不知道有没有研 究过的同学可以帮助解答或者讨论一下??
>>
>>SMP在进入suspend(standby)模式的时候,各平台通用的电源管理代码会先把除了引导cpu以外的其他cpu都 关掉,然后引导cpu自己再进入睡眠。当睡眠结束的时候,引导cpu会从进入睡眠的地方继续执行,而其他cpu则要重新启动。
>>
>>我的疑问是,既然进入suspend状态后,cpu可以保留休眠前的状态。那么为什么不能让非引导cpu也从休眠的 地方继续,而是要有个停掉和重启的过程。这么做有什么特殊的考虑或者不这么做有什么难以克服的困难么?
>>
>>-?Leo
_________________________________________________________________
More than messages–check out the rest of the Windows Live™.
http://www.microsoft.com/windows/windowslive/
[Quoted text hidden]

marywangran <[email protected]> Wed, Mar 18, 2009 at 10:16 AM
Cc: 中文内核邮件列表 <[email protected]>
将cpu的状态设为DEAD的话,load_balance就不会把进程调度到该 cpu上了,另外该cpu要死前要用linux的通知链进行通知,这样可以保证它在一个干净的环境死去,另外为了使得它尽快死去,就 设置它的优先级很高就可以了





在2009-03-18 10:08:26,Bob <bo-[email protected]>  写道:
[Quoted text hidden]

Miao Xie <[email protected]> Wed, Mar 18, 2009 at 10:21 AM
To: marywangran <[email protected]>
on 2009-3-17 20:03 marywangran wrote:
> 完全可以,不过内核没有那么做,你想想机器要suspend的时候,每个cpu上都在执行任意的任务,有的在内核空间,有 的在用户空间,有的在处理中断,情况及其复杂,因此linux使用更简单的方式,就是先等待其它的cpu都开始执行idle,也 就是说不再执行用户任务和内核线程,然后再suspend,此时其它的cpu都在执行idle,那么保存idle的状态有什么意义 呢?因此就重新启动了。再一个想想机器刚启动时也是一个cpu先启动然后带动别的cpu启动的,一切都是为了简单
>

这位仁兄没有明白Leo的意思。

我想Leo所说的问题应该是ACPI规范所规定的,而不是因为实现上有什么困难。

Intel的Patrick Mochel在《The State of Linux Power Management 2006》提到standby模式对应ACPI中的S1状态,
那么我想ACPIspec30.pdf中第15.1.1章节可能能解释Leo的疑惑。

#我对这个只是科普水平,只能提供这些信息
[Quoted text hidden]

Jike Song <[email protected]> Wed, Mar 18, 2009 at 10:28 AM
2009/3/18 Miao Xie <[email protected]>:
> 我想Leo所说的问题应该是ACPI规范所规定的,而不是因 为实现上有什么困难。
>
> Intel的Patrick Mochel在《The State of Linux Power Management 2006》提到standby模式对应ACPI中的S1状态,
> 那么我想ACPIspec30.pdf中第15.1.1章节可能能解释Leo的疑惑。

规范没说多处理器的AP应该怎么样啊,反倒给人感觉所有的processor都是可以不停止的。
standby对应S1,在Documentation/power/state.txt里有文档。
[Quoted text hidden]

Li Yang-R58472 <[email protected]> Wed, Mar 18, 2009 at 11:49 AM
To: Huang Ying <[email protected]>
> On Tue, 2009-03-17 at 17:11 +0800, Li Yang-R58472 wrote:
> > 关于多处理器的电源管理里有一个疑问,不知道有没有研究过的同学可以帮助解
> > 答或者讨论一下?
> >
> > SMP在进入suspend(standby)模式的时候,各平台通用的电源管理代码会先把除
> > 了引导cpu以外的其他cpu都关掉,然后引导cpu自己再进入睡眠。当睡眠结束的
> > 时候,引导cpu会从进入睡眠的地方继续执行,而 其他cpu则要重新启动。
> >
> > 我的疑问是,既然进入suspend状态后,cpu可以保留休眠前的状态。那么为什么
> > 不能让非引导cpu也从休眠的地方继续,而是要有个停掉和重启的过程。这么做
> > 有什么特殊的考虑或者不这么做有什么难以克服的困难么?
> >
> 至少对于x86平台,进入suspend状态后CPU硬件不能保留休眠前的状态。保 留和恢
> 复状态是由软件进行的。
>
> 参见arch/x86/kernel/acpi/sleep.c中的acpi_save_state_mem
>
> 据我所知,至少一部分mips CPU也不能由CPU硬件保留睡眠前的状态。

PowerPC的“mem”休眠同样也不是由硬件来进行状态保存和恢复的,状态恢复是在唤醒睡眠的中断处理程序中进行。 不过“standby”休眠应该基本上cpu的状态还会保留吧? 我猜x86也差不多。 那对于standby就可以不停掉非引导cpu了吗? 这样Linux里面应该区别对待才更好。 另外,即使是对于“mem”休眠,非引导cpu应该也是可以通过软件保存和恢复状态,这样 还是比重新初始化一遍简单很多吧?
[Quoted text hidden]

Lai Jiangshan <[email protected]> Wed, Mar 18, 2009 at 4:48 PM
To: Li Yang-R58472 <[email protected]>
Li Yang-R58472 wrote:
> 关于多处理器的电源管理里有一个疑问,不知道有没有研究过的同学可以帮助解答或者讨论一下?
>
> SMP在进入suspend(standby)模式的时候,各平台通用的电源管理代码会先把除了引导cpu以外的其他cpu都 关掉,然后引导cpu自己再进入睡眠。当睡眠结束的时候,引导cpu会从进入睡眠的地方继续执行,而其他cpu则要重新启动。
>
> 我的疑问是,既然进入suspend状态后,cpu可以保留休眠前的状态。那么为什么不能让非引导cpu也从休眠的地方继 续,而是要有个停掉和重启的过程。这么做有什么特殊的考虑或者不这么做有什么难以克服的困难么?
>

我认为这是因为suspend不必要在乎性能, 所以就使用cpu_hotplug的代码
已经开发了这么长时间cpu_hotplug的代码, 为何不用呢.

LZ已经在社区上问了, 期待有好的答案.
[Quoted text hidden]

Ming Lei <[email protected]> Wed, Mar 18, 2009 at 5:31 PM
To: Li Yang-R58472 <[email protected]>
2009/3/17 Li Yang-R58472 <[email protected]>:
> 关于多处理器的电源管理里有一个疑问,不知道有没有研究过的 同学可以帮助解答或者讨论一下?
>
> SMP在进入suspend(standby)模式的时候,各平台通用的电源管理代码会先把除了引导cpu以外的其他cpu都 关掉,然后引导cpu自己再进入睡眠。当睡眠结束的时候,引导cpu会从进入睡眠的地方继续执行,而其他cpu则要重新启动。
>
> 我的疑问是,既然进入suspend状态后,cpu可以保留休眠前的状态。那么为什么不能让非引导cpu也从休眠的地方继 续,而是要有个停掉和重启的过程。这么做有什么特殊的考虑或者不这么做有什么难以克服的困难么?

1, non-boot CPU也可以看作一个device, down掉应该是很正常的, 似乎就是suspend
完其他device后就down掉non-boot CPU了;

2, down掉non-boot CPU, 应该可以更好的降低功耗.
(没怎么看PM的code, 随便一点想法)

>

Reply via email to