偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

對(duì)Android設(shè)備CPU進(jìn)行鎖頻

移動(dòng)開(kāi)發(fā) Android
本文對(duì)Android設(shè)備CPU的狀態(tài)查看方法和鎖頻(lock frequency)方法進(jìn)行詳細(xì)介紹。這有什么用?作為測(cè)試工程師,你值得了解。

[[184787]]

本文對(duì)Android設(shè)備CPU的狀態(tài)查看方法和鎖頻(lock frequency)方法進(jìn)行詳細(xì)介紹。這有什么用?作為測(cè)試工程師,你值得了解。

CPU頻率

首先說(shuō)下CPU的頻率。我們都知道,CPU的工作頻率越高,運(yùn)算就越快,但能耗也更高。然而很多時(shí)候,設(shè)備并不需要那么高的計(jì)算性能,這個(gè)時(shí)候,我們就希望能降低CPU的工作頻率,追求較低的能耗,以此實(shí)現(xiàn)更長(zhǎng)的待機(jī)時(shí)間。

基于此需求,當(dāng)前電子設(shè)備的CPU都會(huì)存在多個(gè)工作頻率,并能根據(jù)實(shí)際場(chǎng)景進(jìn)行CPU頻率的自動(dòng)切換,以此達(dá)到平衡計(jì)算性能與能耗的目的。

鎖頻的用途

那么為什么需要鎖頻呢?

對(duì)于普通用戶來(lái)說(shuō),可能對(duì)這些場(chǎng)景比較熟悉:

在家用筆記本電腦玩游戲的時(shí)候,電腦連著電源,不在乎能耗,只想要盡可能高的性能,這個(gè)時(shí)候就選擇高性能模式,即保持CPU在***頻率工作。

旅行途中使用筆記本電腦,靠電池供電,希望電腦能待機(jī)盡可能久,這時(shí)就選擇省電模式,即CPU保持在***頻率運(yùn)行。

作為一名測(cè)試工程師,我們?cè)谶M(jìn)行軟件測(cè)試的時(shí)候,為了讓測(cè)試結(jié)果真實(shí)反映軟件本身的效率,從控制變量法的角度,我們希望測(cè)試結(jié)果盡量不受到硬件本身的影響。這個(gè)時(shí)候,我們就可以嘗試對(duì)設(shè)備的CPU進(jìn)行鎖頻,即保證在測(cè)試的過(guò)程中,硬件設(shè)備的CPU運(yùn)行在一個(gè)恒定的頻率。

說(shuō)到這里先埋個(gè)伏筆,在chromium官方測(cè)試庫(kù)中,部分測(cè)試場(chǎng)景在初始化測(cè)試環(huán)境時(shí),就會(huì)將設(shè)備所有CPU的頻率調(diào)到***狀態(tài),后續(xù)我會(huì)單獨(dú)以一篇博客的形式對(duì)那部分的源碼進(jìn)行分析。對(duì)于等不及的朋友,可以先去看下源碼,源碼路徑為pylib/perf/PerfControl.SetHighPerfMode。

查看CPU狀態(tài)信息

在修改CPU的狀態(tài)之前,我們需要先查看CPU的屬性和狀態(tài)信息,這樣才能有針對(duì)性地進(jìn)行正確的設(shè)置。

對(duì)于CPU的狀態(tài),我們通常會(huì)關(guān)注兩類信息,一是整體層面的,即CPU運(yùn)行的核數(shù);二是細(xì)節(jié)層面的,即各個(gè)CPU的工作狀態(tài),包括所處工作模式、頻率大小等。

在Android系統(tǒng)中,CPU相關(guān)的信息存儲(chǔ)在/sys/devices/system/cpu目錄的文件中,我們可以通過(guò)讀取該目錄下的特定文件獲得當(dāng)前設(shè)備的CPU狀態(tài)信息,也可以通過(guò)對(duì)該目錄下的特定文件進(jìn)行寫值,實(shí)現(xiàn)對(duì)CPU頻率等狀態(tài)信息的更改。

