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

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


咨詢
建站咨詢
