当前位置: 首页 > 科技观察

X86服务器性能调优三种方式

时间:2023-03-13 22:33:56 科技观察

PART01简介随着现代社会互联网和5G的快速发展,越来越多的设备接入网络,给各类网络服务器带来了巨大的处理能力。挑战。但受能耗成本、硬件采购成本等因素影响,单方面增加服务器数量或更换CPU、高频内存等处理性能更高的部件显然不是最佳方案。为了满足网络处理性能快速增长的需求,出现了CPU性能调优、内存调优、NUMA(NonUniformMemoryAccess)优化等技术。这些技术提高了CPU利用率、CPUCache命中率、TLB(TranslationLookasideBuffer)命中率,适当调整应用的并发线程数,充分利用多核能力,实现资源竞争的平衡等,提高服务器的处理能力。本文以VPN服务器为例,介绍定位服务器性能瓶颈的三个步骤和优化X86NUMA架构服务器网络处理性能的三种方法。PART02NUMA架构介绍NUMA(Non-UniformMemoryAccess,非统一内存访问)架构,可以很好的解决SMP技术对CPU核数的限制。NUMA架构将多个核心合并为一个节点(Node),每个节点相当于一个对称多处理器(SMP),不同CPU之间使用QPI(Quick-PathInterconnect)实现高带宽和低延迟的片间沟通。IntelQPI类似于AMDHT互连。上图是我画的IntelX86通用服务器架构之一。每个CPU都有一个NUMANode,每个NUMANode有固定数量的CPUCores。接下来,我将使用IntelXeon(R)Gold5218CPU@2.30GHz作为VPN服务器的CPU,介绍三种优化X86网络服务器性能的常用方法。VPN服务器硬件参数配置如下:CPU:网卡:Intelx710-DA4系统:CentOSLinuxrelease8.4.2105PART03三步确定优化方向第一步:建立优化基准在性能优化之前,我们需要检查设备的当前性能进行彻底评估以建立基线。本次benchmark基于当前硬件配置下特定版本的软件(例如:VPNver1.0.1),使用专业的网络压力测试仪(例如:SpirentTestcenter、信尔泰Bigtao、ixia等)对系统进行测试网络压力测试。评估系统当前的设备CPU利用率、网络吞吐量、网络延迟等参数,建立优化基线。在测试仪的参数配置方面,根据具体的产品特性,尽可能配置接近当前网络运行的流量参数。以VPNver1.0.1为例,我们可以根据产品本身的一些功能特点记录相应的参数。以下是我记录的部分benchmark参数:第二步:确定性能瓶颈使用专业的网络压力测试仪器对设备进行全面的压力测试,观察并记录设备和仪器的运行状态。例如,线性增加仪器吞吐量,记录设备在每个吞吐量级别的CPU利用率、丢包率、CPUCacheMiss情况,以及设备参与流量处理的CPU核数。记录的越详细,评估的越全面(比如小包、中包、大包、随机包的压力测试),越有助于分析软件性能瓶颈,确定优化方向。第三步:实施优化压测,详细记录测试过程,确定性能瓶颈和优化方向。通过对测试记录的详细分析对比,确定我们的优化方向。系统的性能瓶颈通常在于CPU利用率低、IO阻塞、更多的缓存未命中以及跨NUMA访问内存。在确定了几个优化方向后,我们可以从硬件和软件程序两个方向对设备性能进行优化。比如通过修改代码提高CPUCache命中率,调整网卡PCIE插槽避免交叉访问,在BIOS(BasicInputOutputSystem)中设置一些CPU和网卡参数。PART04提高处理性能的三种方法下面介绍三种提高网络设备性能的方法:CPU内核隔离CPU不仅要运行进程,还要处理中断。如果一个进程运行时CPU处理中断过多,势必会影响进程的性能。跑步。为了不影响进程,可以隔离CPU。比如有一个4核的CPU,可以隔离一个2核的CPU绑定到进程上,让进程独占运行。剩下的两个核处理中断,让运行该进程的CPU不处理中断,提高进程的运行效率。检查核心隔离的代码如下。从运行结果可以看出,我的机器上没有开启核心隔离功能。vim/etc/default/grub#根据实际情况在GRUB_CMDLINE_LINUX后添加如下配置。线程、中断移出转发核心irqaffinity=0-1#设置转发核心为无时钟滴答核心,减少时钟中断次数default_hugepagesz=1Ghugepagesz=1Ghugepages=64#设置大页内存默认页大小到1G,分配hugepagememorynmi_watchdog=0#关闭watchdog使用如下命令更新grub配置文件:grub2-mkconfig-o/boot/grub2/grub.cfg接下来重启机器,再次检查核隔离:你可以看到我们之前添加的一些配置已经生效了。核隔离设置完成后,我们就可以通过下面Linux系统提供的亲核接口来设置我们的程序,以提高程序的处理性能。那么什么是CPU“亲核性”呢?CPU的亲核性就是让某个进程(比如我们的程序)在我们设定的一个或部分核心上长时间运行,而不参与Linux内核进程调度器的调度。我们可以使用Linux内核提供给用户的API,强制一个进程或线程运行在指定的CPU核上。Processaffinitysettinginterface:Threadaffinitysettinginterface:Isolateinterrupts/proc/interrupts文件列出了我的VM虚拟机的四个CPU对应的中断处理情况,以及当前CPU支持的中断类型。我们可以看到本机的CPU0和CPU3都处理了中断事件。通过设置应用的核心隔离和亲和性,我们希望应用可以专注于处理数据包。但是,如果没有设置中断隔离,应用程序绑定的核心仍然需要处理中断事件。在这种情况下,应用程序的处理性能会受到一定程度的影响。设置中断隔离的方法:#查看cpu支持的中断个数irqs=`ls/proc/irq|grep-E'[0-9]'`;$irqs中的irq;做echo$irq;done#只设置核心0处理中断irqs=`ls/proc/irq|grep-E'[0-9]'`;$irqs中的irq;做echo1>/proc/irq/$irq/smp_affinity;完成#Viewirqs=`ls/proc/irq|grep-E'[0-9]'`;$irqs中的irq;做echo$irq;cat/proc/irq/$irq/smp_affinity;doneCPUenableperformancemode#installcpupowerutilsyum-yinstallcpupowerutilsinstallcpupowerutilscpupowerfrequency-info查看CPU支持的cpufreqgovernorsmode,可以看到当前机器支持performance(性能模式)和powersave(节能模式)。我们可以使用如下命令查询当前CPU使用的模式,可以看到当前设备的CPU0已经设置为性能模式。如果查询通过后,我们的设备没有设置性能模式,可以通过以下命令行将CPU设置为性能模式,提高网络处理性能。#Openhighperformancecpupowerfrequency-set-gperformance以下截图来自intelXeon(R)Gold5218CPU@2.30GHzx2.查看开启性能模式的CPU频率:模式说明:Performance:性能模式Powersave:PowersavingmodeUserspace:用户指定的频率Ondemand:根据需要快速动态地调整CPU频率。一旦有CPU计算任务,立即以最大频率运行Conservative:按需快速动态调整CPU频率,比ondemand调整更保守Schedutil:根据调度器调整CPU频率PART05总结上面我们介绍了三个优化X86服务器性能的方法。性能调优是一个长期的过程。在性能优化的初始阶段,很容易找到性能瓶颈并进行有效的优化,优化效果往往非常明显。越难找,优化效果越弱。因此,在日常使用中,一定要有一个合理的平衡点。作者介绍范晓波,社区编辑,高级网络安全工程师。精通SDN、SD-WAN、VPN、NFV等网络相关技术。精通二层和三层网络转发。熟悉DPDK、VPP、OVS高性能网络开源框架。喜欢打羽毛球,做饭。