主頁 > 作業系統 > android 功耗(1)---android 功耗分析方法和優化

android 功耗(1)---android 功耗分析方法和優化

2020-09-10 00:31:11 作業系統

1、底電流除錯(Rock Bottom Current Optimization)

底電流在手機飛行模式下除錯,每個平臺的底電流資料可能不一樣,具體可以參考release出來的Current Consumption Data檔案或者release note,一般情況下的底電流參考資料上限是:

底電流在手機飛行模式下除錯,每個平臺的底電流資料可能不一樣,具體可以參考release出來的Current Consumption Data檔案或者release note,一般情況下的底電流參考資料上限是:

512M RAM < 1.5mA; 1G RAM < 2mA; 2G RAM < 2.6mA

1.1 校準RF

保證RF的PA、Antenna switch、Tuner、APT、GPIO作業在正常狀態

1.2 飛行模式

開啟飛行模式、關閉GPS、關閉自動旋轉螢屏、關閉自動亮度調節、關閉其他特效效果設定

開啟飛行模式,可以基本避免藍牙、wifi、NFC、網路、FM等的一般影響;

關閉GPS,可以基本排除開啟GPS對底電流的影響;

關閉自動旋轉螢屏,可以基本排除sensor的影響;

關閉自動亮度調節,可以基本排除距離感應到的影響;

關閉其他特效效果設定,如指紋識別、黑屏手勢、智能體感、手勢隔空操作,,,,,,

1.3 使用perf_defconfig

修改device/qcom//AndroidBoard.mk,如果KERNEL_DEFCONFIG := _defconfig,那么改成KERNEL_DEFCONFIG := -perf_defconfig

同時,kernel代碼改用/kernel/arch/arm/configs/-perf_defconfig

是平臺名稱或者專案名稱

1.4 移除debugging APKs

/system/app/Logkit.apk

/system/app/com.qualcomm.qlogcat.apk

/system/xbin/qlogd

1.5 把應用盡量洗掉

在設定-->應用,禁用正在運行的應用

1.6 去掉CPU占用高的行程

adb shell

top

查看CPU占用,去掉在休眠模式下CPU占用大于0的行程,kill掉該行程,若kill不掉則rm掉相關應用,對于占用CPU高的kwork,需要查找驅動原因,

1.7 手動移除所有可以移除的外設

手機連上安捷倫電源,手機開機,然后讓手機進入待機狀態,手動移除TP、LCM、前camera、后camera、sensor、SD卡、SIM卡等可以手動移除的外圍器件,同時觀察并記錄底電流變化,

# mount -o rw,remount -t vfat /dev/block/bootdevice/by-name/modem 

# cd /firmware/image 

# rm wcnss.* 

# reboot 

或者

#lsmod

#rmmod WLAN

移除其他可以移除的芯片(sensor、NFC,,,)

1.8 移除驅動模塊

在kernel/arch/arm/configs/-perf_defconfig中把sensor、TP、LCM、camera等的驅動模塊移除;

或者在對應驅動的Makefile里面,移除驅動代碼

然后編譯bootimage,燒入手機觀察底電流變化

1.9 配置不用的GPIO

將不用的GPIO置為輸入、拉低;配置成SPI、I2C的GPIO,若不用,置為懸空

boot_images/core/systemdrivers/tlmm/config/platform/TLMMChipset.xml,修改GPIO配置,該處配置GPIO的初始狀態,驅動有可能會修改GPIO,

對比專案原理圖與平臺參考原理圖,專案原理圖中多出的NC GPIO要處理掉,

1.10 檢查power相關的NV items

需要跟CE確認,一般如下:

1027 = 0

1895 = 0

1892 = 0

1962 = 0

4679 = 16

4201 = 0

3851 = 0

3852 = 6

7157 = 1

69745 rxd_enable = 0

WCDMA NV:

NV3581 = 0

NV3852 = 6

1.11 排查GPIO、LDO、總線

對比專案原理圖與平臺參考原理圖,排查硬體不一樣的GPIO、LDO、總線配置,

量測各GPIO、LDO、I2C在休眠時候的電壓,需用萬用表準確測量,

休眠時各路I2C GPIO的電壓是多少v,用萬用表準確測量,

