Citrix ADC

优化Citrix ADC VPX在VMware ESX、Linux KVM和Citrix hypervisor上的性能

Citrix ADC VPX性能根据虚拟化环境、分配的系统资源和主机配置的不同有很大差异。为了达到预期的性能,首先遵循VPX数据表中的建议,然后使用本文提供的最佳实践进一步优化它。

Citrix ADC VPX实例在VMware ESX hypervisor上

本节包含可配置选项和设置的详细信息,以及帮助您在VMware ESX管理程序上实现Citrix ADC VPX实例的最佳性能的其他建议。

为实现VPX在E1000、VMXNET3、SR-IOV和PCI直通网络接口下的高性能,请遵循以下建议:

  • ESX主机上发放的vcpu总数必须小于或等于ESX主机物理cpu总数。
  • 为了达到良好的效果,必须为ESX主机设置NUMA (Non-uniform Memory Access)亲和性和CPU亲和性。

    —要查找Vmnic的NUMA亲和性,请本地或远程登录主机,输入:

    # vsh -e get /net/ pnic/ vmnic7/properties | grep NUMA Device NUMA Node: 0 

Citrix ADC VPX与E1000网络接口

在VMware ESX主机上需要进行如下设置:

  • 在VMware ESX主机上,将一个pNIC vSwitch创建两个v网卡。多个v网卡在ESX主机中创建多个Rx线程。这增加了pNIC接口的Rx吞吐量。
  • 为创建的每个vNIC启用vSwitch端口组级别的vlan。
  • 为了增加vNIC传输(Tx)吞吐量,在每个vNIC的ESX主机上使用一个单独的Tx线程。使用以下ESX命令:
    • 对于ESX 5.5版本:

      esxcli系统设置高级设置-o /Net/NetTxWorldlet -i 
    • ESX版本6.0以上:

      esxcli system settings advanced set -o /Net/NetVMTxType -i 1 
  • 为了进一步增加vNIC Tx吞吐量,使用单独的Tx完成线程和每个设备(NIC)队列的Rx线程。使用以下ESX命令:

    esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0 

注意:

请确保重新启动VMware ESX主机以应用更新的设置。

每个pNIC部署2个虚拟网卡

的拓扑和配置命令示例如下每个pNIC有两个vnic提供更好的网络性能的部署模型。

每个pNIC部署2个虚拟网卡

Citrix ADC VPX示例配置:

要实现上例拓扑中所示的部署,请在Citrix ADC VPX实例上执行以下配置:

  • 在客户端将SNIP(1.1.1.2)与网口1/1绑定,并开启VLAN tag模式。

    bind vlan 2 -ifnum 1/1 -tagged bind vlan 2 -IPAddress 1.1.1.2 255.255.255.0 
  • 在服务器端将SNIP(2.2.2.2)绑定到网口1/1上,并开启VLAN tag模式。

    bind vlan 3 -ifnum 1/2 -tagged bind vlan 3 -IPAddress 2.2.2.2 255.255.255.0 
  • 添加HTTP虚拟服务器1.1.1.100,绑定服务2.2.2.100。

    add lb vserver v1 HTTP 1.1.1.100 80 -persistenceType NONE -Listenpolicy NONE -cltTimeout 180 add service s1 2.2.2.100 HTTP 80 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO bind lb vserver v1 s1 

注意:

确保在路由表中包含以下两项:

  • 1.1.1.0/24子网,网关指向SNIP 1.1.1.2
  • 2.2.2.0/24子网,网关指向SNIP 2.2.2.2

Citrix ADC VPX带有VMXNET3网络接口

为实现VMXNET3网络接口下VPX的高性能,需要在VMware ESX主机上进行以下设置:

  • 一个pNIC vSwitch创建两个v网卡。多个v网卡在ESX主机中创建多个Rx线程。这增加了pNIC接口的Rx吞吐量。
  • 为创建的每个vNIC启用vSwitch端口组级别的vlan。
  • 为了增加vNIC传输(Tx)吞吐量,在每个vNIC的ESX主机上使用一个单独的Tx线程。使用以下ESX命令:
    • 对于ESX 5.5版本:
    esxcli系统设置高级设置-o /Net/NetTxWorldlet -i 
    • ESX版本6.0以上:
    esxcli system settings advanced set -o /Net/NetVMTxType -i 1 

