加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 强制Intel Core i7 CPU暂时睡眠?

发布时间:2020-12-14 05:45:01 所属栏目:Windows 来源:网络整理
导读:我想让我的Core i7 CPU暂时进入睡眠状态,从批处理文件或可执行文件开始大约一毫秒左右. 我知道可以使用SetSuspendState引入睡眠,但我正在寻找一种解决方案,它不会让整个系统进入休眠状态,而只是瞬间处理CPU. CPU是Core i7 3632QM,OS是Windows 7和10. 谢谢 解
我想让我的Core i7 CPU暂时进入睡眠状态,从批处理文件或可执行文件开始大约一毫秒左右.

我知道可以使用SetSuspendState引入睡眠,但我正在寻找一种解决方案,它不会让整个系统进入休眠状态,而只是瞬间处理CPU.

CPU是Core i7 3632QM,OS是Windows 7和10.
谢谢

解决方法

根据你关于每30分钟击败某种关机的评论,听起来你需要整个CPU(所有核心)才能入睡.我们需要更多的细节来做更多的事情而不是猜测哪些睡眠状态将起到你的作用,哪些不起作用.

根据评论,可能需要ACPI S3睡眠. Ross关于支持S1睡眠的硬件的评论并未提及S2(CPU实际上已关闭),因此甚至可能无法仅关闭CPU.

因此,最好的办法是以编程方式查看睡眠/唤醒周期,这至少可以在某些硬件上实现.在Linux上,rtcwake command可以选择这样做.我假设它在启动睡眠之前将唤醒时间编程到BIOS的NVRAM中. (我认为只有少数常用的格式/位置用于存储它,因此很有可能在您的计算机上存储它.)

尝试谷歌搜索唤醒笔记本电脑在某个时间或某事找到Windows相当于rtcwake.我没有看任何热门歌曲,但看起来很有希望.

我不是这个系统电源状态管理的专家,但你可能需要系统输入an ACPI sleep state.S3是通常的“挂起RAM”;支持挂起的操作系统通常将此作为非休眠选项使用.

对于你的使用,也许S1或S2可以做(并且任何比这更小的东西,像CPU power-saving C-states可能是不够的,特别是不是只有每个核心的状态).

ACPI global sleep states (from Wikipedia).系统不需要实施所有级别.

> S1,Power on Suspend(POS):刷新处理器高速缓存,CPU停止执行指令.保持CPU和RAM的电源.未指示必须保持打开状态的设备可能已关闭.
> S2:CPU断电.脏缓存被刷新到RAM.
> S3,通常称为待机,休眠或挂起到RAM(STR):RAM保持通电状态. (但硬盘驱动器和其他所有功能都关闭)
> S4,休眠

我不会尝试编写Windows API函数调用来执行此操作.如果有一个程序要求Windows进入S1或S2状态(理想情况下是某种触发唤醒),我不会感到惊讶.

@RossRidge说HM70芯片组确实实现了S1睡眠(并暗示它不支持S2睡眠.)由于S1不会关闭CPU,它可能不会重置定时器.即使是假设的S2睡眠也可能无法解决问题,因为定时器可能在CPU外部和/或由BIOS管理.

存在用于对BIOS进行编程以在特定时间唤醒的软件.这是触发暂停的一种可能方式.因此,有可能编写一个脚本,在将来将唤醒时??间编程为2秒,然后启动睡眠.

@MargaretBloom评论说,“英特尔手册”第14章列举了所有的电源管理功能. (有关链接,请参阅x86标记维基).此外,通过使用SMM,可能有完全不同的解决方法.

re:你的your followup question被遗忘:

enter sleep state just momentarily,for one millisecond

1ms约为300万个核心时钟周期.这对于计算机而言并非暂时性,特别是从asm编程的角度来看.

你绝对不想手动编写程序集来进入这些状态.而是使用操作系统现有的ACPI接口.这是因为每个人都对your followup question的废话进行了贬低,这是很大一部分原因.

除了从mwait,pausehlt insns短的每个核心睡眠,操作系统需要知道发生了什么.有关暂停的更多信息,请参阅see this.无论如何都没有具体的指令可以进入更深的睡眠状态.通过写入MMIO空间中的设备寄存器来编程ACPI.

当所有内核同时进行HLT时,整个CPU可以机会性地关闭更多内容,直到下一个定时器或其他中断再次唤醒它(这或者至少与ACPI C状态有关,据我所知).但这在正常操作期间始终发生,因为现代操作系统在空闲的核心上运行HLT.你可以在这里做的唯一有趣的事情就是让CPU偶尔这样睡觉,即使系统正在运行一些CPU密集型进程. (例如,某些具有非空闲优先级的线程在循环中运行hlt).由于HLT是特权指令,因此需要内核线程或系统调用.您可能实际上无法提高系统空闲进程的优先级,因此它会从其他可运行进程中窃取时间.

这可能过于简单了:我最近没有查看内核空闲任务,看看当他们希望当前内核在下一个中断之前休眠时,他们是否仍然只运行HLT.有一段时间(当CPU电源管理处于起步阶段时),空闲循环用于运行其他一些东西以进入低功耗C状态.但HLT现在可能会这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读