本文以Nexus 5(系統(tǒng)版本5.1.1)為例,后面的例子均以該設(shè)備為例。不同的機(jī)型和Android系統(tǒng)版本可能會(huì)存在一些差異,請(qǐng)知悉。

在/sys/devices/system/cpu目錄中,文件結(jié)構(gòu)如下所示。

  1. shell@hammerhead:/sys/devices/system/cpu $ ll 
  2.  
  3. drwxr-xr-x root     root              2016-01-20 01:36 cpu0 
  4.  
  5. drwxr-xr-x root     root              2016-01-20 21:06 cpu1 
  6.  
  7. drwxr-xr-x root     root              2016-01-20 21:07 cpu2 
  8.  
  9. drwxr-xr-x root     root              2016-01-20 21:07 cpu3 
  10.  
  11. -rw------- root     root         4096 1970-01-17 10:27 cpuctl 
  12.  
  13. drwxr-xr-x root     root              1970-01-17 10:27 cpufreq 
  14.  
  15. drwxr-xr-x root     root              1970-01-17 10:27 cpuidle 
  16.  
  17. -r--r--r-- root     root         4096 1970-01-17 10:27 kernel_max 
  18.  
  19. -r--r--r-- root     root         4096 1970-01-17 10:27 offline 
  20.  
  21. -r--r--r-- root     root         4096 1970-01-17 10:27 online 
  22.  
  23. -r--r--r-- root     root         4096 1970-01-17 10:27 possible 
  24.  
  25. drwxr-xr-x root     root              1970-01-17 10:27 power 
  26.  
  27. -r--r--r-- root     root         4096 1970-01-17 10:27 present 
  28.  
  29. -rw-r--r-- root     root         4096 1970-01-17 10:27 uevent 

 

1、view overall cpu info

在possible文件中,存儲(chǔ)的是當(dāng)前設(shè)備可用的CPU,顯示形式以數(shù)字的形式。例如0-3代表的就是當(dāng)前設(shè)備總共有4個(gè)核,編號(hào)分別為0,1,2,3。

  1. shell@hammerhead:/sys/devices/system/cpu $ cat possible 
  2.  
  3. 0-3 

 

在online文件中,存儲(chǔ)的是當(dāng)前設(shè)備正在運(yùn)行的CPU。因?yàn)橛袝r(shí)候設(shè)備不需要很高的性能,就可以將部分CPU關(guān)閉。不過(guò)需要注意的是,不管什么時(shí)候,CPU0始終都會(huì)處于運(yùn)行狀態(tài)。online文件的存儲(chǔ)格式與possible類似,如果只有部分CPU運(yùn)行,且CPU編號(hào)不連續(xù)的時(shí)候,會(huì)以逗號(hào)進(jìn)行隔開(kāi);例如,0,2表示當(dāng)前CPU0和CPU2處于運(yùn)行狀態(tài)。

  1. shell@hammerhead:/sys/devices/system/cpu $ cat online 
  2.  
  3. 0,2 

 

對(duì)應(yīng)的,offline文件標(biāo)示的是當(dāng)前設(shè)備處于關(guān)閉狀態(tài)的CPU,這和online作為互補(bǔ),并集剛好就是設(shè)備的所有CPU,即possible文件中的內(nèi)容。

  1. shell@hammerhead:/sys/devices/system/cpu $ cat offline 
  2.  
  3. 1,3 

 

2、view specified cpu info

接下來(lái),我們要獲取到特定CPU的信息,就需要進(jìn)入到對(duì)應(yīng)的文件夾,例如,cpu0/對(duì)應(yīng)的就是CPU0的信息。

