Android下设置CPU核心数和频率
现在的Android手机双核、四核变得非常普遍,同时CPU频率经常轻松上2G,功耗肯定会显著增加。而大多数的ARM架构的CPU采用的是对称多处理(SMP)的方式处理多CPU。这就意味着每个CPU核心是被平等对待的,同时打开又同时关闭。显然,这样的做法在Mobile Device上显得很耗能。所以,Qualcomm的Snapdragon CPU使用了一种叫非对称多处理(aSMP)的技术,每个CPU核心可以独立的开启和关闭,也能设置不同的频率。因此,针对使用Snapdragon CPU的Android手机,我们可以通过限制CPU核心数或者限制CPU的频率达到节能的目的。
关闭mpdecision
Snapdragon有一个叫做mpdecision的程序管理CPU各个核心的开、关和频率。所以如果想手动开关CPU的核心或者设置CPU核心的频率就必须把这个程序关闭。
1
|
stop mpdecision |
需要注意的是,这个程序会在每次启动后执行,所以每次重启后都需要重新执行上面的命令停止mpdecisiopn。
设置CPU的核心数
在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是双核,就是cpu0和cpu1,如果是四核,还会加上cpu2和cpu3。
随便进一个文件夹,比如cpu1,里面有个online文件。我们可以用cat命令查看该文件的内容
1
|
cat /sys/devices/system/cpu/cpu1/online |
这个文件只有一个数字,0或1。0表示该核心是offline状态的,1表示该核心是online状态的。所以,如果你想关闭这个核心,就把online文件的内容改为“0”;如果想打开该核心,就把文件内容改为“1”。
1
2
|
echo "0" > /sys/devices/system/cpu/cpu1/online # 关闭该CPU核心 echo "1" > /sys/devices/system/cpu/cpu1/online # 打开该CPU核心 |
设置CPU的频率
首先我们要修改governor的模式,但在修改前需要查下CPU支持哪些governor的模式
1
|
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors |
我用的是Nexus 4手机,所以有以下5个选择,其他的手机型号可能略有不同
1
|
interactive ondemand userspace powersave performance |
这里performance表示不降频,ondemand表示使用内核提供的功能,可以动态调节频率,powersvae表示省电模式,通常是在最低频率下运行,userspace表示用户模式,在此模式下允许其他用户程序调节CPU频率。
在这里,我们将模式调整为“userspace”。
1
|
echo "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor |
然后我们对CPU的频率进行修改,CPU的频率不是可以任意设置的,需要查看scaling_available_frequencies文件,看CPU支持哪些频率。
1
|
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies |
从我的手机中可以获得以下的值
384000 486000 594000 702000 810000 918000 1026000 1134000 1242000 1350000 1458000 1512000
这里的频率是以Hz为单位的,我准备将cpu0设置为1.242GHz,那就将1242000写入scaling_setspeed即可。
1
|
echo "1242000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed |
设置好后,我们可以通过scaling_cur_freq文件查看当前这个核心的频率
1
|
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq |
最后我们也可以设置下CPU的最大和最小频率,只需要将需要设置的频率值写入scaling_max_freq和scaling_min_freq即可
1
2
|
echo "1350000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq # 设置最大频率 echo "384000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq # 设置最小频率 |
这里要注意的是“最大值”需要大于等于“最小值”。
注意,这里设置的仅为某个CPU核心的频率,你需要对每个online的CPU核心都进行设置,同时以上对文件的修改均需要root权限。
通过减少online的核心数和限制CPU频率固然可以起到节省电量的目的,但是性能也是显著降低,所以需要做一个权衡。
Android下设置CPU核心数和频率的更多相关文章
- 如何获取 Android CPU 核心数 (Java/C++)
1 前言 最近学习Power HAL方面相关知识,透过Power HAL 去配置CPU的Freq需要先确定 CPU 核数.便先了解如何获取 Android CPU 核数. 2 Java层获取方式 // ...
- 根据CPU核心数确定线程池并发线程数(转)
一.抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 第一派:<Java Concurrency in Practice>即&l ...
- 查看电脑CPU核心数的方法
查看电脑CPU核心数的方法: 方法一: 同时按下[Ctrl+Shift+Esc]组合快捷键打开任务管理器: 点击[性能]就可以看出是几核CPU了: 方法二: 在计算机图标上面点击右键,选择“管理”: ...
- 物理CPU数、CPU核心数、进程数
参考CSDN博客:https://blog.csdn.net/helloworld0906/article/details/90547159 一. 物理cpu数.cpu核数.线程数(逻辑cpu数)的关 ...
- 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
- using 40 logical processors based on SQL Server licensing SqlServer CPU核心数限制问题
公司服务器是120核心cpu,但是实际应用中只有40核,原因是业务部门发现服务器cpu承载30%的时候sql 就会卡死: 然后从sqlserver 去查询,cpu核心数: SELECT COUNT(1 ...
- Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心
在阅读Nginx模块开发与架构模式一书时: "Nginx 上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...
- 如何查看服务器CPU核心数和线程数
知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任 ...
- 转 根据CPU核心数确定线程池并发线程数
转自: https://www.cnblogs.com/dennyzhangdd/p/6909771.html?utm_source=itdadao&utm_medium=referral 目 ...
随机推荐
- API Star:一个 Python 3 的 API 框架
为了在 Python 中快速构建 API,我主要依赖于 Flask.最近我遇到了一个名为 "API Star" 的基于 Python 3 的新 API 框架.由于几个原因,我对它很 ...
- php 数据脱敏显示
/** * 数据脱敏 * @param $string 需要脱敏值 * @param int $start 开始 * @param int $length 结束 * @param string $re ...
- Fakeapp 入门教程(3):参数篇
参数可以让软件自由度更高.Fakeapp的参数并不算多,但是也非常使用.本文就讲解下几个重要的参数.参数设置界面可以通过点击SETTINGS打开. 参数修改无需点击保存,一旦修改直接生效. Proce ...
- (转)CocoaPods
本文转自http://nshipster.cn/cocoapods/ 文明是建立在道路,桥梁,运河,下水道,管线,电线和光纤这些基础设施之上的.只要设计和施工得当,它们可以帮助社会成倍的发展. 唯一的 ...
- Ralph W. Tyler【拉尔夫·泰勒】
Ralph W. Tyler Anyone who cares about what schools and colleges teach and how their student learn wi ...
- A1042 Shuffling Machine (20)
1042 Shuffling Machine (20)(20 分) Shuffling is a procedure used to randomize a deck of playing cards ...
- JS空数组的判断
前言 最近在做一个mini项目,被大神各种鄙视,基础知识确实是不扎实,加油加油.好了,不多废话,抽空写写遇到的两个知识点,就记录下来,写博客还是能帮忙整理记录的,不然过了就忘记了. input监听值改 ...
- 3、CSS基础 part-1
1.给body设置颜色 <html> <body text="red"> <p> hello world</p> <p> ...
- [python][django学习篇][8]django 视图(2) --简单模板
在视图函数里返回的是一个 HttpResponse 类的实例,我们给它传入了一个希望显示在用户浏览器上的字符串.但是我们的博客不可能只显示这么一句话,它有可能会显示很长很长的内容.比如我们发布的博客文 ...
- easyui 右键绑定事件
$(function(){ $('#hospitalTree').bind('contextmenu', function(e) { e.preventDefault(); ...