1. 程式人生 > >Android下設定CPU核心數和頻率

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核心的頻率就必須把這個程式關閉。

stop mpdecision

需要注意的是,這個程式會在每次啟動後執行,所以每次重啟後都需要重新執行上面的命令停止mpdecisiopn。

設定CPU的核心數

在/sys/devices/system/cpu目錄下可以看到你的CPU有幾個核心,如果是雙核,就是cpu0和cpu1,如果是四核,還會加上cpu2和cpu3。 
隨便進一個資料夾,比如cpu1,裡面有個online檔案。我們可以用cat命令檢視該檔案的內容

cat /sys/devices/system/cpu/cpu1/online

這個檔案只有一個數字,0或1。0表示該核心是offline狀態的,1表示該核心是online狀態的。所以,如果你想關閉這個核心,就把online檔案的內容改為“0”;如果想開啟該核心,就把檔案內容改為“1”。

echo "0">/sys/devices/system/cpu/cpu1/online # 關閉該CPU核心
echo "1">/sys/devices/system/cpu/cpu1/online # 開啟該CPU核心
設定CPU的頻率

首先我們要修改governor的模式,但在修改前需要查下CPU支援哪些governor的模式

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

我用的是Nexus 4手機,所以有以下5個選擇,其他的手機型號可能略有不同

interactive ondemand userspace powersave performance

這裡performance表示不降頻,ondemand表示使用核心提供的功能,可以動態調節頻率,powersvae表示省電模式,通常是在最低頻率下執行,userspace表示使用者模式,在此模式下允許其他使用者程式調節CPU頻率。 
在這裡,我們將模式調整為“userspace”。

echo "userspace">/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

然後我們對CPU的頻率進行修改,CPU的頻率不是可以任意設定的,需要檢視scaling_available_frequencies檔案,看CPU支援哪些頻率。

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即可。

echo "1242000">/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

設定好後,我們可以通過scaling_cur_freq檔案檢視當前這個核心的頻率

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

最後我們也可以設定下CPU的最大和最小頻率,只需要將需要設定的頻率值寫入scaling_max_freq和scaling_min_freq即可

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頻率經常輕鬆上2G,功耗肯定會顯著增加。而大多數的ARM架構的CPU採用的是對稱多處理(SMP)的方式處理多CPU。這就意味著每個CPU核心是被平等對待的,同時開啟又同時關閉。顯然,這樣的做法在Mobile Dev

Android設定CPU核心核螢幕

伯龍CSDN部落格: http://blog.csdn.net/menghuanbeike/article/details/78367376設定CPU的核心數在/sys/devices/system/cpu目錄下可以看到你的CPU有幾個核心,如果是雙核,就是cpu0和cpu1

windows查看CPU個數,核心線程

res mar shadow ica logic proc img 查看cpu inf 在Windows中,在cmd命令中輸入“wmic”,然後在出現的新窗口中分別輸入“cpu get Name”,“cpu get NumberOfCores”,“cpu get Numbe

檢視CPU記憶體

檢視CPU核數 top 然後按數字鍵1 通過虛擬檔案系統proc,直接獲取CPU總數量 cat /proc/cpuinfo | grep processor 檢視記憶體 free命令主要用於顯示記憶體數量 free -h 通過虛擬檔案系統proc,直接獲取記憶體資

Ubuntu16檢視CPU、記憶體磁碟相關資訊

1.記憶體 檢視記憶體#free -m total used free shared buff/cache available Mem: 96685 986 94887

[專案實踐] 在專案實戰中提升程式碼效率的的一次應用實踐-----使用列表解析式輸出當前android裝置的CPU

1、先按照初學者思維程式碼應該是這樣的 1 #coding:utf-8 2 import os 3 text = os.popen("adb shell command cat /proc/cpuinfo",'r').read().split("\n") 4 i = 0 5 for j i