在/sys/devices/system/cpu/cpu0目錄中,文件結(jié)構(gòu)如下所示。

  1. shell@hammerhead:/sys/devices/system/cpu $ ll cpu0 
  2.  
  3. drwxr-xr-x root     root              2016-01-20 01:37 cpufreq 
  4.  
  5. drwxr-xr-x root     root              1970-01-17 10:27 cpuidle 
  6.  
  7. -r-------- root     root         4096 1970-01-17 10:27 crash_notes 
  8.  
  9. -rw-r--r-- root     root         4096 2016-01-20 01:36 online 
  10.  
  11. drwxr-xr-x root     root              1970-01-17 10:27 power 
  12.  
  13. drwxr-xr-x root     root              1970-01-17 10:27 rq-stats 
  14.  
  15. lrwxrwxrwx root     root              1970-01-17 10:27 subsystem 
  16.  
  17. drwxr-xr-x root     root              1970-01-17 10:27 topology 
  18.  
  19. -rw-r--r-- root     root         4096 1970-01-17 10:27 uevent 

 

其中,online文件的內(nèi)容表示當(dāng)前CPU是否處于運(yùn)行狀態(tài),若處于運(yùn)行狀態(tài),則內(nèi)容為1,否則為0;這個(gè)和上面講到的/sys/devices/system/cpu/online能進(jìn)行對(duì)應(yīng)。

  1. shell@hammerhead:/sys/devices/system/cpu $ cat cpu0/online 
  2.  

 

在cpu0/cpufreq/目錄下,存儲(chǔ)的就是與CPU0的頻率相關(guān)的信息,文件結(jié)構(gòu)如下所示。

  1. shell@hammerhead:/sys/devices/system/cpu $ ll cpu0/cpufreq/ 
  2.  
  3. -rw-r--r-- root     root         4096 2016-01-20 01:57 UV_mV_table 
  4.  
  5. -r--r--r-- root     root         4096 2016-01-20 01:57 affected_cpus 
  6.  
  7. -r--r--r-- root     root         4096 2016-01-20 01:57 cpu_utilization 
  8.  
  9. -r-------- root     root         4096 2016-01-20 01:57 cpuinfo_cur_freq 
  10.  
  11. -r--r--r-- root     root         4096 2016-01-20 02:00 cpuinfo_max_freq 
  12.  
  13. -r--r--r-- root     root         4096 2016-01-20 01:39 cpuinfo_min_freq 
  14.  
  15. -r--r--r-- root     root         4096 2016-01-20 01:57 cpuinfo_transition_latency 
  16.  
  17. -r--r--r-- root     root         4096 2016-01-20 01:57 related_cpus 
  18.  
  19. -r--r--r-- root     root         4096 2016-01-20 01:39 scaling_available_frequencies 
  20.  
  21. -r--r--r-- root     root         4096 2016-01-20 01:57 scaling_available_governors 
  22.  
  23. -r--r--r-- root     root         4096 2016-01-20 01:50 scaling_cur_freq 
  24.  
  25. -r--r--r-- root     root         4096 2016-01-20 01:57 scaling_driver 
  26.  
  27. -rw-r--r-- root     root         4096 2016-01-20 01:50 scaling_governor 
  28.  
  29. -rw-r--r-- root     root         4096 2016-01-20 08:29 scaling_max_freq 
  30.  
  31. -rw-r--r-- root     root         4096 2016-01-20 08:29 scaling_min_freq 
  32.  
  33. -rw-r--r-- root     root         4096 2016-01-20 02:52 scaling_setspeed 

 

在這個(gè)目錄中,我們需要關(guān)注的文件比較多。

首先是scaling_available_governors和scaling_governor。這里的governor大家可以理解為CPU的工作模式,scaling_available_governors中存儲(chǔ)了當(dāng)前CPU支持的所有工作模式,而scaling_governor存儲(chǔ)的是CPU當(dāng)前所處的工作模式。

  1. shell@hammerhead:/sys/devices/system/cpu $ cat cpu0/cpufreq/scaling_available_governors 
  2.  
  3. impulse dancedance smartmax interactive conservative ondemand userspace powersave Lionheart bioshock performance 
  4.  
  5.   
  6.  
  7. shell@hammerhead:/sys/devices/system/cpu $ cat cpu0/cpufreq/scaling_governor 
  8.  
  9. performance 

 

