日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高通---GPUCPU频率和工作模式的获取设置

發布時間:2025/3/21 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高通---GPUCPU频率和工作模式的获取设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1gpu信息獲取

1.1 高通gpu說明?

? ? ? 高通設備CPU采用cpufreq框架動態調節頻率,相似的GPU這塊采用了Linux?devfreq框架進行調節。Devfreq有四種對頻率的管理策略governor(框架規定,實際實現各廠商不同):

1、? performance:GPU會固定工作在其支持的最高頻率上,以追求最高性能。

2、? powersave:GPU會固定工作在其支持的最低頻率上,以追求最低的功耗。

3、? userspace:早期的管理策略,系統將變頻策略的決策交給了用戶態應用程序,并提供相應的接口供其使用。

4、? ondemand:userspace 是用戶態的檢測,效率低,而 ondemand 則是一個完全在內核態下工作并且能夠以更加細粒度的時間間隔對系統負載情況進行采樣分析的 ?governor 。

1.2高通設備gpu工作模式:

????Qualcomm的GPU則使用的是他們自己的governor:msm-adreno-tz,他和ondemand有點相似,是在內核態根據GPU的負載來動態決定如何變頻的。

?

高通給的可以手動調節GPU頻率的接口為:

echo 1 >/sys/class/kgsl/kgsl-3d0/force_clk_on

echo 10000000 >/sys/class/kgsl/kgsl-3d0/idle_timer

echo performance >/sys/class/kgsl/kgsl-3d0/devfreq/governor

echo <max freq | other freq> ?> /sys/class/kgsl/kgsl-3d0/gpuclk

參數設置解釋:

1、echo 1 > force_clk_on是設置KGSL_PWRFLAGS_CLK_ON這個power_flags。使用echo freq > gpuclk時,是通過kgsl_pwrctrl_pwrlevel_change設置頻率,它會判斷KGSL_PWRFLAGS_CLK_ON這個power_flags,如果沒有這個flag,可能就不會真正的設置頻率。

2、echo 10000000 > idle_timer,,設置interval_timeout,默認值是80ms。

???當系統啟動的時候,在governorrestart的過程中,會重新初始化GPU所對應的頻率,這樣即使我們設置了我們想要的頻率,最后也很快就被沖掉了,所以要把該interval_timeout設置為很大。

3、echo performance > devfreq/governor, 這時devfreq會為Adreno重新選擇governor,也就是performance。這時它會使用GPU所支持的最大頻率,而不考慮系統的負載。

???默認的msm-adreno-tz機制會不停的動態更新頻率,即使我們設置過頻率也會被覆蓋掉,這就是為什么直接設置頻率無效的原因。而如果改成performance機制,這樣它會使得Adreno動態的調整機制無效,我們的設置才會生效。

4、echo freq > gpuclk,簡單的設置GPU的頻率,一般是在200 000? 000, 320 000 000和450 000 000之間,如果不對,就會就近選擇這三者之一。

1.3 相關gpu信息節點位置

設備gpu信息的獲取:

目錄:

/sys/class/kgsl/kgsl-3d0

gpubusy? 獲取gpu使用率

gpuclk?? gpu工作頻率

max_gpuclk? 最大工作頻率

gpu_available_frequencies? 可用頻率

force_clk_on?? 寫入1,可以動態調節頻率

devfreq ->../../devfreq/1c00000.qcom,kgsl-3d0?

目錄:

/sys/class/kgsl/kgsl-3d0/devfreq

available_frequencies?? //可用gpu頻率

available_governors??? //可用gpu模式

cur_freq????????????? //當前工作頻率

device ->../../../1c00000.qcom,kgsl-3d0

governor???????? //當前工作設置的模式

max_freq??????? //最大gpu工作頻率

min_freq??????? //最小gpu工作頻率

polling_interval?

power?????????

subsystem ->../../../../../class/devfreq

target_freq???

trans_stat???

uevent

1.4 gpu信息獲取

