Linux 系統設置cpu頻率

source_code: https://github.com/emagii/cpufrequtils

cpufreq-set - A small tool which allows to modify cpufreq settings.(修改內存頻率的工具)

cpufreq-set allows you to modify cpufreq settings without having to type e.g. “/sys/devices/system/cpu/cpu0/cpufreq/scaling_set_speed” all the time.(不需要直接操作sysfs相關節點即可調整cpufreq).

OPTIONS
-c --cpu
number of CPU where cpufreq settings shall be modified.(cpu核心號)

   -d --min <FREQ>new minimum CPU frequency the governor may select.(調控器可以選擇新的最低 CPU 頻率。)-u --max <FREQ>new maximum CPU frequency the governor may select.-g --governor <GOV>new cpufreq governor.(設定調控器類型。)-f --freq <FREQ>specific frequency to be set. Requires userspace governor to be available and loaded.(要設置的特定頻率。要求用戶空間調控器可用并已加載。)-r --relatedmodify all hardware-related CPUs at the same time(同時修改所有與硬件相關的 CPU。)-h --helpPrints out the help screen.

REMARKS(備注/特別說明)
Omitting the -c or --cpu argument is equivalent to setting it to zero.(省略 -c 或 --cpu 參數等同于將其設置為零。)

   The -f FREQ, --freq FREQ parameter cannot be combined with any other parameter except the -c CPU, --cpu CPU parameter.(-f 只能用在存在-c參數的場景。)FREQuencies  can be passed in Hz, kHz (default), MHz, GHz, or THz by postfixing the value with the wanted unit name, without any space (frequency inkHz =^ Hz * 0.001 =^ MHz * 1000 =^ GHz * 1000000).(FREQuencies 可以以 Hz、kHz(默認)、MHz、GHz 或 THz 為單位傳遞,方法是在值后加上所需的單位名稱,沒有任何空格(頻率 kHz =^ Hz * 0.001 =^ MHz * 1000 =^ GHz * 1000000)。)

FILES(依賴文件)
/sys/devices/system/cpu/cpu*/cpufreq/
/proc/cpufreq (deprecated - 廢棄)
/proc/sys/cpu/ (deprecated - 廢棄)

// cpufreq-info -g
|- cpufreq_get_available_governors|- sysfs_get_available_governors(cpu)|- sysfs_read_file(cpu, "scaling_available_governors", linebuf, sizeof(linebuf))

由上述源碼來看,cpuutils的本質是修改cpu sysfs導出的相關節點來調整cpu的頻率。
可是cpu支持哪些governors是在哪里做限定的,scaling_available_governors看到僅支持performance模式。

因為sysfs是內核導出的節點,那就找一找內核源碼??看了下v6.6的內核源碼,發現僅支持兩種模式。

// drivers/cpufreq/cpufreq.c
static unsigned int cpufreq_parse_policy(char *str_governor)
{if (!strncasecmp(str_governor, "performance", CPUFREQ_NAME_LEN))return CPUFREQ_POLICY_PERFORMANCE;if (!strncasecmp(str_governor, "powersave", CPUFREQ_NAME_LEN))return CPUFREQ_POLICY_POWERSAVE;return CPUFREQ_POLICY_UNKNOWN;
}

除了performancepowersave兩種模式,可是為什么其他文章說支持以下所有模式??

命令:sudo cpufreq-set -g 《模式》

powersave,是無論如何都只會保持最低頻率的所謂”省電”模式;
userspace,是自定義頻率時的模式,這個是當你設定特定頻率時自動轉變的;
ondemand,默認模式。一有cpu計算量的任務,就會立即達到最大頻率運行,等執行完 畢就立即回到最低頻率;
conservative,翻譯成保守(中庸)模 式,會自動在頻率上下限調整,ondemand的區別在于它會按需分配頻率,而不是一味追求最高頻率;
performance,顧名思義只注重效率,無論如何一直保持以最大頻率運行。

// cpufreq-set -g
|- cpufreq_modify_policy_governor()|- verify_gov(new_gov, governor) // 對輸入的governor字段做合法性判斷|- sysfs_write_one_value|- sysfs_write_file // 將值寫入到cpu WRITE_SCALING_GOVERNOR節點。
/* write access */enum {WRITE_SCALING_MIN_FREQ,WRITE_SCALING_MAX_FREQ,WRITE_SCALING_GOVERNOR,WRITE_SCALING_SET_SPEED,MAX_WRITE_FILES
};static const char *write_files[MAX_VALUE_FILES] = {[WRITE_SCALING_MIN_FREQ] = "scaling_min_freq",[WRITE_SCALING_MAX_FREQ] = "scaling_max_freq",[WRITE_SCALING_GOVERNOR] = "scaling_governor",[WRITE_SCALING_SET_SPEED] = "scaling_setspeed",
};