可以看到,Nexus 5支持非常多的工作模式,這里只對(duì)幾個(gè)常見(jiàn)的模式進(jìn)行簡(jiǎn)單說(shuō)明。

performance:***性能模式,即使系統(tǒng)負(fù)載非常低,cpu也在***頻率下運(yùn)行。

powersave:省電模式,與performance模式相反,cpu始終在***頻率下運(yùn)行。

ondemand:CPU頻率跟隨系統(tǒng)負(fù)載進(jìn)行變化。

userspace:可以簡(jiǎn)單理解為自定義模式,在該模式下可以對(duì)頻率進(jìn)行設(shè)定。

對(duì)于各種模式對(duì)應(yīng)的含義和策略,在此不進(jìn)行展開(kāi),大家有興趣的可以自行搜索。

然后是CPU的工作頻率范圍,對(duì)應(yīng)的文件有cpuinfo_max_freq、cpuinfo_min_freq、scaling_max_freq、scaling_min_freq。

以cpuinfo_為前綴的表示CPU硬件支持的頻率范圍,反映的是CPU自身的特性,與CPU的工作模式無(wú)關(guān)。而以scaling_為前綴的表示CPU在當(dāng)前工作模式下的頻率范圍。

那么,當(dāng)前CPU工作的頻率是多少,我們要怎么查看呢?

查看cpuinfo_cur_freq或scaling_cur_freq即可。cpuinfo_cur_freq代表通過(guò)硬件實(shí)際上讀到的頻率值,而scaling_cur_freq則是軟件當(dāng)前的設(shè)置值,多數(shù)情況下這兩個(gè)值是一致的,但是也有可能因?yàn)橛布脑?,有微小的差異?/p>

  1. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # cat cpuinfo_cur_freq 
  2.  
  3. 1574400 
  4.  
  5. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_cur_freq 
  6.  
  7. 1574400 

 

更改CPU狀態(tài)信息

***回到我們本文的主題,如何對(duì)CPU的頻率進(jìn)行設(shè)定呢?

這也和CPU信息查看對(duì)應(yīng),分為對(duì)CPU整體運(yùn)行情況的設(shè)置,和對(duì)特定CPU工作模式的設(shè)定。

在此,有兩點(diǎn)需要特別進(jìn)行說(shuō)明。

首先,對(duì)于高通的CPU,存在一個(gè)系統(tǒng)服務(wù),叫作mpdecision service。當(dāng)這個(gè)系統(tǒng)服務(wù)處于運(yùn)行狀態(tài)時(shí),我們無(wú)法對(duì)CPU的狀態(tài)信息進(jìn)行更改。因此,如果我們要更改高通CPU的工作模式,***步要做的就是終止mpdecision系統(tǒng)服務(wù)。

操作起來(lái)也很簡(jiǎn)單,在Android shell里面執(zhí)行如下命令即可。

  1. stop mpdecision 

第二點(diǎn)需要注意的是,如果我們想要實(shí)現(xiàn)對(duì)特定CPU的工作狀態(tài)進(jìn)行設(shè)置,就必須將scaling_governor設(shè)置為userspace,只有這樣,我們才能對(duì)scaling_setspeed進(jìn)行設(shè)置。

  1. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_setspeed       
  2.  
  3. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # echo userspace > scaling_governor 
  4.  
  5. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_setspeed     
  6.  
  7. 1574400 

 

1、set overall cpu info

從宏觀層面,我們可以對(duì)CPU運(yùn)行的核數(shù)進(jìn)行設(shè)置,即可實(shí)現(xiàn)對(duì)特定CPU的開(kāi)啟和關(guān)閉。當(dāng)然,我們?cè)谇懊嬉呀?jīng)說(shuō)過(guò),CPU0始終會(huì)處于運(yùn)行狀態(tài),因此我們無(wú)法將CPU0進(jìn)行關(guān)閉。

