Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?


Intel i5、i7系列的CPU擁有Turbo Boost(渦輪加速)的技術,可以在CPU負載量增大的時候暫時提升CPU的頻率,以求在更短的時間內完成工作。在不同的Linux作業系統及硬體下,Turbo Boost不一定會自動打開。在Turbo Boost關閉的情況下,電腦雖然可以比較低溫省電,但是在忙碌時刻將無法發揮出CPU應有的效能。在Linux系統中,該如何查看以及開關Intel CPU的Turbo Boost呢?

Intel CPU專門的監看工具-i7z

查看CPU的資訊和工作頻率,一般只要參照底下連結的文章來操作即可。

https://magiclen.org/linux-view-cpu/

但如果您用的是Intel i3, i5, i7系列的CPU(應該也是可以支援其他IntelCPU),還可以使用「i7z」來查看更多(包括有無開啟Turbo BoostHyper Thread)、更正確的CPU相關資訊。

基於DebianLinux發行版,可以使用「apt-get」來安裝「i7z」,指令如下:

sudo apt-get install i7z

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

安裝完後,執行以下指令即可使用i7z來監看CPU。

sudo i7z

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

查看CPU是否有開啟Turbo Boost

使用以上提到的「i7z」工具,在監看CPU時,除了會顯示目前CPU核心的頻率外,還會顯示CPU是否有開啟(ENABLE or DISABLE)TURBO,以及不同核心數量使用Turbo Boost時的倍頻。

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

您可以嘗試讓CPU執行需要大量運算的程式(如壓縮檔案、串流編碼),來測試CPU最高可以自動增加多少頻率,判斷Turbo Boost是否能正常使用。如下圖,在Turbo未被開啟的狀況下,Intel i5-2410M的倍頻大概在23X,頻率約為2.3GHz,即是標準的工作頻率。

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

查看與設定MSR

MSR(Model-specific Register),是用來控制CPU工作模式的暫存器。MSR各類暫存器資料的定義可以查閱Intel CPU架構的文件,可用以下連結下載。

https://file.magiclen.org/index.php?file=696e74656c2d36342d69612d33322d617263686974656374757265732d70322e726172

Turbo Boost有關的MSR暫存器有兩個,一是IA32_MISC_ENABLE(0x1a0),二是IA32_PERF_CTL(0x199)。IA32_MISC_ENABLE的第38個bit必須為0(IA32_MISC_ENABLE[38]=0),且IA32_PERF_CTL的第32個bit必須為0(IA32_PERF_CTL[32]=0),Turbo Boost才可以被啟用。IA32_MISC_ENABLE[38]的值通常是由BIOS來控制的,若IA32_MISC_ENABLE[38]=1,會禁用Opportunistic Processor Performance Operation。IA32_PERF_CTL[32]的值是由作業系統來控制的,若作業系統不想使用Turbo Boost,可以將IA32_PERF_CTL[32]設為1,但通常作業系統應該是不會這樣做啦。

Linux上若要讀寫MSR,可以安裝「msr-tools」套件。基於DebianLinux發行版,可以使用「apt-get」來安裝「msl-tools」,指令如下:

sudo apt-get install msr-tools

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

接著啟用MSR模組,指令如下:

sudo modprobe msr

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

讀取IA32_MISC_ENABLE(0x1a0)

Turbo Boost沒有啟用的原因,常常是因為IA32_MISC_ENABLE[38]被設成1了。如果要讀取IA32_MISC_ENABLE的值,可以使用「rdmsr」指令來讀取IA32_MISC_ENABLEMSR位址「0x1a0」,指令如下:

sudo rdmsr 0x1a0

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

如上圖,讀出來的結果是「4000850088」(不同硬體和軟體可能有不同的結果),請注意這個數值是16進制的,可以換算成2進制來看。4000850088(16)=0100000000000000100001010000000010001000(2)。LSB為第0個位元,往左數38個位元,可以發現第38個位元數值為1,所以Turbo Boost沒被啟用(可直接透過「i7z」看到)。

如果要啟用Turbo Boost,當然就是得把IA32_MISC_ENABLE[38]設為0,所以數值會變成「850088(16)」。可以使用「wrmsr」指令來設定IA32_MISC_ENABLEMSR位址「0x1a0」,指令如下:

sudo wrmsr 0x1a0 0x850088

注意這裡的「0x」,是16進制的意思。

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

設定完後,可以再用「i7z」來看以下Turbo是否已經ENABLE了,也可以讓CPU去執行需要大量運算的程式看看工作頻率是否可以達到Turbo的頻率。如下圖,在Turbo開啟的狀況下,Intel i5-2410M的倍頻大概在27X,頻率約為2.7GHz,即是多核心的Turbo頻率。

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

設定開機後自動開啟或是關閉Turbo Boost

因為MSR的值會在重開機後被重置,因此需要讓Linux系統在開機時自動去執行「wrmsr」指令來設定IA32_MISC_ENABLE[38]。可以用文字編輯器開啟「/etc/profile」,指令如下:

sudo pluma /etc/profile

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

在檔案內加上「wrmsr」指令,例如要開啟Turbo Boost

sudo wrmsr 0x1a0 0x850088

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

由於執行「wrmsr」需要先啟用MSR模組,可以在執行「wrmsr」之前先執行「modprobe」,或者是直接將MSR模組加進「/etc/modules」設定檔中,使它在開機時能自動啟用。

sudo pluma /etc/modules

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

Linux下如何開啟或關閉Intel CPU的Turbo Boost功能?

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章