Citrix ADC

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

Citrix ADC VPX的性能根据虚拟化管理程序、分配的系统资源和主机配置的不同而有很大差异。要实现理想的性能,首先遵循VPX数据表中的建议,然后使用本文档中提供的最佳实践进一步优化它。

VMware ESX管理程序上的Citrix ADC VPX实例

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

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

  • ESX主机上发放的vcpu总数必须小于或等于ESX主机上的pcpu总数。
  • 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创建两个vnic。多个虚拟网卡在ESX主机上创建多个Rx线程。这增加了pNIC接口的Rx吞吐量。
  • 为已创建的每个vNIC在vSwitch端口组级别上开启vlan。
  • 为了提高vNIC传输(Tx)吞吐量,请在ESX主机上为每个vNIC使用单独的Tx线程。使用如下ESX命令:
    • 对于ESX 5.5版本:

      esxcli system settings advanced set -o / net / netttxworldlet -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部署两个vnic

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

每个pNIC部署两个vnic

Citrix ADC VPX样例配置:

为了实现上述拓扑示例中的部署,需要在Citrix ADC VPX实例上进行如下配置:

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

    绑定vlan 2 -ifnum 1/1 -tagged绑定vlan 2 -IPAddress 1.1.1.2 255.255.255.0 
  • 服务器端将SNIP(2.2.2.2)与网口1/1绑定,并使能VLAN tag模式。

    绑定vlan 3 -ifnum 1/2 -tagged绑定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创建两个vnic。多个虚拟网卡在ESX主机上创建多个Rx线程。这增加了pNIC接口的Rx吞吐量。
  • 为已创建的每个vNIC在vSwitch端口组级别上开启vlan。
  • 为了提高vNIC传输(Tx)吞吐量,请在ESX主机上为每个vNIC使用单独的Tx线程。使用以下ESX命令:
    • 对于ESX 5.5版本:
    esxcli system settings advanced set -o / net / netttxworldlet -i 
    • 对于ESX 6.0版本起:
    esxcli system settings advanced set -o /Net/NetVMTxType -i 1 

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

  • 在VMware ESX主机上,由一个pNIC的vSwitch创建两个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" 

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

注意:

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

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

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

使用SR-IOV和PCI直通网络接口实现VPX的高性能,请参见推荐在ESX主机上配置

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

本节详细介绍了可配置选项和设置,以及其他建议,以帮助您在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. 执行如下命令:

    /etc/libvirt/qemu/.xml 

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

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

    numactl hardware命令输出

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. 添加以下标签:

                
      3. 关闭VPX。

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

        /etc/libvirt/qemu/ .xml 
      5. 上电VPX。然后检查virsh vcpupin ,查看更新后的CPU钉接状态。

消除主机中断开销。

  • 检测VM_EXITSkvm_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 - - >为位图,表示IRQ 55只能调度到pcpu 0 ~ 3 
  • 关闭IRQ平衡。

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

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

    确保你运行了kvm_stat命令,以确保没有很多计数器。

思杰ADC VPX与PV网络接口

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

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

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

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

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

    运行top命令

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

    Taskset -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文件的vCPU和内存固定Linux KVM:

 NetScaler-VPX 138f7782-1cd3-484b-8b6d-7604f35b14f4 8097152 8097152 4 < cpucpupin vcpu='1' cpuset='9'/>    <内存模式='strict' nodeset='1'/>   

Citrix hypervisor上的Citrix ADC VPX实例

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

Citrix hypervisor的性能设置

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

Xl info -n 

VPX的vcpu引脚到物理内核。

xl vCPU -pin < netscaler虚拟机名称>  <物理CPU id> 

检查vcpu绑定情况。

vcpu-list 

为Citrix ADC虚拟机分配8个以上vcpu。

配置8个以上vcpu时,在Citrix Hypervisor控制台中执行如下命令:

xe vm-param-set uuid=your_vms_uuid vcpu -max=16 xe vm-param-set uuid=your_vms_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. 使用以下命令识别主机线程:

    * * * * * * * * * * * * * *——NeedCopy >

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

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

    xl list命令的输出

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

    Taskset -pc   

    例子:

    Taskset -pc 1 29189