[linux][intel]linux对intel c-state和p-state的支持分析

前言: 前文《[qemu][acpi]从虚拟化看ACPI》中,介绍了ACPI的大概逻辑,以及ACPI sleep的S1,S2,S3(STR),S4(STD),S5状态。 关于节电,intel提供了c-state和p-state的CPU级别的控制,linux也对其进行了支持。 分析: 1,c-state 关于c-state的详细解释,参考intel的文档https://software.intel.com/en-us/articles/power-management-states-p-states-c-states-and-package-c-states

大意是说,intel提供了per-cpu的级别的c-state控制,在不同的控制级别下,级别越深,则越省电,同时也意味着恢复到c0级别需要的时间越多。 结合intel官方的图片:

上面case 1,在一段相对较长的时间内,都比较空闲,隔了一段时间内,出现了下一次的interrupt。 在case 2里面,同样的时间间隔内,出现了多次的指令运行。 因为从c6恢复过来需要的延迟比较高,所以在case 1的情况下,更适合深度c-state。 2,linux对c-state的支持 我们都知道,top看到的cpu使用率里面,idle就是统计cpu执行idle的时间。在kernel中调度的时候,如果发现没有task处于running状态,则会执行idle。idle在执行的时候,可以选择更加深度c-state用来节电。 linux-4.14/drivers/idle/vim intel_idle.c中,定义了多个cpuidle_state结构,对应不同的cpu架构。下图选自haswell架构:

不同级别的c-state对应了不同exit_latency。不同的cpu对c-state的支持也不尽相同。 查询intel SDM或者看这个文件,都可以看出来支持情况。整体来看,越新的架构,支持的越好。 3,intel_idle.max_cstate 默认情况下,会使用最深级别的c-state。对于haswell来说,就是c10。 intel_idle模块提供了一个可配置的参数,在grub的启动参数中可以配置intel_idle.max_cstate=5这样类似的参数即可。 对于cpu密集的延迟敏感型应用来说,可以使用更低的intel_idle.max_cstate配置。intel_idle.max_cstate的默认值是9,如果是0,则表示关闭intel idle。 4,moniotr/mwait 代码linux-4.14/arch/x86/include/asm/mwait.h中,

mwait idle的实现主要由monitor和mwait组合实现的。

monitor函数用asm实现,结合intel SDM:

这里的opcode用byte填写的,可能是asm不支持monitor指令(或者为了兼容低板本的编译器)。即使用monitor来监控idle task的flag。 再来看mwait指令:

使用上文提到的c-state的参数,经过计算,放到eax中,调用mwait指令。

同样也是用byte填写opcode。 综上,结合SDM和上文的monitor参数,可以判断出来:在执行mwait期间,会陷入到c-state(具体的级别和cpu型号,intel_idle.max_cstate有关)中,如果遇到了irq或者idle的flag被修改,则会唤醒cpu。相应irq,或者重新调度。

原文发布于微信公众号 - AlwaysGeek(gh_d0972b1eeb60)

原文发表时间:2018-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏不会写文章的程序员不是好厨师

日志那些事儿——由一次bug引发的思考-client jar应该如何输出日志

前面几篇“日志那些事儿”讲解了日志的重要性和相关使用。以slf4j+logback的使用为例,我们的步骤为:

1164
来自专栏用户2442861的专栏

第一章 Web MVC简介 —— 跟开涛学SpringMVC

1、  Web浏览器(如IE)发起请求,如访问http://sishuok.com

1121
来自专栏我的小碗汤

nginx请求连接限制笔记

当时爬取时当并发过大的时候,请求就会出现卡死的情况。其实这可能就是珍爱网对请求和连接进行了限制。

1163
来自专栏服务端技术杂谈

分布式系统中所说的幂等性

大型网站应用架构中,越来越多的SOA或Restful的web api的流行归功于http协议。 幂等性定义 Http协议涉及到一种重要性质:幂等性。 Http方...

3184
来自专栏QQ音乐技术团队的专栏

全民K歌后台编译优化:从40分钟到30秒

编者注 :全民K歌上线1年半的从0发展到1.5亿,用户越来越多,后台代码库越来越大,编译速度也与日俱慢,编译一下整个工程需要30-40分钟,如何实现秒编至关重要...

3987
来自专栏腾讯大讲堂的专栏

全民K歌后台编译优化:从40分钟到30秒

编者注 全民K歌上线1年半的从0发展到1.5亿,用户越来越多,后台代码库越来越大,编译速度也与日俱慢,编译一下整个工程需要30-40分钟,如何实现秒编至关重要。...

3895
来自专栏码神联盟

碎片化 | 第四阶段-55-OpenSessionInViewFilter组件配置解决session问题-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/s05686to2z4.html OpenSessionInViewFi...

33411
来自专栏IT技术精选文摘

带着问题学习分布式系统之数据分片

分布式系统(尤其是分布式存储系统)需要解决的两个最主要的问题,即数据分片和数据冗余,下面这个图片形象生动的解释了其概念和区别: ? 其中数据即A、B属于数据分片...

4986
来自专栏北京马哥教育

马哥金牌分享 | 十分钟学会用Django快速搭建一个blog

本文是由马哥教育金牌讲师小智的文字分享《如何快速搭建一个博客》整理而来。 ---- 1.django简介 Django是一个开放源代码的Web应用框架,由Py...

3134
来自专栏技术控

什么是IPFS / IPNS?

  IPFS,即星际文件系统,是一个内容可寻址的网络。这意味着,您不是要求网络查询特定网站或域名(例如www.ipfsfirst.com),而是要求提供特定内容...

5541

扫码关注云+社区

领取腾讯云代金券