服务热线:
产品中心

X86服务器性能调优三板斧

发布时间: 2024-07-23 00:33:20 来源:产品中心

详细信息

  随着现代社会互联网、5G的快速的提升,慢慢的变多的设备接入到网络中,从而给各类型的网络服务器解决能力带来了很大的挑战。但出于能耗成本和硬件采购成本等因素的考虑,单方面增加服务器数量或者更换处理性能更高的CPU、高频率内存等部件显然不是最佳方案。为满足网络处理性能迅速增加的需求,CPU性能调优、内存调优、NUMA(Non Uniform Memory Access)优化等技术应用而生,这些技术通过提高CPU利用率、CPU Cache命中率、TLB(Translation Lookaside Buffer)命中率、适当调整应用的线程并发数,使得充分的利用多核能力和资源争抢之间达到平衡等提升服务器的处理能力。

  本文以VPN服务器为例子,介绍定位服务器性能瓶颈的三个步骤以及三种优化X86 NUMA架构服务器网络处理性能的方法。

  在性能优化之前,我们应该对设备当前的性能做全面的评估建立基准。这个基准就是在当前硬件配置下,基于某一个特定版本软件(比如:VPN ver1.0.1),使用专业的网络压力测试仪(比如:思博伦Testcenter、信尔泰Bigtao、ixia等)对系统来进行网络压力测试。评估系统当前设备CPU利用率、网络吞吐、网络时延等参数,建立一个优化的基准线。在测试仪参数配置方面,可根据具体产品功能特性,尽量配置接近现网运行的流量参数。

  以VPN ver1.0.1为例,我们大家可以根据产品自身的一些功能特性记录相应的参数。下边是一部分我记录的一部分基准参数:

  使用专业的网络压力测试仪表对设备做全面的压力测试,同时观察和记录设备和仪表的运作时的状态。比如线性增加仪表吞吐量分别记录设备在各个吞吐量级别的CPU利用率、丢包率、CPU Cache Miss情况、参与处理流量设备CPU核数量。记录的越详细和评估的越全面(比如使用小包、中长包、大包、随机长度包进行压力测试)将更有助于软件性能瓶颈的分析和确认优化的方向。

  压力测试和详细记录测试过程是为了确定性能瓶颈和优化方向。通过详细分析对比测试记录去确定我们的优化方向。系统的性能瓶颈通常会在CPU利用率较低、IO阻塞、Cache Miss较多、存在跨NUMA访问内存等方面。在确认了几个优化方向后,我们就可以从硬件和软件程序两个方向对设备性能来优化。比如经过仔细修改代码提高CPU Cache命中率、调整网卡PCIE插槽避免跨访问和在BIOS中(Basic Input Output System)一些CPU、网卡参数等。

  CPU不仅要运行进程还要处理中断,如果一个进程运行的CUP处理中断的次数过多,势必会影响进程的运行。为了不影响进程,可以将CPU进行隔离,比如有4核CPU,可以隔离出2核CPU,并和进程进行绑定用于专门运行进程,剩下的两核处理中断,这样运行进程的CPU就不会处理中断,提高进程的运行效率。

  查看隔核情况的代码如下,从运行结果能够正常的看到我的这台机器目前未开启核隔离功能。

  在核隔离设置完成后,我们大家可以通过下面Linux系统提供的亲核性接口设置我们的程序,提高程序的处理性能。那什么是CPU“亲核性”呢?CPU的亲核性就是让某个进程(比如我们的程序)长时间运行在某个或者某些我们设定的核上,不参与Linux 内核进程调度器的调度。我们可以利用Linux内核提供给用户的API,强制将进程或者线程绑定到某一个指定的CPU核运行。

  /proc/interrupts 文件列出了我这台VM虚拟机四个CPU分别对应的中断处理情况以及当前CPU支持的中断类型。我们可以看到这台机器的CPU0和CPU3都处理了中断事件。通过设置核隔离和应用程序的亲核性,我们希望应用程序能专注于处理数据包,然而在没有设置中断隔离情况下,应用程序绑定的核依然还要处理中断事件。这种情况下应用程序处理性能会受到一定影响。

  我们能够最终靠下面的命令查询当前CPU正在使用的模式,能够正常的看到当前设备的CPU0已经被设置为性能模式。

  如果通过查询后,我们的设备并没有设置性能模式,能够最终靠以下命令行设置CPU为性能模式提升网络处理性能。

  以上我们介绍了三种优化X86服务器性能的方法。性能调优是一个长期的过程,在性能优化的初期阶段,很容易找到性能瓶颈并实施有效的优化,优化成果也往往十分明显,但是越到后期优化的难度就会越大,优化方案也会更难寻找,优化效果也会慢慢的弱。因此日常使用时,要有一个合理的平衡点。

  范晓波,51CTO社区编辑,资深网络安全工程师。精通SDN、SD-WAN、VPN、NFV等网络有关技术。精通二三层网络转发。熟悉DPDK、VPP、OVS高性能网络开源框架。喜欢打羽毛球、烹饪美食。

  Serverless以事件驱动、无状态、无运维、低成本等特点,带来了跨越式的变革,让用户真正像用水电一样按需索取、按量付费,成为了暨虚拟机、容器之后的第三代通用计算技术。然而,Serverless也还存在一些挑战,例如计费颗粒度粗犷,开发标准不统一、缺少优秀的开发工具支持等。近日,腾讯云举办了线上发布会,介绍了Serverless的三大“拦路虎”以及腾讯云的“三板斧”。