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