在VMware ESX主机上,需要进行如下配置:

  • 在VMware ESX主机上,从1个pNIC vSwitch创建2个vnic。多个vnic在ESX主机中创建多个Tx和Rx线程。这增加了pNIC接口的Tx和Rx吞吐量。
  • 为创建的每个vNIC启用vSwitch端口组级别的vlan。
  • 为了增加vNIC的Tx吞吐量,使用单独的Tx完成线程和每个设备(NIC)队列的Rx线程。使用以下命令:

    esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0 
  • 通过在虚拟机的配置中添加以下设置,将虚拟机设置为每个vNIC使用一个传输线程:

    ethernetX。ctxPerDev = "1" 

有关更多信息,请参见vSphere中Telco和NFV工作负载的性能调优最佳实践

注意:

请确保重新启动VMware ESX主机以应用更新的设置。

可以将VMXNET3配置为每个pNIC有两个vnic部署。有关更多信息,请参见每个pNIC部署2个虚拟网卡

Citrix ADC VPX具有SR-IOV和PCI直通网络接口

若要实现具有SR-IOV和PCI直通网络接口的高性能VPX,请参见ESX主机推荐配置

Citrix ADC VPX实例在Linux-KVM平台上

本节包含可配置选项和设置的详细信息,以及帮助您在Linux-KVM平台上实现Citrix ADC VPX实例的最佳性能的其他建议。

KVM性能设置

在KVM主机上进行如下设置:

查找网卡的NUMA域lstopo命令:

确保VPX的内存和CPU固定在相同的位置。如下所示,10G网卡“ens2”绑定到NUMA域#1。

NUMA域# 1

从NUMA域分配VPX内存。

使用命令表示分配内存的NUMA域。在下面的输出中,从NUMA节点#0分配了大约10 GB的RAM。

NUMA节点# 0

要更改NUMA节点映射,请执行以下步骤。

  1. 在主机上编辑VPX的。xml文件。

    /etc/libvirt/qemu/ < VPX_name > . xml < !——NeedCopy >
  2. 添加以下标签:

      *这是NUMA域名 
  3. 关闭VPX。

  4. 运行如下命令:

    virsh define /etc/libvirt/qemu/.xml 

    该命令更新有NUMA节点映射的虚拟机的配置信息。

  5. 上电VPX。然后检查使用硬件命令的输出,查看VPX的内存分配情况。

    numactl硬件命令的输出

将VPX的vcpu固定在物理核上。

  • 输入以下命令查看VPX的vCPU到pCPU的映射关系

    virsh vcpupin  

    virsh-vcpupin命令的输出信息

    0 ~ 4的vcpu对应8 ~ 11的物理核。

  • 要查看当前的pCPU使用情况,输入以下命令:

    mpstat -P ALL 5 

    mpstat命令的输出

    在此输出中,8是管理CPU, 9-11是包引擎。

  • 要将vCPU固定改为pCPU固定,有两个选项。

    • 在VPX启动后,在运行时使用以下命令进行修改:

      virsh vcpupin    virsh vcpupin NetScaler-VPX-XML 0 8 virsh vcpupin NetScaler-VPX-XML 1 9 virsh vcpupin NetScaler-VPX-XML 2 10 virsh vcpupin NetScaler-VPX-XML 3 11 
    • 要对VPX进行静态更改,请编辑. xml文件与以前一样带有以下标签:

      1. 在主机上编辑VPX的xml文件

        /etc/libvirt/qemu/ < VPX_name > . xml < !——NeedCopy >
      2. 添加以下标签:

        4       
      3. 关闭VPX。

      4. 使用以下命令更新NUMA节点映射的虚拟机的配置信息:

        virsh define /etc/libvirt/qemu/ .xml 
      5. 上电VPX。然后检查virsh vcpupin 命令的输出,查看更新后的CPU固定。

