Linux: CPU C-states
0. Overview
There are various power modes of the CPU which are determined based on their current usage and are collectively called “C-states” or “C-modes.” With CPU C-states, the CPU can enter the idle status to optimize energy consumption.

The CPU has a different C-state, and the deeper state means more energy saving. To save power/energy, stop the CPU clock and circuits. ie., so when CPU moving to the work(C0) state from idle state(Cx), it needs more switch time. The deeper the state, the more switch time is needed.
The CPU will switch the state from running to idle automatically, so when the fast path (lower latency) application has bound to the CPU, the application shall keep the busy state (ex: busy-loop) to avoid the state switch of the CPU, and for the slow path (no high require for latency), the application can allow the CPU wake up from idle to running for service.
1. CPU C-states
1.1 Enable CPU C-states
To enable the CPU C-state, an operator can set the max_cstate during BIOS installation. Take an example:
// server 1
# cat /sys/module/intel_idle/parameters/max_cstate
9
// server 2
# cat /sys/module/intel_idle/parameters/max_cstate
0
Let's see, server 1 has enabled a max 9 C-state, and server 2 has set no CPU C-state supported.
Note: It's an example of setting the C-state, more detailed information can refer to the CPU C-states
1.2 CPU C-states latency
We can also read the latency from cpu_dma_latency as:
// server 1
# hexdump -C /dev/cpu_dma_latency
00000000 00 94 35 77 |..5w|
00000004
# echo $(( 0x77359400 ))
2000000000
// server 2
# hexdump -C /dev/cpu_dma_latency
00000000 01 00 00 00 |....|
00000004
# echo $(( 0x00000001 ))
1
Here server 1 has 2000 seconds latency(from idle to C0 running state), and server 2 has 1 microsecond latency.
1.3 CPU C-states monitor
The cpupower-monitor can monitor the CPU processor and report processor frequency and idle statistics, for example:
# cpupower monitor
| Nehalem || Mperf || Idle_Stats
CPU| C3 | C6 | PC3 | PC6 || C0 | Cx | Freq || POLL | C1 | C1E | C6
0| 0.00| 0.00| 0.00| 0.00|| 0.53| 99.47| 2084|| 0.00| 0.01| 99.52| 0.00
24| 0.00| 0.00| 0.00| 0.00|| 0.26| 99.74| 2252|| 0.00| 0.24| 99.51| 0.00
1| 0.00| 0.00| 0.00| 0.00|| 0.33| 99.67| 2422|| 0.00| 0.00| 99.67| 0.00
25| 0.00| 0.00| 0.00| 0.00|| 0.90| 99.10| 2580|| 0.01| 0.26| 98.91| 0.00
2| 0.00| 0.00| 0.00| 0.00|| 0.20| 99.80| 1810|| 0.00| 0.00| 99.81| 0.00
26| 0.00| 0.00| 0.00| 0.00|| 0.84| 99.16| 2867|| 0.01| 0.29| 98.88| 0.00
3| 0.00| 0.00| 0.00| 0.00|| 0.83| 99.17| 2686|| 0.01| 0.55| 98.66| 0.00
27| 0.00| 0.00| 0.00| 0.00|| 1.47| 98.53| 2979|| 0.00| 0.00| 98.53| 0.00
4| 0.00| 0.00| 0.00| 0.00|| 0.40| 99.60| 1914|| 0.00| 0.02| 99.66| 0.00
28| 0.00| 0.00| 0.00| 0.00|| 1.61| 98.39| 2995|| 0.00| 0.00| 98.39| 0.00
5| 0.00| 0.00| 0.00| 0.00|| 0.73| 99.27| 2527|| 0.00| 0.29| 99.03| 0.00
There are three monitors Nehalem, Mperf and Idle_Stats has monitor the process information. From the report, we can see that most CPUs are in the C1E idle state.
To make the CPU switch to a running(C0) state, we can use stress to make a trial, after stress the CPU load is higher and higher, the more CPUs will switch from the C1E idle state to C0, the detailed information as the CPU C-states.
1.4 CPU C-states driver
To enable the CPU C-states, the hardware driver acpi_idle or intel_idle is needed.
- "acpi_idle" cpuidle driver: The acpi_idle cpuidle driver retrieves available sleep states (C-states) from the ACPI BIOS tables (from the _CST ACPI function on recent platforms or from the FADT BIOS table on older ones). The C1 state is not retrieved from ACPI tables. If the C1 state is entered, the kernel will call the hlt instruction (or mwait on Intel).
- "intel_idle" cpuidle driver: In kernel 2.6.36 the intel_idle driver was introduced. It only serves recent Intel CPUs (Nehalem, Westmere, Sandybridge, Atoms or newer). On older Intel CPUs the acpi_idle driver is still used (if the BIOS provides C-state ACPI tables). The intel_idle driver knows the sleep state capabilities of the processor and ignores ACPI BIOS exported processor sleep states tables.
To Check the cpuidle driver from /sys/devices/system/cpu/cpuidle/current_driver as:
// server 1
# cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
// server 2
# cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle
2. Reference
Linux: CPU C-states的更多相关文章
- Understanding Linux CPU stats
Your Linux server is running slow, so you follow standard procedure and run top. You see the CPU met ...
- Linux CPU亲缘性详解
前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是 ...
- 查看线程linux cpu使用率
Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 p ...
- Linux CPU数量判断,通过/proc/cpuinfo.
Linux CPU数量判断,通过/proc/cpuinfo. 相同 physical id :决定一个物理处理器 如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未 ...
- How do I Find Out Linux CPU Utilization?
From:http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html Whenever a Linux sys ...
- Linux CPU监控指标
Linux CPU监控指标 Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top.vmstat等命令.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执 ...
- 转载: 一、linux cpu、内存、IO、网络的测试工具
来源地址: http://blog.csdn.net/wenwenxiong/article/details/77197997 记录一下 以后好找.. 一.linux cpu.内存.IO.网络的测试工 ...
- Linux CPU使用率含义及原理
相关概念 在Linux/Unix下,CPU利用率分为用户态.系统态和空闲态,分别表示CPU处于用户态执的时间,系统内核执行的时间,和空闲系统进程执行的时间. 下面是几个与CPU占用率相关的概念. CP ...
- Linux CPU Load Average
理解Linux系统负荷 LINUX下CPU Load Average的一点研究 Linux load average负载量分析与解决思路 Understanding Linux CPU Load - ...
- 理解Linux CPU负载和 CPU使用率
CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入w ...
随机推荐
- 聊一聊 .NET高级调试 内核模式堆泄露
一:背景 1. 讲故事 前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下: 在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已 ...
- AI换脸利器!Roop下载分享
前段时间给大家介绍过换脸界最强的Rope,感兴趣的小伙伴可以戳戳手指 传送门:https://blog.csdn.net/S_eashell?spm=1011.2415.3001.5343 今天要 ...
- hdu4365 Palindrome graph
Palindrome graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 架构与思维:如何应对Redis热Key?
★ Redis系列文章 Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模 ...
- 不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你
EF Core Code First 是什么 Code First 是 Entity Framework Core (简称 EF Core) 的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型 ...
- Volcano 原理、源码分析(一)
0. 总结前置 1. 概述 2. Volcano 核心概念 2.1 认识 Queue.PodGroup 和 VolcanoJob 2.2. Queue.PodGroup 和 VolcanoJob 的关 ...
- 文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题
一.用go语言,写出 RIGHT-ROTATE 的伪代码. 文心一言: 在计算机科学中,右旋转(RIGHT-ROTATE)是一种常见的操作,通常用于数组或链表.以下是一个使用Go语言实现右旋转的伪代码 ...
- 神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在实施backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施.因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的.为了逐渐实现梯 ...
- cp {,bak}用法(转载)
cp filename{,bak} cp filename{,.bak} 这个命令是用来把filename备份成filename.bak的 等同于命令 cp filename filename.bak ...
- 国产Geoscene Server 4.0编译SOE总结
背景:公司一直使用Arcgis Server 10.1.Visual Studio 2010开发SOE功能,随着国产化软件发展大趋势,SOE中的各种分析功能,需要升级到Geoscene Server环 ...