如果條件允許,測量所有LDO在休眠前和休眠后的準確電壓,

對于LDO,除錯方法如下:

(1)adb shell關閉LDO

如關閉L3:

cd /sys/kernel/debug/regulator/8916_l3/

echo 0 > enable

(2)LDO太多設備用到,不適合用adb shell來關,可以這樣除錯:

cat /sys/kernel/debug/regulator/8916_l6/consumers
shell@msm8916_32:/sys/kernel/debug/regulator/8916_l6 $ cat consumers 

Device-Supply EN Min_uV Max_uV load_uA 

0-000c-vio Y 1800000 1800000 0 

0-0068-vi2c N 1800000 1800000 0 

5-0038-vcc_i2c Y 1800000 1800000 0 

1a98000.qcom,mdss_dsi-vddio N 1800000 1800000 100 

1a98300.qcom,mdss_dsi_pll-vddio N 1800000 1800000 100 

8916_l6 N 0 0 0 

這樣就可以看到是哪些設備請求了LDO6,然后 找到對應的代碼,在休眠時關掉LDO,喚醒時再打開,

0-000c: 掛在I2C0上地址為0xc 

5-0038: 掛在I2C0上地址為0x38 

查看這兩個設備的驅動代碼是否有執行regulator_enable,

(3)通過暫存器地址關閉LDO

如LDO6的地址是0x14546,則關閉方法是:

# cd /sys/kernel/debug/spmi/spmi-0 

# echo 0x14546 > address 

# echo 1 > count 

# cat data 可以讀暫存器 

# echo 0x00 > data 關LDO6

(4)關閉MPP

在休眠前關閉MPP1、MPP2、MPP3、MPP4

如PM8916的暫存器地址分別是0xA046、0xA146、0xA246、0xA346

在關閉前先cat data以查看原來的值,

GPIO狀態讀取的方法如下:

(1)GPIO dump

為了得到休眠時的GPIO狀態,增加下面的列印:

rpm_proc/core/power/sleep/src/lpr_definition_uber.c
#include "tlmm_hwio.h" 

void deep_sleep_enter(void) 

{ 

uint64 sleep_duration; 

... 

 

SWEVENT(SLEEP_DEEP_SLEEP_ENTER_COMPLETE, sleep_mode.deep_sleep_mode, sleep_duration); 

// For test 

{ 

int num; 

int i=11; 

volatile uint32 cfg ,inout, val; 

 

num = 122; //8916 only. Need modify for 8974/8x10/8x26 etc. 

 

cfg = *(volatile uint32*)HWIO_TLMM_GPIO_CFGn_ADDR(i); //(0x61000000 + i * 0x1000) 

inout = *(volatile uint32*)HWIO_TLMM_GPIO_IN_OUTn_ADDR(i);//(0x61000004 + i * 0x1000) 

val = ((cfg << 16)&0xffff0000) | (inout&0xffff); 

SWEVENT(SLEEP_GPIO_DUMP, i, val); 

} 

mpm_sw_done(sleep_mode.deep_sleep_mode, sleep_duration); 

} while(FALSE); 

} 

 

增加for test下面這一段代碼,

然后再修改:

rpm_proc\core\power\sleep\build\SConscript 

if 'USES_QDSS_SWE' in env: 

QDSS_IMG = ['QDSS_EN_IMG'] 