linux檢視cpu記憶體指令

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數 # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數 # 檢視物理CPU個數 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l或grep 'p

linux查看cpu內存指令

name cpu信息 超線程 cat -s ces lin bsp 線程 # 總核數 = 物理CPU個數 X 每顆物理CPU的核數 # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數 # 查看物理CPU個數 cat /proc/c

activemq設定使用記憶體配置自動刪除無法消費的訊息以及過期的訊息

使用的activemq的版本為 apache-activemq-5.15.6 1、修改使用的記憶體   actviemq訊息量大之後可能會越來越慢,這可能是兩個問題,一是伺服器分配記憶體太小,導致伺服器處理訊息慢,記憶體使用可以修改activemq小的bin資料夾內的env檔案第  

Android RadioButton設定選中時文字背景顏色同時改變

在使用 RadioButton 時,有時我們會想要達到選中時文字顏色和背景顏色同時改變的效果,這裡還需要多進行幾步操作。 首先,在佈局檔案中新建一組 RadioButton : <RadioGroup andr

Android 陀螺儀、加速度磁場感測器資料定義

摘自Android SensorEvent.java程式碼註釋 Sensor.TYPE_ACCELEROMETER(加速度感測器型別) All values are in SI units (m/s^2) values[0]: Accelerati

linux檢視cpu、記憶體硬碟大小

轉載至:http://blog.sina.com.cn/s/blog_535aa0930100ltz8.html 查cpu #dmesg |grep -i xeon CPU0: Intel(R) Xeon(R) CPU           E5520  @ 2.27G

根據CPU核心確定執行緒池併發執行緒

正文回到頂部一、丟擲問題 關於如何計算併發執行緒數,一般分兩派,來自兩本書,且都是好書,到底哪個是對的?問題追蹤後,整理如下: 第一派:《Java Concurrency in Practice》即《java併發程式設計實踐》,如下圖: 如上圖,在《Java Concurrency in Practice

FireFox設定DIV的topleft無效解決方法

火狐瀏覽器和IE瀏覽器有很多衝突,往往在IE下正常的在火狐下就不正常了,這就需要程式去判斷,搞定他們相容問題!下面這段程式碼解決了在火狐下div設定top和left無效的BUG和在IE下滾動條無效的BUG------------------------------------

Ubuntu檢視CPU、記憶體硬碟詳細資訊的幾個命令

轉載自:【http://www.sijitao.NET/1749.html】 CPU: 型號:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 數量:lscpu |grep "CPU socket" |

AndroidStudio設定自動註釋作者一些預設資訊

Eclipse 的自動註釋相信大家都不會陌生,轉到Android Studio之後我們會發現這個有用的功能竟然沒有。 其實大家不用慌,這個功能隱藏起來了。需要自己去手動設定一下就可以解決的—— 點選選單欄的“File“->“Settings”,開啟Se

CUP核心執行緒概念

1 當前所說的計算機 “有幾個CPU”準確的說法是“CPU有幾個核心”,工作管理員裡面看到的是CPU的執行緒。即CPU物理上的個數為一個,但是有多個核心。 2   雙核處理器即是基於單個半導體的一個處理器上擁有兩個一樣功能的處理器核心。換句話說,將兩個物理處理器核心整合入

[R分析] 描述統計:頻頻率分佈直方圖

n<-round(runif(1000,0,100)) #生成0到100的1000個隨機數 hist(n) #頻數分佈直方圖,縱座標名字為frequency hist(n,freq =

Android EditText設定只能輸入數字小數點

EditText可以設定多種輸入方式,其中若要設定輸入數字和小數點時應注意一下幾點: 1.如果設定只輸入數字 edittext.setInputType( InputType.TYPE_CLASS_NUMBER); 此時只會彈出數字輸入框,符號點選後不會輸入到文字框中 2

Linux檢視CPU、記憶體硬碟型號及相關資訊命令

smartctl version 5.33 [i386-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION