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的資訊和工作頻率,一般只要參照底下連結的文章來操作即可。
但如果您用的是Intel i3, i5, i7系列的CPU(應該也是可以支援其他Intel的CPU),還可以使用「i7z」來查看更多(包括有無開啟Turbo Boost和Hyper Thread)、更正確的CPU相關資訊。
基於Debian的Linux發行版,可以使用「apt-get」來安裝「i7z」,指令如下:
sudo apt-get install i7z
sudo i7z
查看CPU是否有開啟Turbo Boost
使用以上提到的「i7z」工具,在監看CPU時,除了會顯示目前CPU核心的頻率外,還會顯示CPU是否有開啟(ENABLE or DISABLE)TURBO,以及不同核心數量使用Turbo Boost時的倍頻。
您可以嘗試讓CPU執行需要大量運算的程式(如壓縮檔案、串流編碼),來測試CPU最高可以自動增加多少頻率,判斷Turbo Boost是否能正常使用。如下圖,在Turbo未被開啟的狀況下,Intel i5-2410M的倍頻大概在23X,頻率約為2.3GHz,即是標準的工作頻率。
查看與設定MSR
MSR(Model-specific Register),是用來控制CPU工作模式的暫存器。MSR各類暫存器資料的定義可以查閱Intel CPU架構的文件,可用以下連結下載。
與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」套件。基於Debian的Linux發行版,可以使用「apt-get」來安裝「msl-tools」,指令如下:
sudo apt-get install msr-tools
接著啟用MSR模組,指令如下:
sudo modprobe msr
讀取IA32_MISC_ENABLE(0x1a0)
Turbo Boost沒有啟用的原因,常常是因為IA32_MISC_ENABLE[38]被設成1了。如果要讀取IA32_MISC_ENABLE的值,可以使用「rdmsr」指令來讀取IA32_MISC_ENABLE的MSR位址「0x1a0」,指令如下:
sudo rdmsr 0x1a0
如上圖,讀出來的結果是「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_ENABLE的MSR位址「0x1a0」,指令如下:
sudo wrmsr 0x1a0 0x850088
注意這裡的「0x」,是16進制的意思。
設定完後,可以再用「i7z」來看以下Turbo是否已經ENABLE了,也可以讓CPU去執行需要大量運算的程式看看工作頻率是否可以達到Turbo的頻率。如下圖,在Turbo開啟的狀況下,Intel i5-2410M的倍頻大概在27X,頻率約為2.7GHz,即是多核心的Turbo頻率。
設定開機後自動開啟或是關閉Turbo Boost
因為MSR的值會在重開機後被重置,因此需要讓Linux系統在開機時自動去執行「wrmsr」指令來設定IA32_MISC_ENABLE[38]。可以用文字編輯器開啟「/etc/profile」,指令如下:
在檔案內加上「wrmsr」指令,例如要開啟Turbo Boost:
sudo wrmsr 0x1a0 0x850088
由於執行「wrmsr」需要先啟用MSR模組,可以在執行「wrmsr」之前先執行「modprobe」,或者是直接將MSR模組加進「/etc/modules」設定檔中,使它在開機時能自動啟用。