events = [['SLEEP_DEEP_SLEEP_ENTER=320','deep sleep enter. (sleep mode: %d) (count: %d)'], 

['SLEEP_DEEP_SLEEP_EXIT','deep sleep exit (sleep mode: %d)'], 

['SLEEP_NO_DEEP_SLEEP','bail early from deep sleep. (sleep mode: %d) (reason: %d)'], 

['SLEEP_RPM_HALT_ENTER','rpm halt enter'], 

['SLEEP_RPM_HALT_EXIT','rpm halt exit'], 

['SLEEP_MPM_INTS','pending mpm interrupts at wakeup: (interrupt_status_1 %d), (interrupt_status_2 %d)'], 

['SLEEP_DEEP_SLEEP_ENTER_COMPLETE','deep sleep exit complete (sleep mode: %d)'], 

['SLEEP_DEEP_SLEEP_EXIT_COMPLETE','deep sleep exit (sleep mode: %d)'], 

['SLEEP_MPM_WAKEUP_TIME','mpm wake up time (wakeup time: 0x%0.8x%0.8x)'], 

['SLEEP_GPIO_DUMP','gpio [%d] configuration is %d'],

['SLEEP_EVENT_LAST=383','sleep last event placeholder'] 

增加SLEEP_GPIO_DUMP這一項,

編譯燒寫rpm.mbn,

讓機器休眠,進入download,抓dump,然后將如下日志發給平臺技術支持分析,

CODERAM.bin

MSGRAM.bin

DATARAM.bin

以及新編譯出來的RPM_AAAAANAZR.elf,

在RPM可能不是很方便,也可以用busybox來讀取暫存器,例如讀GPIO11:

Physical Address for GPIO_CFG11 = 0x100B000 

root@android:/data/busybox # ./busybox devmem 0x100B000 32 

./busybox devmem 0x100B000 32 

0x00000203 

GPIO_PULL = "11" PULL_UP 

FUNC_SEL = "0000" FUNCTION GPIO 

DRV_STRENGTH = "000" DRV_2_MA 

GPIO_OE = "1" Output Enable 

1.12 rpm dump

抓rpm dump,然后把log提供給平臺技術支持,

方法如下:

(1)ps_hold接地

在休眠狀態下,接ps_hold到地少于200mS,機器會進入緊急下載狀態,插入USB,QPST會自動得到memory dump,然后上傳以下幾個檔案:

CODERAM.bin

MSGRAM.bin

DATARAM.bin

以及RPM_AAAAANAZR.elf(必須與機器的編譯時間一致匹配的elf)

(2)改reset為download key

發這些命令改reset為download key:

# cd /sys/kernel/debug/spmi/spmi-0 

# echo 0x844 > address 

# echo 4 > count 

# cat data 

00840 -- -- -- -- 0F 07 04 00 

# echo 0x00 0x00 0x01 0x00 > data 

# cat data 

00840 -- -- -- -- 00 00 01 00 

# echo 0x00 0x00 0x01 0x80 > data 

# cat data 

00840 -- -- -- -- 00 00 01 80 

然后長按下鍵,會進入download,之后抓取log方法同上,

如果進不了download,需要確認:

CONFIG_MSM_DLOAD_MODE=y

另外也有可能與nv 4399和905有關系,

1.13 檢查rpm_stats

檢查rpm_stats是否進入vdd min或者xo/no shutdown,使用下面的命令檢查rpm lower power mode count:

cat /sys/kernel/debug/rpm_stats

如果vmin的count是0,則表明設備從來沒有進入vdd min;non-zero則說明設備進入過vdd_min,

RPM Mode: xosd

count:0

time in last mode(msec):0

time since last mode(sec):794

actual last sleep(msec):0

RPM Mode:vmin

count:11

time in last mode(msec):0

time since last mode(sec):359

actual last sleep(msec):110000

1.14 使用Trace32

可以dump出來完整詳細的gpio/clk/pmic資訊,排除休眠時候的狀態例外,

2、待機電流優化(Standby Current Optimization)

2.1 通過adb log排查

adb logcat -v time > YearMounthDayHourMinute_logcat.txt   //main log

adb logcat -v time -b events > YearMounthDayHourMinute_logcat_event.txt   //event log

adb logcat -v time -b radio > YearMounthDayHourMinute_logcat_radio.txt    //radio log

adb shell dmesg > YearMounthDayHourMinute_dmesg.txt                 //kernel log

可以采用功耗問題時間追蹤表來精確追蹤功耗例外,

可以使用如下命令來打開指定檔案的kernel log(以qpnp-adc-tm.c和qpnp-adc-common.c為例):

adb shell mount -t debugfs none /sys/kernel/debug

adb shell "echo 8 > /proc/sys/kernel/printk" 

adb shell "echo 'file qpnp-adc-tm.c +p' > /sys/kernel/debug/dynamic_debug/control"

adb shell "echo 'file qpnp-adc-common.c +p' > /sys/kernel/debug/dynamic_debug/control"

adb shell "echo 8 > /proc/sys/kernel/printk"

為指定的函式開啟log,以qpnpint_handle_irq為例:

adb shell "echo 'func qpnpint_handle_irq +p' > /sys/kernel/debug/dynamic_debug/control" 

#logkit#調出logkit apk,可以保存logcat、dmesg、crash、QXDM、GPU log等日志資訊到手機里面,

2.2 top

通過top命令,可以查詢到cpu占用較高的應用,如果一個應用一直在占用cpu,而此時并沒有打開該應用,那么該應用很可能會導致待機例外,

adb shell

top

“該場景下CPU使用率”是User+System+IOW+IRQ

“模塊相關的CPU占用率”是模塊相關行程占用CPU使用率的總和

2.3 正在運行

設定-->應用-->正在運行,可以看到正在運行的應用或者服務,禁止掉應用或者服務,觀察待機電流變化,

2.4 wakeup debug mask

除錯wakeup問題,可以使能debug功能,然后抓取log,Log中會增加一些debug資訊,

mount -t debugfs none /sys/kernel/debug  

echo 1 > /sys/kernel/debug/clk/debug_suspend  

echo 1 > /sys/module/msm_show_resume_irq/parameters/debug_mask  

echo 4 > /sys/module/wakelock/parameters/debug_mask  

echo 1 > /sys/module/lpm_levels/parameters/debug_mask  

echo 0x16 > /sys/module/smd/parameters/debug_mask  

2.5 wakelock

1、wakeup_sources

kernel wakelock和userspace wakelock都有可能阻止系統睡眠,所有的wakeup_sources均保存在sys節點/sys/kernel/debug/wakeup_sources里面,

該檔案包含了如下資訊:

(1)the total amount of time a wakeup source has prevented suspend

(2)the amount of time a wakelock has been active since the last activation etc. The unit of time is milliseconds.

2、active_since

active_since值可以用來確認wakelock是否正在阻止休眠,如果該值不是零,那么這個wakelock正在作業并且阻止休眠,

3、獲取wakeup_sources的命令

adb root 67754400

adb remount

adb shell 

cat /sys/kernel/debug/wakeup_sources > /data/wakeup_sources.txt

adb pull /data/wakeup_sources.txt

獲得wakeup_sources.txt以后,通過Excel打開,active_since不為0的項為wakeup source,以表2為例,msm_dwc3對應的active-since值481756>0,這意味著msm_dwc3驅動在阻止系統睡眠,下一步需要檢查msm_dwc3驅動代碼及相關log,

表格 2 Wakeup source opened in Excel

4、power:wakeup_source_activate and power:wakeup_source_deactivate events

當一個wakeup source被acquire或者release時候,power:wakeup_source_activate和power:wakeup_source_deactivate event將隨即被寫到trace buffer里面,這樣可以記錄wakeup source被driver使用的頻率,

開啟該功能的方法:

echo "power:wakeup_source_activate power:wakeup_source_deactivate" > /sys/kernel/debug/tracing/set_event


The power:wakeup_source_activate and power:wakeup_source_deactivate events are written to the trace buffer any time a wakeup source is acquired or released and it can provide information on how often a wakeup source is being used by a driver.  

To enable these events, you can enable following:  

echo "power:wakeup_source_activate power:wakeup_source_deactivate" > /sys/kernel/debug/tracing/set_event 

Once the above done, the traces will be present in /sys/kernel/debug/tracing/trace. 

2.6 powertop

powertop用來看CPU的運行統計以協助除錯power問題,powertop的用法如下:

powertop --h

Usage: powertop [OPTION...]

n -d, --dump read wakeups once and print list of top offenders

n -t, --time=DOUBLE default time to gather data in seconds

n -r, --reset Reset PM stats data

n -h, --help Show this help message

n -v, --version Show version information and exit

獲取powertop log的方法:

  1. 通過USB連接手機到電腦

  2. adb shell,然后執行如下命令:

sleep 10 && /data/powertop [-r] -d -t 30 > /data/powertop.log &

  1. 拔掉USB線,等待10秒后開始功耗測驗

  2. 插上USB

  3. adb pull /data/powertop.log

2.7 CPU freq log

打開CPU freq change log:

mount -t debugfs none /sys/kernel/debug  

cd /sys/kernel/debug 

echo -n 'file acpuclock-8x60.c +p' > dynamic_debug/control 

echo -n 'file acpuclock-krait.c +p' > dynamic_debug/control

查看cpu freq stats:

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

cat /sys/devices/system/cpu/cpu1/cpufreq/stats 

cat /sys/devices/system/cpu/cpu2/cpufreq/stats 

cat /sys/devices/system/cpu/cpu3/cpufreq/stats

To lock cpu freg:

echo the same freq to following sys mode will lock cpu freq to the setting freq. 

/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 

/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

To enable/disable specific freq for ACPU

ACPU freq table is defined in acpu_freq_tbl_* structure of specific platform. 

arch/arm/mach-msm/acpuclock-.c 

For 8974, it is defined in arch/arm/mach-msm/acpuclock-8974.c. the first column of following table used to enable/disable freq in the row: 1:enable, 0:disable  

static struct acpu_level acpu_freq_tbl_2p3g_pvs0[] __initdata = https://www.cnblogs.com/linhaostudy/p/{ 

{ 1, { 300000, PLL_0, 0, 0 }, L2(0), 800000, 72 }, 

{ 0, { 345600, HFPLL, 2, 36 }, L2(1), 800000, 83 }, 

{ 1, { 422400, HFPLL, 2, 44 }, L2(2), 800000, 101 }, 

{ 0, { 499200, HFPLL, 2, 52 }, L2(2), 805000, 120 }, 

{ 0, { 576000, HFPLL, 1, 30 }, L2(3), 815000, 139 }, 

{ 1, { 652800, HFPLL, 1, 34 }, L2(3), 825000, 159 }, 

{ 1, { 729600, HFPLL, 1, 38 }, L2(4), 835000, 180 }, 

{ 0, { 806400, HFPLL, 1, 42 }, L2(4), 845000, 200 }, 

{ 1, { 883200, HFPLL, 1, 46 }, L2(4), 855000, 221 }, 

{ 1, { 960000, HFPLL, 1, 50 }, L2(9), 865000, 242 }, 

{ 1, { 1036800, HFPLL, 1, 54 }, L2(10), 875000, 264 }, 

{ 0, { 1113600, HFPLL, 1, 58 }, L2(10), 890000, 287 }, 

{ 1, { 1190400, HFPLL, 1, 62 }, L2(10), 900000, 308 }, 

… 

{ 1, { 1958400, HFPLL, 1, 102 }, L2(19), 1040000, 565 }, 

{ 0, { 2035200, HFPLL, 1, 106 }, L2(19), 1055000, 596 }, 

{ 0, { 2112000, HFPLL, 1, 110 }, L2(19), 1070000, 627 }, 

{ 0, { 2188800, HFPLL, 1, 114 }, L2(19), 1085000, 659 }, 

{ 1, { 2265600, HFPLL, 1, 118 }, L2(19), 1100000, 691 }, 

{ 0, { 0 } } 

}; 