從代碼來看,cpufreq-set僅僅是將輸入的governor簡單校驗之后寫入對應節點,真正的governor合法性判斷由內核來做。

// cpufreq_conservative.c
// cpufreq_ondemand.c
// cpufreq_powersave.c
// cpufreq_userspace.c
// cpufreq_performance.c

這寫代碼都被編譯成了單獨的模塊,當向scaling_governor節點寫governor名時,對應的驅動會被加載,同時scaling_available_frequencies也會添加對應的governer

$ lsmod | grep cpu
cpufreq_ondemand       28672  0
cpufreq_conservative    20480  1
cpufreq_powersave      16384  0
acpi_cpufreq           45056  0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207269.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echart中定義brush,默認狀態,觸發狀態

1.定義矩形選擇筆刷&#xff1a;brush 2.設置brush的默認狀態和選中邏輯

理解VAE(變分自編碼器)

1.貝葉斯公式 貝葉斯理論的思路是&#xff0c;在主觀判斷的基礎上&#xff0c;先估計一個值&#xff08;先驗概率&#xff09;&#xff0c;然后根據觀察的新信息不斷修正(可能性函數)。 P(A)&#xff1a;沒有數據B的支持下&#xff0c;A發生的概率&#xff0c;也叫做先驗概率。…

小視頻怎么做成二維碼?視頻二維碼3步生成

在日常工作和生活中經常會看到各種類型的小視頻、短視頻&#xff0c;比如網頁、抖音等等的視頻都是可以下載查看的。當我們想要將下載視頻分享給多個人看時&#xff0c;生成二維碼的方式會更加的方便&#xff0c;那么視頻如何生成二維碼呢&#xff1f;下面就將快捷生成二維碼的…

AI:90-基于深度學習的自然災害損害評估

?? 本文選自專欄:人工智能領域200例教程專欄 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶有在本地跑過的核心代碼,詳細講解供大家學習,希望可以幫到大家。歡迎訂閱支持,正在不斷更新…

第75講:MySQL數據庫MVCC多版本并發控制核心概念以及底層原理

文章目錄 1.當前讀與快照讀的基本概念1.1.當前讀的基本概念1.2.快照讀的基本概念 2.什么是MVCC多版本并發控制3.MVCC多版本并發控制依賴的三個組件重要概念3.1.MySQL表中三個隱式字段的概念3.2.undo log日志以及版本鏈的概念3.3.ReadView讀視圖的概念 4.MVCC實現多版本并發控制…

【FPGA】Verilog:BCD 加法器的實現

0x00 XOR 運算在 2 的補碼加減法中的應用 2 的補碼加減法的特點是&#xff0c;當從某個數中減去負數時&#xff0c;將其轉換為正數的加法來計算&#xff0c;并將減去正數的情況轉換為負數的加法來計算&#xff0c;從而將所有減法運算轉換為加法運算。在這種情況下&#xff0c;…

電商使用在線客服系統有什么好處?

互聯網發展越來越快&#xff0c;電商這個板塊也越加成熟&#xff0c;消費者選擇在線購物時會對比平臺&#xff0c;貨比三家&#xff0c;這個時候電商提供高效便捷且貼心的消費者服務就顯得尤為重要了&#xff0c;在線客服系統作為電商企業與消費者溝通的重要工具&#xff0c;其…

SpringAMQP 快速入門

SpringAMQP 快速入門 1. 創建項目2. 快速入門2.2.1 消息發送2.2.2 消息接收 3. 交換機3.1 Fanout Exchange&#xff08;扇出交換機&#xff09;3.1.1 創建隊列與交換機3.1.2 消息接收3.1.3 消息發送 3.2 Direct Exchange&#xff08;直連交換機&#xff09;3.2.1 創建交換機與隊…

Validate 驗證規則詳解

