searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

设置C-state改变功耗水平

2023-10-07 02:10:14
52
0

CPU有多种可以控制功耗的状态,称为"C-states"或"C-modes”。其中,C0是CPU正常模式,除了C0之外,都是低功耗状态。
系统在运行时会根据负载状况在各个之间切换,以降低功耗,状态切换存在延时,一般延时越大,则进入的状态功耗越低。
设置更高的C-state可以使CPU静态功率(空闲状态下的功率)更低,但对动态功率(负载大于0的功率)的影响可以忽略。

 

通过powertop命令(或者turbostat corefreq-cli等工具),可以查看处于不同状态的比例。

通过cd /sys/devices/system/cpu/cpu0/cpuidle; for state in state*; do echo c-$state `cat $state/name` `cat $state/latency`; done 查看退出不同状态的延时。

/dev/cpu_dma_latency记录了从某种状态转变为C0允许的延时,大多linux系统默认的值为2000秒,所以小于2000秒延时的state都可以被系统调度进入,通过打开该文件,写入更小的数值,并不关闭文件则可以防止进入某些高的state。

 

import time
f = open("/dev/cpu_dma_latency", "wb")
val = 5
f.write(val.to_bytes(4, 'little'))
f.flush()
# 不退出
time.sleep(0)

 

上面的python代码将该数值改为了5微妙,退出延时大于6微秒的状态不会被调入。

 

接下来,进行了实测,对于大部分CPU时间处于空闲状态的机器,通过设置/dev/cpu_dma_latency禁止和允许调入C1外的状态,功耗差别在10%左右。

 

0条评论
0 / 1000
冯****光
3文章数
0粉丝数
冯****光
3 文章 | 0 粉丝
冯****光
3文章数
0粉丝数
冯****光
3 文章 | 0 粉丝
原创

设置C-state改变功耗水平

2023-10-07 02:10:14
52
0

CPU有多种可以控制功耗的状态,称为"C-states"或"C-modes”。其中,C0是CPU正常模式,除了C0之外,都是低功耗状态。
系统在运行时会根据负载状况在各个之间切换,以降低功耗,状态切换存在延时,一般延时越大,则进入的状态功耗越低。
设置更高的C-state可以使CPU静态功率(空闲状态下的功率)更低,但对动态功率(负载大于0的功率)的影响可以忽略。

 

通过powertop命令(或者turbostat corefreq-cli等工具),可以查看处于不同状态的比例。

通过cd /sys/devices/system/cpu/cpu0/cpuidle; for state in state*; do echo c-$state `cat $state/name` `cat $state/latency`; done 查看退出不同状态的延时。

/dev/cpu_dma_latency记录了从某种状态转变为C0允许的延时,大多linux系统默认的值为2000秒,所以小于2000秒延时的state都可以被系统调度进入,通过打开该文件,写入更小的数值,并不关闭文件则可以防止进入某些高的state。

 

import time
f = open("/dev/cpu_dma_latency", "wb")
val = 5
f.write(val.to_bytes(4, 'little'))
f.flush()
# 不退出
time.sleep(0)

 

上面的python代码将该数值改为了5微妙,退出延时大于6微秒的状态不会被调入。

 

接下来,进行了实测,对于大部分CPU时间处于空闲状态的机器,通过设置/dev/cpu_dma_latency禁止和允许调入C1外的状态,功耗差别在10%左右。

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0