2.8 Hoplug cores

Core 0 can’t be hotplugged, Core 1/2/3 can be hotplugged,

To remove core :

echo 0 > /sys/devices/system/cpu/cpu1/online 

echo 0 > /sys/devices/system/cpu/cpu2/online 

echo 0 > /sys/devices/system/cpu/cpu3/online

To add back core:

echo 1 > /sys/devices/system/cpu/cpu1/online

echo 1 > /sys/devices/system/cpu/cpu2/online

echo 1 > /sys/devices/system/cpu/cpu3/online

2.9 Scaling governor

To check scaling governor:

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

To set new governor:

比如:

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

2.10 Mpdecision

Use Mpdecison daemon to start/stop/enable debug with commands below:

Start mpdecison: 

start mpdecision 

n 

Stop mpdecison:

stop mpdecision

Enable mpdecision debug :

start mpdecision --debug 

 

2.11 Power feature enable/disable

Following sys node can be used to enable the lower resource,

echo 2 > /sys/module/lpm_resources/enable_low_power/l2 

echo 1 > /sys/module/lpm_resources/enable_low_power/pxo 

echo 1 > /sys/module/lpm_resources/enable_low_power/vdd_dig 

echo 1 > /sys/module/lpm_resources/enable_low_power/vdd_mem 

