ubuntu18.04下cpu睿頻模式設置

由於有一臺老筆記本用來充當服務器,自然會在上面跑些業務。可感覺CPU不給力,於是研究了一下,發現CPU睿頻有挺多有趣的點,遂逐一試了一下,記錄下來。

 

首先就是查看cpu信息,傳統的查看方法有兩種,一種是lscpu,另一種則是查看/proc/cpuinfo文件信息。

但實際上還可以通過sysfs查看cpu主頻,即查看/sys/devices/system/cpu/cpu0/cpufreq目錄下的文件獲得cpu信息。若該目錄爲空,則需要手動apt安裝cpufrequtils軟件包。

cpuinfo_max_freq cpuinfo_min_freq 代表cpu支持的最大、最小頻率
scaling_available_governors 可供軟件選擇的頻率調節策略
scaling_governor 當前選擇的策略
scaling_max_freq scaling_min_freq 軟件調節時的最大、最小頻率
scaling_cur_freq 是軟件當前指定的頻率
scaling_driver 調節頻率的驅動 (當前爲intel_pstate)

注意/sys/devices/system/cpu目錄下有cpu0, cpu1, cpu2, cpu3四個文件夾,對應本機上的4個核心(實際上是2核4線程)。

對於現代 Intel CPU,將使用 pstate 功率驅動程序,而非下列其他驅動程序。此驅動程序的優先級高於其他驅動程序,並編入內核(而非編譯爲模塊)。此驅動程序將自動用於 Sandy Bridge(以及更新的 CPU)。如果在使用這個驅動的時候遇到問題,建議您在 Grub 的內核參數中將其禁用(即修改 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX_DEFAULT= 後添加 intel_pstate=disable)。您可以使用與此驅動程序配套的用戶空間工具,但這些工具不受您的控制。

儘管上述 P State 行爲會受到 /sys/devices/system/cpu/intel_pstate 影響,例如:可以通過 # echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo關閉 Intel 睿頻加速,從而降低 CPU 的溫度。

對於現代 Intel CPU,Linux Thermal Daemon 也提供了一些其他的控制方法(例如 thermald),它們可以通過 P-state、T-state 或 Intel 節能驅動程序來主動控制系統溫度。thermald 也適用於較老的 Intel CPU。如果最新版本的驅動程序不可用,那麼守護進程會還原爲 x86 MSR (Model Specific Register),由 Linux“cpufreq 子系統”來控制系統冷卻。

爲了關閉intel_pstate,可在/etc/default/grub文件中找到GRUB_CMDLINE_LINUX_DEFAULT,在後面加上"intel_pstate=disable",然後執行sudo update-grub。

 

安裝cpufrequtils之後,可執行cpufreq-info查看CPU頻率信息。

接下來即可使用如下指令指定cpu頻率模式

sudo cpufreq-set -g powersave
sudo cpufreq-set -d 1800m -u 2700m   ## 適用模式爲powersave|ondemand|conservative|performance
sudo cpufreq-set -f {1800m~2700m}    ## 適用模式爲userspace

使用上述方式設置後,重啓電腦又會回到默認值。爲了讓該設置長久生效,需安裝sysfsutils,然後編輯/etc/sysfs.conf,在其中加入如下語句(有多少cpu就加多少行)

devices/system/cpu/cpu0/cpufreq/scaling_governor = performance
devices/system/cpu/cpu1/cpufreq/scaling_governor = performance
devices/system/cpu/cpu2/cpufreq/scaling_governor = performance
devices/system/cpu/cpu3/cpufreq/scaling_governor = performance

 

此外,查看和設置cpu頻率還可以使用cpupower工具,該工具需要手動安裝linux-tools-common和linux-tools-generic

sudo apt-get install linux-tools-common linux-tools-generic

安裝完成之後可以用cpupower monitor指令查看cpu信息。

紅框中即爲cpu頻率。也可採用如下指令查看cpu信息。

cpupower -c all frequency-info

如果要設置CPU性能模式,可用如下指令設置。