前言: 以前小編發過一篇Validate 驗證規則 如何使用的&#xff0c;沒有去將Validate 驗證規則的原理應用場景&#xff0c;這篇文章來完善一下。 不知道如何使用的朋友可以點擊下面傳送門 傳送門 講解: Validate 驗證規則通常指的是在 Web 開發中&#xff0c;使用驗證器&…

【開源】基于Vue.js的智慧社區業務綜合平臺

文末獲取源碼&#xff0c;項目編號&#xff1a; S 077 。 \color{red}{文末獲取源碼&#xff0c;項目編號&#xff1a;S077。} 文末獲取源碼&#xff0c;項目編號&#xff1a;S077。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 業務類型模塊2.2 基礎業務模塊2.3 預…

python使用conda管理多個環境

一、Anaconda簡介 Anaconda 是專門為了方便使用 Python 進行數據科學研究而建立的一組軟件包&#xff0c;涵蓋了數據科學領域常見的 Python 庫&#xff0c;并且自帶了專門用來解決軟件環境依賴問題的 conda 包管理系統。主要是提供了包管理與環境管理的功能&#xff0c;可以很方…

精選Axure原型設計模板,RP原型組件庫(PC端移動端元件庫及Axure函數及運算符說明)

好的原型組件會大大的提高產品經理的工作效率&#xff0c;現精選了一批Axure 8的原型設計模板&#xff0c;包含了原型設計的常用元素和AxureRP 8函數及運算符的說明文檔&#xff0c;及各種設備模板框架。 分享給大家可以共同學習&#xff0c;文末可下載完整原型組件包~&#x…

蘋果手機ios系統安裝了一個免簽應用書簽webclip描述文件該如何卸載?

隨著移動應用的普及&#xff0c;越來越多的用戶開始關注到蘋果免簽的應用。相比于需要通過 App Store 審核和簽名的應用&#xff0c;免簽應用無需經過蘋果的審核過程&#xff0c;可以直接安裝和使用。那么&#xff0c;蘋果免簽應用是如何制作的呢&#xff1f;本文將介紹制作蘋果…

K3cloud-計算成本分析DEmo

業務背景 用于分析各月計劃與實際物料及費用偏差。費用根據成本計算表分攤邏輯需要計算后按產線、車間、公司等費用掛的成本中心&#xff0c;按價值法進行均攤。此含稅價取最近一次采購價格&#xff0c;按月會發生變化。 代碼示例 –建立臨時表 CREATE TABLE #KD_CB ( [公司…

SQL進階 | CASE表達式

本文所有案例基于《SQL進階教程》實現。 概述 SQL中的CASE表達式是一種通用的條件表達式&#xff0c;類似于其他語言中的if/else語句。它用于在SQL語句中實現條件邏輯。CASE表達式以WHEN子句開始&#xff0c;后面跟著一個或多個WHEN條件&#xff0c;每個WHEN條件后面跟著一個TH…

C++相關閑碎記錄(3)

1、reference wrapper 例如聲明如下的模板&#xff1a; template <typename T> void foo(T val); 如果調用使用&#xff1a; int x; foo(std::ref(x)); T變成int&&#xff0c;而使用調用 int x; foo(std::cref(x)); T變成const int&。 這個特性被C標準庫用…

fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封裝&#xff0c; 是一款支持 android 和 iOS 的 Flutter 媒體播放器插件&#xff0c; 由 ijkplayer 底層驅動。 通過紋理&#xff08;Texture&#xff09;接入播放器視頻渲染到 Flutter 中。 前言 目前使用…

設置單擊右鍵可以選擇用VS Code打開文件

設置單擊右鍵可以選擇用VS Code打開文件_通過code打開-CSDN博客

PostgreSQL 技術內幕(十二) CloudberryDB 并行化查詢之路

隨著數據驅動的應用日益增多&#xff0c;數據查詢和分析的量級和時效性要求也在不斷提升&#xff0c;對數據庫的查詢性能提出了更高的要求。為了滿足這一需求&#xff0c;數據庫引擎不斷經歷創新&#xff0c;其中并行執行引擎是性能提升的重要手段之一&#xff0c;逐漸成為數據…

sh腳本移動文件

內容&#xff1a;兩臺服務器&#xff0c;one 和 two ,在one的指定目錄下&#xff0c;找到指定結尾的文件&#xff0c;將這個文件移到two服務器的指定路徑下&#xff0c;同時將one的源文件 移到 其他目錄下。 #!/bin/bash# 指定源路徑 source_path"/u01/isi/75_files_te…