echo 1 > /sys/module/pm_8x60/modes/cpu0/power_collapse/suspend_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu1/power_collapse/suspend_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu2/power_collapse/suspend_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu3/power_collapse/suspend_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu0/power_collapse/idle_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu0/standalone_power_collapse/suspend_enabled

echo 1 > /sys/module/pm_8x60/modes/cpu1/standalone_power_collapse/suspend_enabled

echo 1 > /sys/module/pm_8x60/modes/cpu2/standalone_power_collapse/suspend_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu3/standalone_power_collapse/suspend_enabled

echo 1 > /sys/module/pm_8x60/modes/cpu0/standalone_power_collapse/idle_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu1/standalone_power_collapse/idle_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu2/standalone_power_collapse/idle_enabled 

echo 1 > /sys/module/pm_8x60/modes/cpu3/standalone_power_collapse/idle_enabled 

echo 0 to above sys node will disable related low power mode. 

2.12 Check system alarm

get android alarms and statistics: 

adb dumpsys alarm > alarms.txt

 

enable android debug message in logcat: 

setprop persist.alarm.debug 1

2.13 Kernel timer check

Sys node /proc/timer_stats can be used to check kernel timer stastics, customer can use following command to get timer statics in specific scenario:

echo 0 > /proc/timer_stats && sleep 10 && echo 1 > /proc/timer_stats && sleep 30 && cat /proc/timer_stats > /data/timer_stats & 

