linux cpu如何開啟性能模式
今天我們的一臺數(shù)據(jù)庫服務器,業(yè)務研發(fā)反饋tp999會不時的彪高,我們查詢了各種指標,發(fā)現(xiàn)網(wǎng)絡重傳比較高,同事cpu的load比較高,但是統(tǒng)一宿主機上其他的docker沒有重傳,因此不是網(wǎng)卡的問題,通過dmesg,發(fā)現(xiàn)有cpu降頻的相關日志。
發(fā)現(xiàn)是cpu降頻引起的。
查看,系統(tǒng)設置的是非高性能模式。需要設置成高性能模式。
相關日志如下:
perf: interrupt took too long (166702 > 165147), lowering kernel.perf_event_max_sample_rate to 1000一般服務器的CPU都支持自動睿頻,而服務器的CPU一般默認運行于ondemand模式,會有中斷開銷,睿頻的時候提升下降也是有額外的開銷,特別是對于一些低端cpu比如C2350,C2338,N2800這些低價獨服的CPU,影響更大。
模式說明:
performance:運行于最大頻率powersave:運行于最小頻率userspace:運行于用戶指定的頻率ondemand:按需快速動態(tài)調(diào)整CPU頻率, 一有cpu計算量的任務,就會立即達到最大頻率運行,空閑時間增加就降低頻率conservative:按需快速動態(tài)調(diào)整CPU頻率, 比 ondemand 的調(diào)整更保守schedutil:基于調(diào)度程序調(diào)整 CPU 頻率Centos7 設置方法# yum install -y cpupowerutils# cpupower frequency-info# cat /proc/cpuinfo# cpupower frequency-set -g performance查看方式,可以比較前后的設置
# cat /proc/cpuinfo | grep MHzDebian設置方法安裝工具
apt install cpufrequtils編輯 /etc/default/cpufrequtils 如不存在則創(chuàng)建,添加條目
GOVERNOR=”performance”重啟生效
systemctl restart cpufrequtils linux系統(tǒng)調(diào)優(yōu)-CPU問題Linux下系統(tǒng)調(diào)優(yōu),內(nèi)容總結主要來自于工作經(jīng)驗和參考部分網(wǎng)絡博客及紅帽官方博客的結合,主要選取了一些個人理解的以及有過實踐的內(nèi)容,還有一些覺得比較有價值但是沒實踐過的方向。
之所以要總結系統(tǒng)調(diào)優(yōu),是因為我們服務器廠商在硬件配置一定,BIOS選項配置一定的情況下, 再想讓相關性能獲得提升就只能在系統(tǒng)下進行設置,因此也是有必要有一個完整的了解。
因為是比較完整的,可能羅列出了許多方向,對于這些方向,怎么樣調(diào)能帶來怎么樣的效果,肯定是需要實踐后才能確認的,在遇到具體問題和需求時可以從這些方向上下手,分成五個小部分,分別是CPU、內(nèi)存、存儲、網(wǎng)絡、整體工具tuned-adm
一、Cpu1.CPU工作模式
CPU的性能設置和查詢通過cpupower工具來完成,一共有下圖五種模式
需要CPU時時刻刻工作在最高頻率的話設置為performance就可以,如下圖是查詢當前頻率信息和設置性能模式的方法
2.談談監(jiān)控
簡單的監(jiān)控我推薦使用turbostat工具查看CPU各個核心的實時工作頻率,如果用lscpu命令或者cat /proc/cupinfo查看到的CPU頻率,可能不是準確的,結合實踐以及查閱了一些資料基本可以確認turbostat的計算方式是更準確的。
本博客之前有一篇放了一個CPU頻率監(jiān)測腳本,那個腳本內(nèi)是監(jiān)測/proc/cpuinfo的,目前來看其實有點缺陷,但是因為這種不準確往往出現(xiàn)在CPU頻率是最高的時候,所以用來監(jiān)測頻率降低這些異常還是沒什么問題的。
如下圖是turbostat直接敲下的例子,
還可以用sysstat工具里的mpstat命令監(jiān)控各個核心的使用率,如下圖是查詢當前非idle的核心,這種監(jiān)控方式用來幫助我們定位一些CPU性能為瓶頸時的系統(tǒng)性能問題,可以找到異常核心
3.優(yōu)化進程
上面說的是整個系統(tǒng)的設置,具體到我們需要對某個進程來多分配些CPU資源,或者避免進程之間使用相同的CPU資源,影響了進程的性能,可以使用taskset工具,taskset –c 0,1 ./xxx.sh就是把0,1核心分配給了這個腳本。
這個工具相對簡易一點,更推薦使用的是numactl工具。
這個工具管理的更為全面,通過numactl –hardware可以查看如下圖,每個node節(jié)點分配到的內(nèi)存與CPU核心
通過下圖的方法可以知道某個設備所在的numa節(jié)點,并根據(jù)numa節(jié)點知道設備對應所在的CPU核心,如果是類似網(wǎng)卡設備調(diào)優(yōu),那么網(wǎng)卡測試進程就綁在網(wǎng)卡所在的CPU核心上,硬盤測試同理
當然如果資源比較充裕,不用管具體哪些核心,把某個numa節(jié)點下的cpu核心全綁定在某進程上也可以,通過numactl –cpubind=0 –membind=0 ./xxx.sh就可以把nudo0的資源分配給這個腳本,設置之后,也可以使用numastat命令查看各個節(jié)點的使用狀態(tài)
各個具體參數(shù)可以去網(wǎng)上找博客查看,我了解到的就是othernode如果過高,說明你的分配或者是系統(tǒng)自動分配的不太合理,需要重新分配相關進程資源。
除此之外nuamctl也可以和taskset一樣自由分配CPU節(jié)點,通過numactl –C 0-15 ./xx.sh即可將腳本綁定到0-15核心上。
要注意的是,我們在綁核的時候,無論是taskset還是nuamctl,都盡量不要跨numa,比如0-15要確保是一個numa節(jié)點上的,是否是一個numa節(jié)點可以通過numactl –hardware的結果里看到
4.CPU中斷irqbalance
如果CPU中斷沒有很好的平衡,容易出現(xiàn)性能瓶頸,正常情況下需要啟用
service irqbalacne start在之前的工作中有印象給網(wǎng)卡設置過中斷來提升網(wǎng)卡性能,下面的第一條命令可以列出所有中斷號,其中第一列是中斷號,第七列可以看是什么設備。
第二條命令可以查看該中斷號對應的CPU核心,通過echo XX具體的核心數(shù)可以更改具體的核心,通常需要該核心同樣是網(wǎng)口所在numa節(jié)點的核心,性能會比較好
cat /proc/interruptscat /proc/irq/55/smp_affinity_list總結以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
