关于系统睡眠S3和休眠S4的过程以及疑问

[复制链接]
SW_Brant 发表于 5 天前 | 显示全部楼层 |阅读模式
最近在整理s3和s4的基本过程,有些自己的理解,还有一些疑问,分别列出来求大神解答:
对于S3的过程,个人认为过程如下:
    1. OS下终端用户下达进入S3和S4的指令,然后OS接到响应,(OS是否要做数据暂存?)
    2. OS接到相应调用与BIOS的接口,出发SMI,填写SleepType类型
    3. EC检测到SleepType被置起来,开始准备走相应的下电时许,最终只保留内存供电,其他部分不送电

以上过程比较简略,希望熟悉的大神继续补充,同时有以下疑问:
    1. OS接到S3指令,需要做什么动作嘛?还是直接通知BIOS去做SMI
    2. S3虽然内存供电,下次唤醒,也是直接使用内存中的数据,但是为了防止异常断电,应该是有种机制,将内存中的数据在HD中做备份的,这个任务是谁做的?OS或BIOS?
    3. S3状态下,只有内存供电,CPU也是没电的,请为下次重启唤醒,BIOS是从SEC开始跑,到PEI去检测相应状态,还是直接从PEI阶段开始跑?







上一篇:请BIOS 高级工程看过来
下一篇:2019年3月15日签到记录贴
1点0 发表于 4 天前 | 显示全部楼层
本帖最后由 1点0 于 2019-3-15 07:01 编辑

非大神,试着回答, :)
    1. OS下终端用户下达进入S3和S4的指令,然后OS接到响应,(OS是否要做数据暂存?)
        要看你怎么定义的数据缓存, 如果是S3, 对于DRAM 里面的内容,不需要. 一般来说 OS 的kernel 都会提供给driver 来注册 sleep/resume 的callback. Linux OS 提供的SPI 是register_pm_notifier; MacOS 提供的SPI是 registerPowerDriver, etc.  OS终端下指令以后, OS会第一个知道, 那么它会先freeze应用程序; 接下来对各个driver 发通知system power status change, 各个driver 自己干自己的, 大部分情况下需要存一些自己关键的数据; 比如PCI driver, 需要保存各个bridge 的大部分寄存器. 再比如WiFi 的,需要保存连接credit 等等;  如果是S4, OS 会扫自己的VM page table 然后压缩写到HD.
接下来要做的事情还有很多,比如OS 是multiple thread 支持MP的,需要睡掉所有的AP 只保留BSP, 需要设置wake source; 需要清GPE 等等.

    2. OS接到相应调用与BIOS的接口,出发SMI,填写SleepType类型
    并不完全需要触发SMI. OS 可以直接通过ACPICA 写sleeptype, 至于是否需要设置 IO trap 让写sleep type 和sleep register 触发SMI, 是BIOS 的选择, 大部分OS 如Linux, MacOS 都不需要SMI 了.


    3. EC检测到SleepType被置起来,开始准备走相应的下电时许,最终只保留内存供电,其他部分不送电
    你的问题本身就有问题:
     - EC 没有办法检测SleepType被置起来, EC只能通过SLP_S3/S4 的pin 来知道x86 的状态;
     - EC 需要在探测到x86的状态后走power sequence, 断掉部分的power rail;
     - 内存是供电的, DRAM 被切到了self refresh. 其他部分有的也需要电, 比如A rail, 这个看你的原理图和Intel EDS就知道哪些电需要保留,哪些不需要. 哪些需要也是动态的. 比如你要支持WOL, 那么PHY 必须有电, MAC 可以断电; 如果不需要WOL,那么都可以切掉.
      

以上过程比较简略,希望熟悉的大神继续补充,同时有以下疑问:
    1. OS接到S3指令,需要做什么动作嘛?还是直接通知BIOS去做SMI
    2. S3虽然内存供电,下次唤醒,也是直接使用内存中的数据,但是为了防止异常断电,应该是有种机制,将内存中的数据在HD中做备份的,这个任务是谁做的?OS或BIOS?
    3. S3状态下,只有内存供电,CPU也是没电的,请为下次重启唤醒,BIOS是从SEC开始跑,到PEI去检测相应状态,还是直接从PEI阶段开始跑?

回复

使用道具 举报

1点0 发表于 4 天前 | 显示全部楼层
继续答题: :)

  2. S3虽然内存供电,下次唤醒,也是直接使用内存中的数据,但是为了防止异常断电,应该是有种机制,将内存中的数据在HD中做备份的,这个任务是谁做的?OS或BIOS?
   你的问题本身又错了. S3 内存有电,  内存在self refresh. 内存的数据在HD中没有备份!  如果需要做备份那就成了S4, 这个时候内存数据是OS 自己压缩写到hibernate image 的.

  3. S3状态下,只有内存供电,CPU也是没电的,请为下次重启唤醒,BIOS是从SEC开始跑,到PEI去检测相应状态,还是直接从PEI阶段开始跑?
从SEC 的reset vector 开始.
CPU 没电的, 这个也不全对. CPU 里面的模块有很多. CPU core 是没电的,但是很多SA Ring 部分还得有电.

回复

使用道具 举报

Sam.Zhao 发表于 4 天前 | 显示全部楼层
第三个问题应该是从SEC阶段开始跑的。
心之所向,素履以往;生如逆旅,一苇以航。
回复

使用道具 举报

 楼主| SW_Brant 发表于 4 天前 | 显示全部楼层
1点0 发表于 2019-3-15 06:58
继续答题: :)

  2. S3虽然内存供电,下次唤醒,也是直接使用内存中的数据,但是为了防止异常断电,应该是 ...

感谢1点0大神的回复:
有以下问题,希望继续探讨下:
    1. OS接到指令和各个driver去通知,各个driver去存自己的关键数据,请问这部分数据是存在哪里,内存里?还是bios中?另外driver存储数据的过程需要有BIOS参与吗?
    2. 另外S3时内存数据不做备份,我自己的电脑有遇到过,进了S3,但是异常断电关机,开机后 之前打开的东西都还在,是什么原因。
    3. 进入S4,内存自己压缩数据到hibernate image中,这个应该是直接存放在HD中?
回复

使用道具 举报

1点0 发表于 8 小时前 | 显示全部楼层
1, 存在DRAM 里呀.
2, OS 也不傻, Windows 之前就有hybrid 模式,在S3 的时候也会写hibernate image, 防止s3你的这种情况.
3, 除了HD  还有别的地方吗?
回复

使用道具 举报

本版积分规则

QQ|Archiver|手机版|小黑屋|RD之家 - 研发工程师的伊甸园 ( 京ICP备18037383号 )
360导航 360安全浏览器 蚂蚁搜索 速搜全球 酷帝网站目录 搜狗导航 114啦网址导航

GMT+8, 2019-3-19 15:42

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表