当前位置:网站首页>性能优化|从ping延时看CPU电源管理
性能优化|从ping延时看CPU电源管理
2022-08-03 11:03:00 【51CTO】
前言
性能优化大师Brendan Gregg曾说:“性能问题可能来源于任何地方,包括系统中因你一无所知而不曾检查的地方”,CPU电源管理就是在性能优化过程中经常被忽略的地方。在这篇文章中,我们从一个简单的ping延迟出发,以小见大,一起了解CPU电源管理。
之前在项目中观测到一个奇怪的现象(如下图所示),在测试网络延迟时,从服务器A ping服务器B延时只有0.04ms左右,但是从服务器B ping服务器A延迟确有0.12ms左右,结果相差三倍多!而两台服务器是直连的,中间也没有经过路由器或交换机,那么延时差到底是怎么产生的呢?
在分析此问题时,我们将ping时延做一个简单的拆分,它包括了在链路中的传播时延和在服务器端的处理时延。我们首先判断下网络状况是否良好,用tcpdump分别在收发两端抓包,没有发现丢包、乱序等问题,速率也没有问题,网络状态良好。既然网络传输没有问题,那就重点分析下处理时延。
再来分析下抓到的ping报文,主要分析在两台服务器收到ICMP报文后发送回复报文的时间差,发现服务器A的回复时间更长。再使用ftrace分析代码层的执行时间,图1是服务器A的处理时间,图2是服务器B的处理时间,对比可见,服务器A的ICMP reply执行时间比服务器B要长。那什么会影响函数执行的时间呢?是CPU。
图1
图2
在观察服务器B ping服务器A的输出(图3)时发现,延时的变化范围很大,有时延时也很短。
图3
如图4所示,CPU的频率也是变化的,那么CPU频率是怎么变的又是因何而变,跟延迟的变化有关系吗?我们能否控制CPU频率的这种变化呢?要了解这些我们首先要知道CPU的变频和电源管理方面的知识。
图4
CPU的变频和电源管理
OS会根据工作负载选择工作频率和电压,当负载较低时(例如此问题的ping报文收发),会对CPU进行降压降频以节省用电。在大部分场景下,CPU并不需要7X24小时满负荷工作,为了省电和延长CPU的使用寿命就有了各种变频省电技术。其中常见的有以下几种:
■C states (Power states)
- 在空闲状态时,通过关闭不同子系统(时钟或者缓存等)达到不同省电状态。 关闭的组件越多,耗电量越低,但恢复工作就越慢。
- 常用的有以下几个状态
C0: 工作状态,没有组件关闭。
C1: 使用HLT或MWAIT指令进入该状态,C1状态会关闭内部时钟,但是可以立刻回到C0状态。
C3: 使用MWAIT指令进入该状态,会将L1和L2缓存刷到LLC/L3缓存,并进一步关闭了PLL,但仍处于供电状态。(C1,C3状态下,Cache一致性是得到保证的,从而恢复现场速度也很快)
C6: 使用MWAIT指令进入该状态,内部设备的上下文信息(Context)被封存和冻结,Catch被清空和关闭,电压也被降为0。恢复现场会更耗时。
(idle_intel 驱动可能在Cstates关闭时,仍使core进入省电状态。)
图5
■P states (Performance states)
- 根据处理器负载自动调节电压和频率,以减少耗电量和发热量,大大减少了CPU在低工作量的能耗。(只有在C-states状态为C0时才会有效,因为必须为其供电才能执行指令)
- OS控制的P-states
OS设定特定的P-states,即选择工作频率,处理器再根据频率计算电压。 - 硬件控制的P-states
OS只给出负载,由硬件选择对应的P-states,并设置电压和频率。 - Intel_pstate驱动
此驱动程序通过内置调频器,实现面向Intel Core(SandyBridge 和更新的型号)处理器的调频驱动。可以通过cpupower命令设置最大最小频率。
■monitor/mwait
- 在core空闲或者等待写入时,使当前core进入C1等C-states的特殊指令。
■Turbo
- 在个别核非常繁忙同时其他核又因为空闲进入C-States时,内置的电源管理模块将其电能输送给忙碌的core,升高其电压和频率,使其获得比标频更高的频率。
BIOS选项
- 以DELL服务器为例,在System Profile Setting中可以找到有关电源管理的选项。disable C-States、Monitor/Wait相关选项,可以使CPU始终保持高频率工作。
图6
使用工具查看CPU运行等级
■corefreq-cli工具
- 可以查看各种系统状态和CPU状态,包括电压,频率,C-states,Turbo,温度等。
图7
问题解决
再回到刚开始的问题,通过corefreq-cli工具看到两台服务器的CPU确实工作在不同的C-States等级,如图8所示,服务器B在C1而服务器A在C6。
图8
调整服务器A的bios选项,在关闭了C-States、Monitor/Mwait后,两台服务的CPU都处在C1状态(图9),这时再分别在两台服务器执行ping操作,延时终于不相上下了!
图9
总结
现代CPU电源管理功能十分强大,我们可以选择经济环保的方式让CPU根据负载选择工作频率和电压,在追求极致性能时也可以让CPU不管任务量大小都满负荷工作,在了解以上内容后,我们可以根据实际使用需求进行选择。
边栏推荐
- Cross-chain bridge protocol Nomad suffers hacker attack, losing more than $150 million
- 【多线程的相关内容】
- 全新的Uber App设计
- Spinner文字显示不全解决办法
- MySQL database combat (1)
- "Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support
- Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
- 图新地球为什么很模糊,白球、看图、下载问题深度剖析
- Machine Learning (Chapter 1) - Feature Engineering
- SAP 电商云 Spartacus UI 的 External Routes 设计明细
猜你喜欢
MySQL database combat (1)
完全背包问题的思路解析
程序员架构修炼之道:如何设计出可持续演进的系统架构?
基于PHP7.2+MySQL5.7的回收租凭系统
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
使用.NET简单实现一个Redis的高性能克隆版(一)
二叉搜索树(搜索二叉树)模拟实现(有递归版本)
怎么在外头使用容器里php命令
CADEditorX ActiveX 14.1.X
For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
随机推荐
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
RecyclerView的item高度自适应
再谈“雷克萨斯”安全装置失效!安全手册疑点重重,网友:细思极恐
Win10/11 删除文件资源管理器左侧栏目文件夹
直播弱网优化
CADEditorX ActiveX 14.1.X
Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
数据库一席谈:打造开源的数据生态,支撑产业数字化浪潮
Machine Learning Overview
ERC20通证标准是什么?
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题
创建C UDR时,指定的HANDLESNULLS的作用是什么?
SAP 电商云 Spartacus UI 的 External Routes 设计明细
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
【网络原理的概念】
用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
C#+WPF 单元测试项目类高级程序员必知必会
MySQL数据库实战(1)
Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)