Gpu使用率獲取:會得到兩個值,(前一個/后一個)*100%=使用率

adb shell cat?? /sys/class/kgsl/kgsl-3d0/gpubusy

?

Gpu工作頻率:

adb shell cat?? /sys/class/kgsl/kgsl-3d0/gpuclk

adb shell cat?? /sys/class/kgsl/kgsl-3d0/devfreq/cur_freq

?

Gpu最大、最小工作頻率:

adb shell cat? /sys/class/kgsl/kgsl-3d0/devfreq/max_freq

adb shell cat? /sys/class/kgsl/kgsl-3d0/devfreq/min_freq

?

Gpu可用頻率

adb shell cat?? /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies

adb shell cat?? /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies

?

Gpu可用工作模式:

adb shell cat?? /sys/class/kgsl/kgsl-3d0/devfreq/available_governors

?

Gpu當前工作模式:

adb shell cat??? /sys/class/kgsl/kgsl-3d0/devfreq/governor

1.5 高通820設備gpu信息獲取

Gpu最大、最小工作頻率:

624000000

401800000

模式:msm-adreno-tz

Gpu可用頻率

624000000 560000000 510000000401800000 315000000 214000000 133000000

?

(1)無論在滅屏、亮屏、還是在gpu消耗90%以上的條件下,GPU的工作模式都沒有改變,全都是msm-adreno-tz。

(2)Gpu使用率、頻率獲取:

?亮屏狀態下:?

對于tsvr Launcher應用,轉動設備(場景復雜度不同),gpu使用率78-82%時,gpu頻率510000000,560000000(很少出現);

Gpu使用率70%-75%時,gpu頻率為401800000

?

小蜜蜂游戲:游戲運行過程中gpu使用率大約72-80%,頻率為315000000 ,游戲結束不退出,gpu使用率 75%-85% 左右,gpu頻率為560000000 || 640000000

VRhero應用:

運行過程中,gpu使用率78%-83%,gpu頻率510000000,560000000,624000000,其中大部分時間段頻率為560000000,624000000.

Vr Coaster應用:

運行過程中gpu使用率70-81%,gpu頻率624000000,560000000,510000000.

Nijia切水果游戲:

游戲運行過程中Gpu使用率62%-71%,gpu頻率214000000(極少出現),315000000,401800000,510000000

?

?滅屏狀態下:

滅屏前停留在主界面,GPU使用率在剛滅屏前3-5分鐘gpu使用率會維持在75%-81%,gpu工作頻率(401800000出現占80%,510000000出現次數占20%);后面會維持在70%-73%之間,GPU工作頻率(401800000).

滅屏前停留在more app界面:

Gpu使用率維持在79-81%,gpu頻率為315000000,

?

?2 CPU信息的獲取

2.1cpu核心數

設備 sys/devices/system/cpu目錄下可看到CPU有幾個核心,如果四核分別命名為cpu0,cpu1,cpu2,cpu3,每個都是一個文件夾,進入可以查看每個核心的信息。

affected_cpus? //當前工作核心 0 1 2 3

cpu0

cpu1

cpu2

cpu3

cpufreq

cpuidle

kernel_max

modalias

offline

online

possible

power

present

uevent

Cpu0文件夾內部:

cpufreq

cpuidle

online

power

rq-stats

subsystem

topology

uevent

cpufreq文件夾內部:

affected_cpus

cpuinfo_cur_freq

cpuinfo_max_freq

cpuinfo_min_freq

cpuinfo_transition_latency

related_cpus

scaling_available_frequencies//可用頻率

scaling_available_governors//可用模式

scaling_cur_freq//當前頻率

scaling_driver

scaling_governor//模式

scaling_max_freq //最大頻率

scaling_min_freq//最小頻率

scaling_setspeed

stats

?

2.2關閉開啟cpu

cat?/sys/devices/system/cpu/cpu0/online

文件中0表示該核心是offline狀態的,關閉狀態,1表示該核心是online狀態的,開啟狀態。

echo "0" >/sys/devices/system/cpu/cpu0/online # 關閉該CPU

