新聞中心
PART 01 簡介
本文以VPN服務(wù)器為例子,介紹定位服務(wù)器性能瓶頸的三個(gè)步驟以及三種優(yōu)化X86 NUMA架構(gòu)服務(wù)器網(wǎng)絡(luò)處理性能的方法。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),乳源企業(yè)網(wǎng)站建設(shè),乳源品牌網(wǎng)站建設(shè),網(wǎng)站定制,乳源網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,乳源網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
PART 02 NUMA架構(gòu)介紹
NUMA(Non-Uniform Memory Access,非統(tǒng)一內(nèi)存訪問)架構(gòu),能夠很好地解決SMP技術(shù)對CPU核數(shù)的制約。NUMA架構(gòu)將多個(gè)核結(jié)成一個(gè)節(jié)點(diǎn)(Node),每一個(gè)節(jié)點(diǎn)相當(dāng)于是一個(gè)對稱多處理機(jī)(SMP),不同的CPU之間采用QPI(Quick-Path Interconnect)實(shí)現(xiàn)高帶寬低時(shí)延的片間通訊。Intel QPI與AMD HT互連比較類似。
上圖中我畫是Intel X86通用服務(wù)器架構(gòu)中的一種,每顆CPU有一個(gè)NUMA Node,每個(gè)NUMA Node有固定數(shù)量CPU Core。下面我會(huì)以Intel Xeon(R) Gold 5218 CPU @ 2.30GHz作為VPN服務(wù)器的CPU,介紹三種常見的X86網(wǎng)絡(luò)服務(wù)器性能優(yōu)化的方法。VPN服務(wù)器的硬件參數(shù)配置如下:
CPU:
網(wǎng)卡:Intel x710-DA4
系統(tǒng):CentOS Linux release 8.4.2105
PART 03 三個(gè)步驟確定優(yōu)化方向
第一步:建立優(yōu)化基準(zhǔn)
在性能優(yōu)化之前,我們需要對設(shè)備當(dāng)前的性能做全面的評(píng)估建立基準(zhǔn)。這個(gè)基準(zhǔn)就是在當(dāng)前硬件配置下,基于某一個(gè)特定版本軟件(比如:VPN ver1.0.1),使用專業(yè)的網(wǎng)絡(luò)壓力測試儀(比如:思博倫Testcenter、信爾泰Bigtao、ixia等)對系統(tǒng)進(jìn)行網(wǎng)絡(luò)壓力測試。評(píng)估系統(tǒng)當(dāng)前設(shè)備CPU利用率、網(wǎng)絡(luò)吞吐、網(wǎng)絡(luò)時(shí)延等參數(shù),建立一個(gè)優(yōu)化的基準(zhǔn)線。在測試儀參數(shù)配置方面,可根據(jù)具體產(chǎn)品功能特性,盡量配置接近現(xiàn)網(wǎng)運(yùn)行的流量參數(shù)。
以VPN ver1.0.1為例,我們可以根據(jù)產(chǎn)品自身的一些功能特性記錄相應(yīng)的參數(shù)。下邊是一部分我記錄的一部分基準(zhǔn)參數(shù):
第二步:確定性能瓶頸
使用專業(yè)的網(wǎng)絡(luò)壓力測試儀表對設(shè)備進(jìn)行全面的壓力測試,同時(shí)觀察和記錄設(shè)備和儀表的運(yùn)行狀態(tài)。比如線性增加儀表吞吐量分別記錄設(shè)備在各個(gè)吞吐量級(jí)別的CPU利用率、丟包率、CPU Cache Miss情況、參與處理流量設(shè)備CPU核數(shù)量。記錄的越詳細(xì)和評(píng)估的越全面(比如使用小包、中長包、大包、隨機(jī)長度包進(jìn)行壓力測試)將更有助于軟件性能瓶頸的分析和確認(rèn)優(yōu)化的方向。
第三步:實(shí)施優(yōu)化
壓力測試和詳細(xì)記錄測試過程是為了確定性能瓶頸和優(yōu)化方向。通過詳細(xì)分析對比測試記錄去確定我們的優(yōu)化方向。系統(tǒng)的性能瓶頸通常會(huì)在CPU利用率較低、IO阻塞、Cache Miss較多、存在跨NUMA訪問內(nèi)存等方面。在確認(rèn)了幾個(gè)優(yōu)化方向后,我們就可以從硬件和軟件程序兩個(gè)方向?qū)υO(shè)備性能進(jìn)行優(yōu)化。比如通過修改代碼提高CPU Cache命中率、調(diào)整網(wǎng)卡PCIE插槽避免跨訪問和在BIOS中(Basic Input Output System)一些CPU、網(wǎng)卡參數(shù)等。
PART 04 三種方法提升處理性能
下面介紹三種提升網(wǎng)絡(luò)設(shè)備性能的方法:
- CPU核隔離
CPU不僅要運(yùn)行進(jìn)程還要處理中斷,如果一個(gè)進(jìn)程運(yùn)行的CUP處理中斷的次數(shù)過多,勢必會(huì)影響進(jìn)程的運(yùn)行。為了不影響進(jìn)程,可以將CPU進(jìn)行隔離,比如有4核CPU,可以隔離出2核CPU,并和進(jìn)程進(jìn)行綁定用于專門運(yùn)行進(jìn)程,剩下的兩核處理中斷,這樣運(yùn)行進(jìn)程的CPU就不會(huì)處理中斷,提高進(jìn)程的運(yùn)行效率。
查看隔核情況的代碼如下,從運(yùn)行結(jié)果可以看到我的這臺(tái)機(jī)器目前未開啟核隔離功能。
vim /etc/default/grub #根據(jù)實(shí)際情況在GRUB_CMDLINE_LINUX后邊添加下面配置isolcpus=2-11 #設(shè)置核隔離,使轉(zhuǎn)發(fā)核專注用于轉(zhuǎn)發(fā)rcu_nocbs=2-11 kthread_cpus=0-1#將RCU Callback,內(nèi)核線程,中斷移出轉(zhuǎn)發(fā)核 irqaffinity=0-1 #將轉(zhuǎn)發(fā)核設(shè)置成無時(shí)鐘滴答核,減少時(shí)鐘中斷次數(shù)default_hugepagesz=1G hugepagesz=1G hugepages=64 #設(shè)置大頁內(nèi)存默認(rèn)頁大小為1G, 分配大頁內(nèi)存nmi_watchdog=0 #關(guān)閉看門狗
使用下面命令更新grub配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
接下來重啟機(jī)器再次查看核隔離情況:
可以看到我們前面添加的一些配置都生效了。
在核隔離設(shè)置完成后,我們可以通過下面Linux系統(tǒng)提供的親核性接口設(shè)置我們的程序,提高程序的處理性能。那什么是CPU“親核性”呢?CPU的親核性就是讓某個(gè)進(jìn)程(比如我們的程序)長時(shí)間運(yùn)行在某個(gè)或者某些我們設(shè)定的核上,不參與Linux 內(nèi)核進(jìn)程調(diào)度器的調(diào)度。我們可以利用Linux內(nèi)核提供給用戶的API,強(qiáng)制將進(jìn)程或者線程綁定到某一個(gè)指定的CPU核運(yùn)行。
進(jìn)程親核性設(shè)置接口:
線程親核性設(shè)置接口:
- 隔離中斷
/proc/interrupts 文件列出了我這臺(tái)VM虛擬機(jī)四個(gè)CPU分別對應(yīng)的中斷處理情況以及當(dāng)前CPU支持的中斷類型。我們可以看到這臺(tái)機(jī)器的CPU0和CPU3都處理了中斷事件。通過設(shè)置核隔離和應(yīng)用程序的親核性,我們希望應(yīng)用程序能專注于處理數(shù)據(jù)包,然而在沒有設(shè)置中斷隔離情況下,應(yīng)用程序綁定的核依然還要處理中斷事件。這種情況下應(yīng)用程序處理性能會(huì)受到一定影響。
設(shè)置中斷隔離的方法:
#查看cpu支持的中斷數(shù)
irqs=`ls /proc/irq | grep -E '[0-9]'`; for irq in $irqs; do echo $irq; done
#設(shè)置只有核0處理中斷
irqs=`ls /proc/irq | grep -E '[0-9]'`; for irq in $irqs; do echo 1 > /proc/irq/$irq/smp_affinity; done
#查看
irqs=`ls /proc/irq | grep -E '[0-9]'`; for irq in $irqs; do echo $irq; cat /proc/irq/$irq/smp_affinity; done
- CPU開啟性能模式
#安裝cpupowerutils
yum -y install cpupowerutils
安裝cpupowerutils cpupower frequency-info查看CPU支持的cpufreq governors模式,可以看到當(dāng)前這臺(tái)機(jī)器支持performance(性能模式)和powersave(節(jié)能模式)。
我們可以通過下面的命令查詢當(dāng)前CPU正在使用的模式,可以看到當(dāng)前設(shè)備的CPU0已經(jīng)被設(shè)置為性能模式。
如果通過查詢后,我們的設(shè)備并沒有設(shè)置性能模式,可以通過以下命令行設(shè)置CPU為性能模式提升網(wǎng)絡(luò)處理性能。
#開啟高性能
cpupower frequency-set -g performance
以下截圖來自于intel Xeon(R) Gold 5218 CPU @ 2.30GHz x 2。
查看開啟性能模式的CPU頻率:
模式說明:
- Performance:性能模式
- Powersave:省電模式
- Userspace:用戶指定頻率
- Ondemand:按需快速動(dòng)態(tài)調(diào)整CPU頻率,一有CPU計(jì)算量的任務(wù),就會(huì)立即達(dá)到最大頻率運(yùn)行,空閑時(shí)間增加就降低頻率
- Conservative:按需快速動(dòng)態(tài)調(diào)整CPU頻率,比 ondemand 的調(diào)整更保守
- Schedutil:基于調(diào)度程序調(diào)整 CPU 頻率
PART 05 總結(jié)
以上我們介紹了三種優(yōu)化X86服務(wù)器性能的方法。性能調(diào)優(yōu)是一個(gè)長期的過程,在性能優(yōu)化的初期階段,很容易找到性能瓶頸并實(shí)施有效的優(yōu)化,優(yōu)化成果也往往十分明顯,但是越到后期優(yōu)化的難度就會(huì)越大,優(yōu)化方案也會(huì)更難尋找,優(yōu)化效果也會(huì)越來越弱。因此日常使用時(shí),要有一個(gè)合理的平衡點(diǎn)。
作者介紹
范曉波,社區(qū)編輯,資深網(wǎng)絡(luò)安全工程師。精通SDN、SD-WAN、VPN、NFV等網(wǎng)絡(luò)相關(guān)技術(shù)。精通二三層網(wǎng)絡(luò)轉(zhuǎn)發(fā)。熟悉DPDK、VPP、OVS高性能網(wǎng)絡(luò)開源框架。喜歡打羽毛球、烹飪美食。
分享標(biāo)題:?X86服務(wù)器性能調(diào)優(yōu)三板斧
網(wǎng)頁鏈接:http://www.fisionsoft.com.cn/article/cdhohoc.html


咨詢
建站咨詢
