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 ...
随机推荐
- JS对后端响应的long类型数据处理精度丢失问题
1.数据库的数据 2.前端拿到的数据 前端帮我们进行四舍五入了,这并不是我想要的 3.解决办法 把后端响应的数据long类型转成string类型,可以使用Stream流的方式或者for循环的方式,对响 ...
- .NET周刊【12月第2期 2023-12-13】
国内文章 用最清爽的方式开发dotNet https://www.cnblogs.com/ncellit/p/17881779.html 本文介绍了如何以清爽的方式开发dotNet应用,特别是简单的A ...
- flask请求钩子(就是django的中间件)
flask中的请求钩子就是域django的中间件类似,作用都是用于在请求前.后.响应前.后进行一些hook操作. 请求钩子装饰器 @app.before_request # 请求前会调用,一般可以用来 ...
- 探究vue的diff算法
1.diff算法是什么? diff算法是一种通过**同层的树节点**进行比较的高效算法 Diff 算法探讨的就是虚拟 DOM 树发生变化后,生成 DOM 树更新补丁的方式.对比新旧两株虚拟 DOM 树 ...
- 关于Secure Hash Algorithm加密算法
一.概述 SHA(Secure Hash Algorithm)加密算法是一种广泛应用的密码散列函数,由美国国家安全局(NSA)设计,用于保障数据的安全性和完整性.SHA算法经历了多个版本的更新,目前主 ...
- 开源MES/免费MES/开源mes 生产管理流程
开源MES/免费MES/开源MES生产流程管理 一.什么是MES生产管理流程 生产管理系统(又称制造执行系统)是一种集成了计划.生产.质量控制.库存管理和材料申请等生产流程的管理系统.工厂生产管理流程 ...
- Spring源码学习之Web数据绑定器WebDataBinder
WebDataBinder 1.描述 特殊的数据绑定器用于从web请求参数到JavaBean对象的数据绑定.专为web环境,但不依赖于Servlet API;作为更具体的DataBinder变体的基类 ...
- 编译安装openssl-1.1.1和openssh-9.4
1.安装 openssl-1.1.1 先处理下opensll的版本,以免编译安装Openssh环境异常: yum remove openssl cd /opt wget https://www.ope ...
- ubuntu 20.0.4 LTS 配置国内apt-get源
https://blog.csdn.net/wangyijieonline/article/details/105360138 更换阿里源 要知道当前系统的代号,可以用以下命令: lsb_releas ...
- 原生JavaScript 与 jQuery 执行Ajax请求
原生JavaScript和jQuery都可以用来执行Ajax请求,以下是它们的基本实现方式的比较: 原生JavaScript实现Ajax请求: var xhr = new XMLHttpRequest ...