echo "1" > /sys/devices/system/cpu/cpu0/online# 打開該CPU

?

2.3設置CPU工作模式

Cpu支持多種工作模式governor,模式主要對cpu工作頻率進行修改,修改前需要查下CPU支持哪些模式:

adb shell cat??? /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

列舉常見的幾種工作模式:

interactive ondemand userspacepowersave performance

performance性能最好,不降頻,cpu核心會一直保持在可用的最高頻率,ondemand表示使用內核提供的功能,可以動態調節頻率,powersvae表示省電模式,通常是在最低頻率下運行,

userspace表示用戶模式,在此模式下允許其他用戶程序調節CPU頻率。

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


2.4Cpu頻率修改

CPU的頻率不可隨意修改,scaling_available_frequencies文件列舉了支持的頻率,

adb shell cat?? /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

我的820設備工作頻率:

200000 400000 533333 800000 9984001094400 1152000 1209600頻率以Hz為單位的

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

設置好后,我們可以通過scaling_cur_freq文件查看當前這個核心的工作頻率

adb shell cat????? /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

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

?

echo "1152000? " >/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq # 設置最大頻率

echo "200000" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq # 設置最小頻率

? ? ? ? ?設置時“最大值”需要大于等于“最小值”,如果把最小值設置為了最大值,則可用的頻率只有最大值,相當于把模式調成performance。這里設置僅為某個,你需要對每個online的CPU核心都進行設置,同時以上對文件的修改均需要root權限。 可通過減少工作的核心數和限制CPU頻率起到節省電量的目的,但是性能也是顯著降低,但不能引起卡頓,引起了卡頓性能降低的太厲害了就不值得了。

?

2.5 gpu信息獲取的腳本

?下面的代碼是gpu信息獲得腳本,保存成x.pl文件可以獲取gpu信息:

?

#!/usr/bin/perl -w

?

???print "\n";

?

?$gpumax = `adb shell cat?/sys/class/kgsl/kgsl-3d0/devfreq/max_freq`;

?$gpumin = `adb shell cat?/sys/class/kgsl/kgsl-3d0/devfreq/min_freq`;

?$gpuavaifre=`adb shell cat/sys/class/kgsl/kgsl-3d0/gpu_available_frequencies`;

?printf("GPU 最大頻率: %5.2f\n", $gpumax);

?printf("GPU 最小頻率: %5.2f\n", $gpumin);

?printf("GPU 可用頻率: %s\n", $gpuavaifre);

?printf("===================================\n");

?

$lastgpumod="xxxxx";

while(1)

{

?

???&busy;

???print "\n";

???sleep 1 ;

}

???sub busy

???{

?

??????? $gpu3d = `adb shell cat/sys/class/kgsl/kgsl-3d0/gpubusy`;

??????? $pct = 0.0;

??????? if( $gpu3d =~ m/\s*(\d+)\s+(\d+)/)

??????? {

?

??????????? if( $1 > 0 && $2 > 0)

??????????? {

?????????????? $pct = $1 / $2 * 100;

??????????? }

??????????? printf("3D GPU Busy:%5.2f\n", $pct);

??????????? printf("\n");

???????????

??????? }

?

??$gpucurmod= ` adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/governor`;

?

??if($lastgpumod ne? $gpucurmod){

??printf("GPU 當前模式: %s\n", $gpucurmod);

??$lastgpumod=$gpucurmod;

??}

?????#? printf("GPU lastmoshi:%s\n", $lastgpumod);??

??$gpucurfreq = `adb shell cat /sys/class/kgsl/kgsl-3d0/gpuclk `;

??$gpucurfreq2 = `adb shell cat/sys/class/kgsl/kgsl-3d0/devfreq/cur_freq`;

?

??printf("GPU 當前頻率: %s\n", $gpucurfreq);

??#printf("GPU 當前頻率2: %s\n", $gpucurfreq2);

?

}

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的高通---GPUCPU频率和工作模式的获取设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。