設(shè)置的方式很簡(jiǎn)單,就是往/sys/devices/system/cpu/cpu[i]/online文件中寫值即可,寫1時(shí)開(kāi)啟指定CPU,寫0時(shí)關(guān)閉指定CPU。

  1. # turn off cpu1 
  2.  
  3. root@hammerhead:/sys/devices/system/cpu/cpu1 # echo 0 > online 
  4.  
  5. root@hammerhead:/sys/devices/system/cpu/cpu1 # cat online 
  6.  

 

2、set specified cpu info

在對(duì)特定CPU的頻率進(jìn)行設(shè)定前,我們需要知道的是,CPU并不能工作在任意頻率下,我們只能將CPU的頻率設(shè)定為它支持的數(shù)值。

通過(guò)查看scaling_available_frequencies,我們可以獲得當(dāng)前CPU支持的頻率值。

  1. root@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_frequencies 
  2.  
  3. 300000 422400 652800 729600 883200 960000 1036800 1190400 1267200 1497600 

 

接下來(lái),我們就可以對(duì)CPU的工作頻率進(jìn)行設(shè)置了。

如何進(jìn)行設(shè)置呢?剛開(kāi)始的時(shí)候,我覺(jué)得將特定的頻率值寫入scaling_setspeed或scaling_cur_freq就可以了,通過(guò)Google搜索得到的方法中也是這種方式。

但經(jīng)過(guò)嘗試,發(fā)現(xiàn)并不可行。為什么會(huì)這樣?我也還沒(méi)有找到答案,希望知道原因的朋友能告訴我。

***經(jīng)過(guò)嘗試,發(fā)現(xiàn)通過(guò)同時(shí)將scaling_max_freq和scaling_min_freq設(shè)置為目標(biāo)頻率值,就可以成功地對(duì)CPU頻率完成設(shè)置。# before setting 

  1.  
  2. shell@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq $ cat scaling_cur_freq 
  3.  
  4. 1574400      
  5.  
  6. # setting 
  7.  
  8. shell@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq $ echo 1728000 > scaling_min_freq 
  9.  
  10. shell@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq $ echo 1728000 > scaling_max_freq      
  11.  
  12. after setting 
  13.  
  14. shell@hammerhead:/sys/devices/system/cpu/cpu0/cpufreq $ cat scaling_cur_freq 
  15.  
  16. 1728000 

 

責(zé)任編輯:龐桂玉 來(lái)源: 安卓開(kāi)發(fā)精選
相關(guān)推薦

2015-09-11 15:41:08

2023-06-06 16:10:11

2021-10-25 11:45:47

惡意軟件AndroidTangleBot

2010-03-03 14:51:02

Android手機(jī)

2010-03-04 16:38:37

Android開(kāi)發(fā)技巧

2010-03-17 14:56:28

路由設(shè)備測(cè)試

2020-07-01 07:19:03

物聯(lián)網(wǎng)安全隱私

2021-11-12 09:27:34

物聯(lián)網(wǎng)設(shè)備技術(shù)

2010-02-07 10:21:27

Android應(yīng)用程序

2023-03-08 21:30:33

2012-12-25 13:37:29

Android代碼混淆

2021-06-30 13:13:33

物聯(lián)網(wǎng)IOT大數(shù)據(jù)

2015-06-25 10:01:48

AndroidIPv6

2010-03-02 17:55:33

Android系統(tǒng)

2017-04-21 12:30:45

AndroidAndroid O設(shè)備標(biāo)識(shí)符

2011-05-09 00:19:03

Android 3.0蜂巢Android

2021-06-15 20:59:14

Kubernetes調(diào)試容器

2009-12-08 17:08:13

WCF Service

2010-02-22 15:13:01

Python模塊

2010-02-22 10:18:29

Python代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)