消除主机中断开销。

  • 方法检测vm_出口kvm_stat命令。

    在hypervisor级别,主机中断被映射到VPX的vcpu所固定的相同pcpu上。这可能会导致VPX上的vcpu周期性被踢出。

    要查找运行在主机上的虚拟机所执行的虚拟机出口,请使用kvm_stat命令。

    [root@localhost ~]# kvm_stat -1 | grep EXTERNAL kvm_exit(EXTERNAL_INTERRUPT) 1728349 27738 [root@localhost ~]# 

    1+M量级的更高值表示存在问题。

    单台虚拟机时,期望值为30 ~ 100k。超过这个值就表示有一个或多个主机中断向量映射到同一个pCPU。

  • 检测主机中断并迁移主机中断。

    当您运行连接命令用于“/proc/interrupts”文件,它将显示所有主机中断映射。如果一个或多个活动irq映射到同一个pCPU,其对应的计数器将递增。

    将任何与Citrix ADC VPX的pcpu重叠的中断移动到未使用的pcpu:

    echo 0000000f > /proc/irq/55/smp_affinity 0000000f - - >是位图,lsb表示IRQ 55只能调度在pcpu 0 - 3 
  • 禁用IRQ的平衡。

    禁用IRQ平衡守护进程,这样就不会在运行中发生重调度。

    service irqbalance stop service irqbalance show -查看状态service irqbalance start -必要时启用

    确保你运行kvm_stat命令,以确保计数器不多。

Citrix ADC VPX与PV网络接口

PV (parvirtualization)、SR-IOV和PCIe直通网口可以配置为每个pNIC有两个vnic部署。有关更多信息,请参见每个pNIC部署2个虚拟网卡

PV (virtio)接口的最佳性能,请遵循以下步骤:

  • 确定PCIe插槽/网卡所绑定的NUMA域。
  • VPX的Memory和vCPU必须固定在同一个NUMA域中。
  • Vhost线程必须绑定到同一个NUMA域中的cpu上。

将虚拟主机线程绑定到相应的cpu:

  1. 流量启动后,运行命令。

    运行top命令

  2. 标识虚拟主机进程(命名为vhost——< pid-of-qemu >)亲和力。
  3. 使用以下命令将vHost进程绑定到NUMA域中的物理核上:

    任务集-pc   

    例子:

    任务集-pc 12 29838 
  4. NUMA域对应的处理器内核可以通过以下命令识别:

    (root@localhost ~) # virsh能力| grep cpu < cpu > < / cpu > < cpu num = ' 8 ' > < cpu id = ' 0 ' socket_id = ' 0 ' core_id = ' 0 '兄弟姐妹= ' 0 ' / > < cpu id = ' 1 ' socket_id = ' 0 ' core_id =兄弟姐妹' 1 ' = ' 1 ' / > < cpu id = ' 2 ' socket_id = ' 0 ' core_id = ' 2 '兄弟姐妹= ' 2 ' / > < cpu id =“3”socket_id = ' 0 ' core_id = 3的兄弟姐妹= ' 3 ' / > < cpu id =“4”socket_id = ' 0 ' core_id =‘4’兄弟姐妹= ' 4 ' / > < cpu id =“5”socket_id = ' 0 ' core_id =‘5’的兄弟姐妹= ' 5 ' / > < cpu id =“6”socket_id = ' 0 ' core_id =“6”兄弟姐妹= ' 6 ' / > < cpu id =“7”socket_id = ' 0 ' core_id =“7”兄弟姐妹= ' 7 ' / > < / cpu > < cpu num = ' 8 ' > < cpu id =“8”socket_id = ' 1 ' core_id = ' 0 '兄弟姐妹= ' 8 ' / > < cpu id =“9”socket_id = ' 1 ' core_id = ' 1 '兄弟姐妹= ' 9 ' / > < cpu id =“10”socket_id = ' 1 ' core_id = ' 2 '兄弟姐妹=“10”/ > < cpu id =“11”socket_id = ' 1 ' core_id = 3的兄弟姐妹= ' 11 ' / > < cpu id =“12”socket_id = ' 1 ' core_id =‘4’兄弟姐妹=“12”/ > < cpu id =“13”socket_id = ' 1 ' core_id =‘5’的兄弟姐妹=“13”/ > < cpu id =“14”socket_id = ' 1 ' core_id =“6”兄弟姐妹=“14”/ > < cpu id =“15”socket_id = ' 1 ' core_id =“7”兄弟姐妹= ' 15 ' / > < / cpu > < cpuselection / >< cpuselection / > < !——NeedCopy >