OEMs need to provide file /data/timer_stats to salesforce case for check.

3、其他功耗項的優化

3.1螢屏對功耗的影響

螢屏亮度等級不同,功耗不同,亮度越低,功耗越低,調低螢屏默認背光亮度等級和螢屏最高亮度設定時候的背光亮度等級,可以優化手機整體功耗表現,

LCD背光等級的設備節點:

/sys/class/leds/lcd-backlight/brightness

默認背光等級和最高亮度背光等級需要同時考慮到用戶體驗和功耗表現,需要一起評估,

另外,除錯LCD的fps幀率,也可以優化功耗,

3.2 CPU/GPU DVFS

CPU/GPU的動態調頻調壓可以優化手機的功耗表現,該影響是整體性的,系統性的,

CPU降頻主要通過兩種方式實作,都可以達到降頻的目標,

1、設定CPU作業在powersave模式,設定該模式后,CPU將一直作業在最低頻率(300000hz),此時手機最省電,但是有可能會出現手機運行變卡頓,

例如:將CPU0置為powersave模式,命令為:

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

例如:將CPU1置為powersave模式,命令為:

echo "powersave" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

ex780共有4個CPU(CPU0~CPU3),都可以這樣處理

2、限制CPU最高頻率,以限制CPU的運行頻率上限

CPU(CPU0~CPU3)可以選擇的頻率值如下所列,即這些數值都可以用作CPU的頻率上限,選擇的頻率上限可以根據實際場景需要來設定,在超級省電模式下,CPU作業的宗旨是:CPU作業頻率低+運行不卡,兩項都要保障,

CPU可以選擇的頻率:

300000 422400 652800 729600 883200 960000 1036800 1190400 1267200 1497600 1574400 1728000 1958400 2265600 2457600

例如:將CPU0的頻率上限設定為960000

echo 960000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

例如:將CPU0的頻率上限設定為422400

echo 422400 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

GPU相關除錯與CPU類似,設備節點路徑/sys/devices/fdb00000.qcom,kgsl-3d0/kgsl/kgsl-3d0

3.3 CPU占用率

應用對cpu的占有率,如果占有率過高,則該應用一般會導致功耗較大,

adb shell

top -m 6 

3.4 游戲功耗

可以從下面幾個方面優化:

降低螢屏背光亮度等級;

采用CPU、GPU動態調頻調壓,并調低CPU、GPU頻率下限;

采用thermal-engine.conf ,

3.5 Camera功耗偏大

降低camera幀率;

降低螢屏背光亮度等級;

采用CPU、GPU動態調頻調壓,并調低CPU、GPU頻率下限;

采用thermal-engine.conf ,

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/205.html

標籤:嵌入式

上一篇:痞子衡嵌入式:導致串行NOR Flash在i.MXRT下無法正常下載/啟動的常見因素之SFDP

下一篇:初級模擬電路:5-5 甲乙類功率放大器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more