cpupower -c all frequency-set -g performance    ## 設置爲性能模式
cpupower -c all frequency-set -g powersave      ## 設置爲節能模式

 

如果想使每個核心運行在不同的頻率,需要注意以下問題:

cpufreq提供的很多功能並不被Hardware或者Kernel所支持,所以通過cpufreq設置的功能不一定會按照預期運行。例如,如果利用cpufreq爲每個cpu設置單獨的運行的頻率,現實中在超線程的系統,兩個CPUs可能會綁定在一起,所以必須有相同的頻率。

Intel P-states實際上是提供了一個frequency-voltage對,通過降低cpu運行的電壓來降低cpu的運行頻率。這些frequency-voltage對是離散的,可能與cpufreq提供的可選頻率有出入。

對於intel的cpu,當前消費級別的uncore(如i系),只支持設置唯一一個時鐘頻率。然後是服務器級的uncore(如E系),雖然支持每個核心不同頻率,但是你一旦指定他們運行在不同的頻率,uncore中功耗控制單元(PCU)可能會再次改寫你的請求,因爲PCU可能認爲你的設定不合理。

通過修改MSR IA32_PERF_CTL寄存器貌似可以要求每個核心運行在不同頻率,但是這並不意味着硬件會響應你的請求。

通過設置不同核的電壓,間接改變核心的運行頻率,這一思路受限於很少系統是有與核數量相同的電源來提供運行在不同電壓上。並且在Haswell架構之前,頻率和電壓是綁定的,一起寫入MSR IA32_PERF_CTL。Haswell 提供了 on-chip voltage regulators ,其允許給不同的核心不同的頻率。但這也不意味着硬件會響應你的請求(因爲PCU的存在)。

PCU有最終的決定權,這部分詳細可以去看 Uncore Performance Monitoring Manuals for the various Xeon E5 products

注意以上幾種查看cpu頻率的方式顯示的結果會有所差別,但具體哪個比較準確,我也不知道。

 

最後,可以通過top查看cpu負載情況,

其中紅框中代表1分鐘,5分鐘,15分鐘的系統平均負載情況。也可通過uptime指令查看,

這裏有必要解釋一下平均負載的意思。

系統平均負載:是處於可運行或不可中斷狀態的平均進程數。

可運行進程:使用 CPU 或等待使用 CPU 的進程

不可中斷狀態進程:正在等待某些 IO 訪問,一般是和硬件交互,不可被打斷(不可被打斷的原因是爲了保護系統數據一致,防止數據讀取錯誤)

 

vmstat可用於查看系統內存,cpu上下文切換和中斷次數。(參數1代表每隔1秒輸出一次)

其中cs爲每秒的上下文切換次數;in爲每秒的中斷次數;r表示就緒隊列長度,正在運行或等待 CPU 的進程;b表示不可中斷睡眠狀態的進程數,例如正在和硬件交互。

 

taskset可將進程指定cpu運行。
-p, 設定一個已存在的pid,而不是重新開啓一個新任務
-c, 指定一個處理,可以指定多個,以逗號分隔,也可指定範圍,如:2,4,5,6-8。
例如如下語句將進程13290切換到cpu3上。

taskset -cp 3 13290

以下語句則將任務運行在cpu0,cpu2和cpu3上。

taskset -c 0,2-3 tar jcf test.tar.bz2 test

 

nice則可以指定程序運行的優先級,最高爲-20,最低爲19,常規程序爲0。以下指令指定程序以低優先級10運行。

nice -n 10 tar zcf test.tar.gz test

若要調整已經運行的程序優先級,則需要用renice,例如下面語句將進程13348的優先級調整爲8

renice 8 13348

 

ulimit可以限制當前shell及其派生的子進程的cpu運行時間,因此可在腳本中使用使得腳本執行時間受限。但這樣做可能導致程序無法順利運行完。

#!/bin/bash

ulimit -SHt 100
tar zcvf test.tar.gz test

 

爲了排查cpu負載情況,可安裝stress工具對cpu進行壓力測試,同時利用perf進行性能分析。這部分內容比較多,以後再詳細介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章