优化Citrix ADC VPX在VMware ESX、Linux KVM和Citrix hypervisor上的性能
Citrix ADC VPX性能根据虚拟化环境、分配的系统资源和主机配置的不同有很大差异。为了达到预期的性能,首先遵循VPX数据表中的建议,然后使用本文提供的最佳实践进一步优化它。
Citrix ADC VPX实例在VMware ESX hypervisor上
本节包含可配置选项和设置的详细信息,以及帮助您在VMware ESX管理程序上实现Citrix ADC VPX实例的最佳性能的其他建议。
ESX主机推荐配置
为实现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
- 设置虚拟机NUMA和vCPU的亲和性,请参见VMware的文档.
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提供更好的网络性能的部署模型。
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域分配VPX内存。
的使用
命令表示分配内存的NUMA域。在下面的输出中,从NUMA节点#0分配了大约10 GB的RAM。
要更改NUMA节点映射,请执行以下步骤。
在主机上编辑VPX的。xml文件。
/etc/libvirt/qemu/ < VPX_name > . xml < !——NeedCopy >
添加以下标签:
*这是NUMA域名 关闭VPX。
运行如下命令:
virsh define /etc/libvirt/qemu/
.xml 该命令更新有NUMA节点映射的虚拟机的配置信息。
上电VPX。然后检查
使用硬件
命令的输出,查看VPX的内存分配情况。
将VPX的vcpu固定在物理核上。
输入以下命令查看VPX的vCPU到pCPU的映射关系
virsh vcpupin
0 ~ 4的vcpu对应8 ~ 11的物理核。
要查看当前的pCPU使用情况,输入以下命令:
mpstat -P ALL 5
在此输出中,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
文件与以前一样带有以下标签:在主机上编辑VPX的xml文件
/etc/libvirt/qemu/ < VPX_name > . xml < !——NeedCopy >
添加以下标签:
4 关闭VPX。
使用以下命令更新NUMA节点映射的虚拟机的配置信息:
virsh define /etc/libvirt/qemu/
.xml 上电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:
流量启动后,运行
前
命令。- 标识虚拟主机进程(命名为
vhost——< pid-of-qemu >
)亲和力。 使用以下命令将vHost进程绑定到NUMA域中的物理核上:
任务集-pc
例子:
任务集-pc 12 29838
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进程绑定到相应的物理内核:
- 确定QEMU进程正在其上运行的物理内核。有关更多信息,请参见前面的输出。
将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:
- 查找VPX的Xen-ID
xl列表
在Citrix Hypervisor主机shell上执行命令。 使用以下命令识别主机线程:
ps -ax | grep vif
在下面的例子中,这些值表示:
- vif5.0—XenCenter中分配给VPX的第一个接口的线程(管理接口)。
- vif5.1-第二个接口的线程分配给VPX等等。
使用以下命令将线程固定到Domain-0 vcpu上:
任务集-pc
例子:
任务集-pc 1 29189