将QEMU进程绑定到相应的物理内核:

  1. 确定QEMU进程正在其上运行的物理内核。有关更多信息,请参见前面的输出。
  2. 将QEMU进程绑定到与vcpu绑定的物理核上,命令如下:

    任务集-pc 8-11 29824 

Citrix ADC VPX带有SR-IOV和Fortville PCIe直通网络接口

为了获得SR-IOV和Fortville PCIe直通网口的最佳性能,请遵循以下步骤:

  • 确定PCIe插槽/网卡所绑定的NUMA域。
  • VPX的Memory和vCPU必须固定在同一个NUMA域中。

示例VPX XML文件用于Linux KVM的vCPU和内存固定:

<域类型=“kvm”> <名称> NetScaler-VPX < /名称> < uuid > 138 f7782 - 1 - cd3 - 484 b - 8 b6d - 7604 f35b14f4 < / uuid > <内存单元=“简约”> 8097152 < /内存> < currentMemory单位=“简约”> 8097152 < / currentMemory > <个vcpu位置=“静态”> 4 < /个vcpu > < cputune > < vcpupin个vcpu = ' 0 ' cpuset = ' 8 ' / > < vcpupin个vcpu = ' 1 ' cpuset = ' 9 ' / > < vcpupin个vcpu = ' 2 ' cpuset =“10”/ > < vcpupin个vcpu = ' 3 ' cpuset = ' 11 ' / > < / cputune > < numatune > <内存模式=“严格”节点集= ' 1 ' / > < / numatune > < /域> < !——NeedCopy >

Citrix hypervisor上的Citrix ADC VPX实例

本节包含可配置选项和设置的详细信息,以及帮助您在Citrix hypervisor上实现Citrix ADC VPX实例的最佳性能的其他建议。

Citrix hypervisor的性能设置

使用“xl”命令查找网卡的NUMA域:

Xl info -n 

将VPX的vcpu固定在物理核上。

xl vCPU -pin < netscclaer VM Name>  <物理CPU id> 

检查vcpu绑定情况。

xl vcpu-list < !——NeedCopy >

分配给Citrix ADC虚拟机的vcpu个数大于8。

当配置vcpu个数大于8个时,在Citrix Hypervisor控制台执行以下命令:

xe vm-param-set uuid=your_vms_uuid vcpu -max=16 xe vm-param-set uuid vcpu -at-startup=16 

Citrix ADC VPX具有SR-IOV网络接口

为了获得最佳的SR-IOV网络接口性能,请遵循以下步骤:

  • 确定PCIe插槽或网卡绑定的NUMA域。
  • 将VPX的Memory和vCPU固定在同一个NUMA域中。
  • 将Domain-0 vCPU绑定到剩余的CPU上。

Citrix ADC VPX,具有准虚拟化接口

与其他PV环境相同,建议每个pNIC配置两个vNIC,每个pNIC配置一个vNIC,以达到最佳性能。

要实现准虚拟化(netfront)接口的最佳性能,请遵循以下步骤:

  • 确定PCIe插槽或网卡绑定的NUMA域。
  • 将VPX的内存和vCPU固定在同一个NUMA域中。
  • 将domain -0 vCPU绑定到同一NUMA域的剩余CPU上。
  • 将vNIC的主机Rx/Tx线程引脚到Domain-0 vcpu。

将主机线程引脚到Domain-0 vcpu:

  1. 查找VPX的Xen-IDxl列表在Citrix Hypervisor主机shell上执行命令。
  2. 使用以下命令识别主机线程:

    ps -ax | grep vif  

    在下面的例子中,这些值表示:

    • vif5.0—XenCenter中分配给VPX的第一个接口的线程(管理接口)。
    • vif5.1-第二个接口的线程分配给VPX等等。

    xl list命令的输出

  3. 使用以下命令将线程固定到Domain-0 vcpu上:

    任务集-pc   

    例子:

    任务集-pc 1 29189 
优化Citrix ADC VPX在VMware ESX、Linux KVM和Citrix hypervisor上的性能