前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VPP 如何优化性能(系统调优)--2

VPP 如何优化性能(系统调优)--2

作者头像
dpdk-vpp源码解读
发布2023-09-25 16:44:54
9940
发布2023-09-25 16:44:54
举报
文章被收录于专栏:DPDK VPP源码分析

本文主要介绍在KVM虚拟机中如何进行配置调整可以最大限度地提高 VPP 应用程序的数据包处理性能。

  • 禁用中断平衡 (irqbalance)

Irqbalance 守护进程默认启用。它的目的是为了在多核系统中跨 CPU 分配硬件中断,以提高性能。但是,它可能/将会导致运行 vpp 虚拟机的 cpu 停滞,从而导致 Rx 数据包丢失。当 irqbalance 被禁用时,所有中断都将由 cpu0 处理,因此 vpp (或任何其他服务 VM)不应在 cpu0 上运行。

我们可以通过在rc.local文件中设置关闭irqbalance服务:

代码语言:javascript
复制
 1#查询中断服务默认运行。
 2root@jinsh:~# systemctl status irqbalance
 3● irqbalance.service - irqbalance daemon
 4     Loaded: loaded (/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
 5     Active: active (running) since Sat 2023-09-23 08:17:39 UTC; 1 day 6h ago
 6       Docs: man:irqbalance(1)
 7             https://github.com/Irqbalance/irqbalance
 8   Main PID: 907 (irqbalance)
 9      Tasks: 2 (limit: 4513)
10     Memory: 892.0K
11        CPU: 495ms
12     CGroup: /system.slice/irqbalance.service
13             └─907 /usr/sbin/irqbalance --foreground
14
15Sep 23 08:17:39 jinsh systemd[1]: Started irqbalance daemon.
16##可以在rc.local文件中设置关闭
17  systemctl stop irqbalance
18  systemctl disable irqbalance

也可以通过在默认配置文件 (/etc/default/irqbalance) 中设置 ENABLED="0" 来禁用 irqbalance:

代码语言:javascript
复制
1#Configuration for the irqbalance daemon
2
3#Should irqbalance be enabled?
4ENABLED="0"
5#Balance the IRQs only once?
6ONESHOT="0"
  • 禁用内核相同页面合并 (KSM)

KSM是一种节省内存的重复数据删除功能,它可以合并匿名(私有)页面(而不是页面缓存页面)。

在诊断vpp Rx零丢包问题时,我们注意到/sys/kernel/debug/kvm/pf_fixed计数器增加与周期性Rx丢包之间存在相关性。我们观察到禁用KSM消除了这些计数器的增量。KSM仅在Ubuntu 14.04服务器的主机操作系统上启用。Ubuntu 14.04服务器在虚拟机中运行时关闭。在主机操作系统的“/sys/kernel/mm/ KSM /run”中写入“0”关闭KSM。

代码语言:javascript
复制
1 echo 0 > /sys/kernel/mm/ksm/run
  • 配置KVM参数

为了在虚拟机中运行 VPP,必须在命令行调用或 libvirt / virsh xml 域配置中配置以下参数:

代码语言:javascript
复制
 1-cpu host  :  This parameter causes the VM to inherit the host OS flags.  
 2Note: libvirt 0.9.11 or greater is required for this to be included in the xml configuration.
 3
 4-m 8192    :  8 GB of ram is required for optimal zero packet drop rates.  
 5             TBD: Need to investigate why this is true.  4GB has Rx pkt drops even though there is only 2.2GB allocated!
 6
 7-smp 2,sockets=1,cores=4,threads=2
 8
 9To disable PXE boot delays, add the ",rombar=0" option to the end of each "-device" option list or 
10add "<rom bar='off'/> to the device xml configuration.
11

-cpu host: 表示 Guest OS 使用和 Host OS 相同的 CPU model。除了可以指定 Guest OS 的 CPU 模型,还可以指定附加的 CPU 特性。并且 -cpu 会将指定的 CPU 模型的所有功能全部暴露给 Guest OS,即使某些特性在实际的宿主机 pCPU 上并不支持,此时 QEMU-KVM 就会通过软件模拟的方式来支持这些特性,因此,也消耗一些性能。

-m 8192: kvm虚拟机至少需要需要 8 GB 内存才能实现最佳零丢包率。TBD:需要调查为什么这是真的。即使只分配了 2.2GB,4GB 的 Rx pkt 也会下降!

  • 删除 VirtIO Balloon 驱动程序

在vpp虚拟机中使用VirtIO Balloon驱动程序,当用VirtIO Balloon驱动程序调用mmap()时,会导致Rx数据包丢失。

从虚拟机配置中删除VirtIO Balloon驱动程序:如果编辑xml配置,通过设置model='none'删除memballoon驱动程序:

代码语言:javascript
复制
1 <memballoon model='none'/>

或者从命令行参数列表中删除设备定义:

代码语言:javascript
复制
1 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
代码语言:javascript
复制
  • 设置VPP虚拟机线程的CPU亲和性和NUMA内存策略

CPU 亲和性和 NUMA 内存策略可以通过 进行配置libvirt。可以通过dpdk脚本cpu_layout.py来查询CPU core与numa 绑定关系。不幸的是此脚本在KVM虚拟机环境下,查询结果是错误的。可以通过numactl命令行来查询。

代码语言:javascript
复制
代码语言:javascript
复制
 1dpdk-23.03/usertools# ./cpu_layout.py
 2======================================================================
 3Core and Socket Information (as reported by '/sys/devices/system/cpu')
 4======================================================================
 5
 6cores =  [0]
 7sockets =  [0, 2, 4, 6]
 8
 9       Socket 0   Socket 2   Socket 4   Socket 6
10       --------   --------   --------   --------
11Core 0 [0]        [1]        [2]        [3]
12
13 ###numactl --hardware  命令行查询是正确的。
14 available: 1 nodes (0)
15 node 0 cpus: 0 1 2 3
16 node 0 size: 3875 MB
17 node 0 free: 2049 MB
18 node distances:
19 node   0
20   0:  10
代码语言:javascript
复制

先了解更多的信息,建议详细阅读知乎文章《OpenStack Nova 高性能虚拟机之 NUMA 架构亲和》https://zhuanlan.zhihu.com/p/631094464

代码语言:javascript
复制
不要在虚拟机中运行任何其他程序!如前一节所述,在VM中为vpe和qn应用程序设置CPU亲和性非常重要,可以防止在适当的情况下出现Rx数据包丢失。在vpp VM中运行其他应用程序(例如htop)也可能导致Rx数据包丢失。关闭超线程

当启用超线程时,每个物理CPU核心显示为两个逻辑核心。每个逻辑内核共享物理内核的资源(L1和L2缓存、寄存器)。这是由BIOS中的设置控制的。

一般来说,当启用超线程时,数据平面性能会受到影响,因此建议禁用它。

由于HT配置是一种BIOS设置,更改它需要重新启动,因此部署将选择使用特定设置进行操作,而不是根据机器上运行的工作负载启用/禁用它。

如果启用了HT,仍然可以获得与禁用HT时相同的性能。为此,隔离额外的逻辑内核(请参阅CPU隔离),并且不要为它们分配任何线程。

代码语言:javascript
复制
代码语言:javascript
复制
--------------------------------------------------------
代码语言:javascript
复制
下面是在实际环境中宿主机的grub cmdline设置参数及说明:
代码语言:javascript
复制
1 isolcpus=1-13 rcu_nocbs=1-13 nohz_full=1-13 kthread_cpus=0 
2 irqaffinity=0 default_hugepagesz=1G hugepagesz=1G hugepages=4 
3 nmi_watchdog=0 intel_pstate=disable nosoftlockup
  • 设置核隔离,使转发核专注用于转发: isolcpus=1-13
  • 将RCU Callback,内核线程,中断移出转发核:rcu_nocbs=1-13 kthread_cpus=0 irqaffinity=0
  • 将转发核设置成无时钟滴答核,减少时钟中断次数:nohz_full=1-13
  • 关闭看门狗: nmi_watchdog=0
  • 设置大页内存默认页大小为1G, 分配大页内存: default_hugepagesz=1G hugepagesz=1G hugepages=64
  • 禁止操作系统调整CPU频率
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-25 08:22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • -cpu host: 表示 Guest OS 使用和 Host OS 相同的 CPU model。除了可以指定 Guest OS 的 CPU 模型,还可以指定附加的 CPU 特性。并且 -cpu 会将指定的 CPU 模型的所有功能全部暴露给 Guest OS,即使某些特性在实际的宿主机 pCPU 上并不支持,此时 QEMU-KVM 就会通过软件模拟的方式来支持这些特性,因此,也消耗一些性能。
  • CPU 亲和性和 NUMA 内存策略可以通过 进行配置libvirt。可以通过dpdk脚本cpu_layout.py来查询CPU core与numa 绑定关系。不幸的是此脚本在KVM虚拟机环境下,查询结果是错误的。可以通过numactl命令行来查询。
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档