优化 NetScaler VPX 在 VMware ESX、Linux KVM 和 Citrix Hypervisors 上的性能

Last published : Oct 06, 2026
NetScaler VPX 的性能因管理程序、分配的系统资源和主机配置而异。为了达到所需的性能,请首先遵循 VPX 数据表中的建议,然后使用本文档中提供的最佳实践进一步优化它。

VMware ESX 管理程序上的 NetScaler VPX 实例

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

ESX 主机上的推荐配置

为了使使用 E1000、VMXNET3、SR-IOV 和 PCI 直通网络接口的 VPX 达到高性能,请遵循以下建议:
  • ESX 主机上配置的虚拟 CPU (vCPU) 总数必须小于或等于 ESX 主机上的物理 CPU (pCPU) 总数。
  • 必须为 ESX 主机设置非统一内存访问 (NUMA) 亲和性和 CPU 亲和性,以获得良好结果。
    – 要查找 Vmnic 的 NUMA 亲和性,请本地或远程登录到主机,然后键入:
    #vsish -e get /net/pNics/vmnic7/properties | grep NUMA
    Device NUMA Node: 0
    • 要为 VM 设置 NUMA 和 vCPU 亲和性,请参阅 VMware 文档。

使用 E1000 网络接口的 NetScaler VPX

在 VMware ESX 主机上执行以下设置:
  • 在 VMware ESX 主机上,从一个 pNIC vSwitch 创建两个 vNIC。多个 vNIC 会在 ESX 主机中创建多个 Rx 线程。这会增加 pNIC 接口的 Rx 吞吐量。
  • 为您创建的每个 vNIC 在 vSwitch 端口组级别启用 VLAN。
  • 为了提高 vNIC 传输 (Tx) 吞吐量,请在 ESX 主机中为每个 vNIC 使用单独的 Tx 线程。使用以下 ESX 命令:
    • 对于 ESX 5.5 版本:
      esxcli system settings advanced set –o /Net/NetTxWorldlet –i
    • 对于 ESX 6.0 及更高版本:
      esxcli system settings advanced set -o /Net/NetVMTxType –i 1
  • 为了进一步提高 vNIC Tx 吞吐量,请为每个设备 (NIC) 队列使用单独的 Tx 完成线程和 Rx 线程。使用以下 ESX 命令:
    esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
注意:
确保重新启动 VMware ESX 主机以应用更新的设置。

每个 pNIC 部署两个 vNIC

以下是 每个 pNIC 两个 vNIC 部署模型的示例拓扑和配置命令,该模型可提供更好的网络性能。
每个 pNIC 部署两个 vNIC
NetScaler VPX 示例配置:
为了实现前面示例拓扑中所示的部署,请在 NetScaler VPX 实例上执行以下配置:
  • 在客户端,将 SNIP (1.1.1.2) 绑定到网络接口 1/1 并启用 VLAN 标记模式。
    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 标记模式。
    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

带有 VMXNET3 网络接口的 NetScaler VPX

为了使带有 VMXNET3 网络接口的 VPX 达到高性能,请在 VMware ESX 主机上执行以下设置:
  • 从一个 pNIC vSwitch 创建两个 vNIC。多个 vNIC 会在 ESX 主机中创建多个 Rx 线程。这会增加 pNIC 接口的 Rx 吞吐量。
  • 对于您创建的每个 vNIC,在 vSwitch 端口组级别启用 VLAN。
  • 为了提高 vNIC 传输 (Tx) 吞吐量,为每个 vNIC 在 ESX 主机中使用单独的 Tx 线程。使用以下 ESX 命令:
    • 对于 ESX 5.5 版本:
    esxcli system settings advanced set –o /Net/NetTxWorldlet –i
    • 对于 ESX 6.0 及更高版本:
    esxcli system settings advanced set -o /Net/NetVMTxType –i 1
在 VMware ESX 主机上,执行以下配置:
  • 在 VMware ESX 主机上,从 1 个 pNIC vSwitch 创建两个 vNIC。多个 vNIC 会在 ESX 主机中创建多个 Tx 和 Rx 线程。这会增加 pNIC 接口的 Tx 和 Rx 吞吐量。
  • 为您创建的每个 vNIC 在 vSwitch 端口组级别启用 VLAN。
  • 要提高 vNIC 的 Tx 吞吐量,请为每个设备 (NIC) 队列使用单独的 Tx 完成线程和 Rx 线程。使用以下命令:
    esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
  • 通过将以下设置添加到 VM 的配置中,将 VM 配置为每个 vNIC 使用一个传输线程:
    ethernetX.ctxPerDev = "1"
  • 通过将以下设置添加到 VM 的配置中,将 VM 配置为每个 vNIC 最多使用 8 个传输线程:
    ethernetX.ctxPerDev = "3"
    注意:
    增加每个 vNIC 的传输线程需要 ESX 主机上更多的 CPU 资源(最多 8 个)。在进行上述设置之前,请确保有足够的 CPU 资源可用。
注意:
请务必重新启动 VMware ESX 主机以应用更新的设置。
您可以将 VMXNET3 配置为每个 pNIC 两个 vNIC部署。有关更多信息,请参阅每个 pNIC 两个 vNIC 部署。

为 VMXNET3 设备在 VMware ESX 上配置多队列和 RSS 支持

默认情况下,VMXNET3 设备仅支持 8 个 Rx 和 Tx 队列。当 VPX 上的 vCPU 数量超过 8 时,为 VMXNET3 接口配置的 Rx 和 Tx 队列数量默认切换为 1。您可以通过更改 ESX 上的某些配置,为 VMXNET3 设备配置多达 19 个 Rx 和 Tx 队列。此选项可提高性能并使数据包在 VPX 实例的 vCPU 之间均匀分布。
注意:
从 NetScaler 13.1 build 48.x 版本开始,NetScaler VPX 在 ESX 上为 VMXNET3 设备支持多达 19 个 Rx 和 Tx 队列。
先决条件:
要在 ESX 上为 VMXNET3 设备配置多达 19 个 Rx 和 Tx 队列,请确保满足以下先决条件:
  • NetScaler VPX 版本为 13.1 build 48.X 及更高版本。
  • NetScaler VPX 配置为硬件版本 17 及更高版本的虚拟机,该虚拟机受 VMware ESX 7.0 及更高版本支持。
配置 VMXNET3 接口以支持超过 8 个 Rx 和 Tx 队列:
  1. 打开虚拟机配置文件 (.vmx) 文件。
  2. 通过配置 ethernetX.maxTxQueues 和 ethernetX.maxRxQueues 值来指定 Rx 和 Tx 队列的数量(其中 X 是要配置的虚拟网卡的数量)。配置的最大队列数不得大于虚拟机中的 vCPU 数量。
    注意:
    增加队列数量也会增加 ESX 主机上的处理器开销。因此,在增加队列之前,请确保 ESX 主机中有足够的 CPU 资源。在队列数量被确定为性能瓶颈的情况下,您可以增加支持的最大队列数量。在这种情况下,我们建议逐步增加队列数量。例如,从 8 增加到 12,然后到 16,再到 20,依此类推。在每个设置下评估性能,而不是直接增加到最大限制。

具有 SR-IOV 和 PCI 直通网络接口的 NetScaler VPX

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

Linux-KVM 平台上的 NetScaler VPX 实例

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

KVM 的性能设置

在 KVM 主机上执行以下设置:
使用 lstopo 命令查找网卡的 NUMA 域:
确保 VPX 和 CPU 的内存固定在同一位置。 在以下输出中,10G 网卡“ens2”绑定到 NUMA 域 #1。
从 NUMA 域分配 VPX 内存。
numactl 命令指示分配内存的 NUMA 域。在以下输出中,大约 10 GB RAM 从 NUMA 节点 #0 分配。
要更改 NUMA 节点映射,请按照以下步骤操作。
  1. 编辑主机上 VPX 的 .xml 文件。
    /etc/libvirt/qemu/<VPX_name>.xml
  2. 添加以下标签:
    <numatune>
    <memory mode="strict" nodeset="1"/>    This is the NUMA domain name
    </numatune>
  3. 关闭 VPX。
  4. 运行以下命令:
    virsh define /etc/libvirt/qemu/<VPX_name>.xml
    此命令使用 NUMA 节点映射更新 VM 的配置信息。
  5. 启动 VPX。然后检查主机上的 numactl –hardware 命令输出,查看 VPX 的更新内存分配。
    numactl hardware 命令的输出
将 VPX 的虚拟 CPU 绑定到物理核心。
  • 要查看 VPX 的虚拟 CPU 到物理 CPU 的映射,请输入以下命令
    virsh vcpupin <VPX name>virsh-vcpupin 命令的输出
    虚拟 CPU 0–4 映射到物理核心 8–11。
  • 要查看当前物理 CPU 使用情况,请输入以下命令:
    mpstat -P ALL 5mpstat 命令的输出
    在此输出中,8 是管理 CPU,9–11 是数据包引擎。
  • 要更改虚拟 CPU 到物理 CPU 的绑定,有两种选择。
    • 在 VPX 启动后,使用以下命令在运行时更改它:
      virsh vcpupin <VPX name> <vCPU id>  <pCPU number>
      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
      2. 添加以下标签:
        <vcpu placement='static' cpuset='8-11'>4</vcpu>
            <cputune>
                <vcpupin vcpu='0' cpuset='8'/>
                <vcpupin vcpu='1' cpuset='9'/>
                <vcpupin vcpu='2' cpuset='10'/>
                <vcpupin vcpu='3' cpuset='11'/>
            </cputune>
      3. 关闭 VPX。
      4. 使用以下命令更新虚拟机的配置信息,其中包含 NUMA 节点映射:
        virsh define /etc/libvirt/qemu/ <VPX_name>.xml
      5. 启动 VPX。然后检查主机上的 virsh vcpupin <VPX name> 命令输出,以查看更新的 CPU 绑定。
消除主机中断开销。
  • 使用 kvm_stat 命令检测 VM_EXITS。
    在虚拟机管理程序级别,主机中断映射到 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–100 K。任何超出此范围的值都可能表明有一个或多个主机中断向量映射到同一 pCPU。
  • 检测主机中断并迁移主机中断。
    当您对“/proc/interrupts”文件运行 concatenate 命令时,它会显示所有主机中断映射。如果一个或多个活动 IRQ 映射到同一 pCPU,则其对应的计数器会递增。
    将与 NetScaler VPX 的 pCPU 重叠的任何中断移动到未使用的 pCPU:
    echo 0000000f > /proc/irq/55/smp_affinity
    0000000f - - > it is a bitmap, LSBs indicates that IRQ 55 can only be scheduled on pCPUs 0 – 3
  • 禁用 IRQ 平衡。
    禁用 IRQ 平衡守护程序,以便不会即时发生重新调度。
    service irqbalance stop
    service irqbalance show - To check the status
    service irqbalance start - Enable if needed
    确保运行 kvm_stat 命令以确保计数器不多。

带有 PV 网络接口的 NetScaler VPX

您可以将半虚拟化 (PV)、SR-IOV 和 PCIe 直通网络接口配置为每个 pNIC 两个 vNIC 部署。有关详细信息,请参阅 每个 pNIC 两个 vNIC 部署。
为了获得 PV (virtio) 接口的最佳性能,请执行以下步骤:
  • 识别 PCIe 插槽/网卡所绑定的 NUMA 域。
  • VPX 的内存和 vCPU 必须固定到同一个 NUMA 域。
  • Vhost 线程必须绑定到同一 NUMA 域中的 CPU。
将虚拟主机线程绑定到相应的 CPU:
  1. 流量启动后,在主机上运行 top 命令。
    运行 top 命令
  2. 识别虚拟主机进程(命名为 vhost-<pid-of-qemu>)的亲和性。
  3. 使用以下命令将 vHost 进程绑定到前面识别的 NUMA 域中的物理核心:
    taskset –pc <core-id> <process-id>
    示例:
    taskset –pc 12 29838
  4. 可以使用以下命令识别与 NUMA 域对应的处理器核心:
    [root@localhost ~]# virsh capabilities | grep cpu
    <cpu>
        </cpu>
            <cpus num='8'>
                <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
                <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
                <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
                <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
                <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
                <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
                <cpu id='6' socket_id='0' core_id='6' siblings='6'/>
                <cpu id='7' socket_id='0' core_id='7' siblings='7'/>
            </cpus>

            <cpus num='8'>
            <cpu id='8' socket_id='1' core_id='0' siblings='8'/>
            <cpu id='9' socket_id='1' core_id='1' siblings='9'/>
            <cpu id='10' socket_id='1' core_id='2' siblings='10'/>
            <cpu id='11' socket_id='1' core_id='3' siblings='11'/>
            <cpu id='12' socket_id='1' core_id='4' siblings='12'/>
            <cpu id='13' socket_id='1' core_id='5' siblings='13'/>
            <cpu id='14' socket_id='1' core_id='6' siblings='14'/>
            <cpu id='15' socket_id='1' core_id='7' siblings='15'/>
            </cpus>

        <cpuselection/>
        <cpuselection/>
将 QEMU 进程绑定到相应的物理核心:
  1. 识别 QEMU 进程正在运行的物理核心。有关更多信息,请参阅前面的输出。
  2. 使用以下命令将 QEMU 进程绑定到与 vCPU 绑定的相同物理核心:
    taskset –pc 8-11 29824

具有 SR-IOV 和 Fortville PCIe 直通网络接口的 NetScaler VPX

为了获得 SR-IOV 和 Fortville PCIe 直通网络接口的最佳性能,请遵循以下步骤:
  • 识别 PCIe 插槽/网卡所绑定的 NUMA 域。
  • VPX 的内存和 vCPU 必须绑定到同一个 NUMA 域。
适用于 Linux KVM 的 vCPU 和内存绑定 VPX XML 示例文件:
    <domain type='kvm'>
        <name>NetScaler-VPX</name>
        <uuid>138f7782-1cd3-484b-8b6d-7604f35b14f4</uuid>
        <memory unit='KiB'>8097152</memory>
        <currentMemory unit='KiB'>8097152</currentMemory>
        <vcpu placement='static'>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>
    <memory mode='strict' nodeset='1'/>
    </numatune>

    </domain>

Citrix Hypervisors 上的 NetScaler VPX 实例

本节包含有关可配置选项和设置,以及其他有助于您实现 Citrix Hypervisors 上 NetScaler VPX 实例最佳性能的建议。

适用于 Citrix Hypervisors 的性能设置

使用“xl”命令查找网卡的 NUMA 域:
xl info -n
将 VPX 的 vCPU 绑定到物理核心。
xl vcpu-pin <Netsclaer VM Name>  <vCPU id>  <physical CPU id>
检查 vCPU 的绑定。
xl vcpu-list
为 NetScaler VM 分配超过 8 个 vCPU。
要配置超过 8 个 vCPU,请从 Citrix Hypervisor™ 控制台运行以下命令:
xe vm-param-set uuid=your_vms_uuid VCPUs-max=16
xe vm-param-set uuid=your_vms_uuid VCPUs-at-startup=16

具有 SR-IOV 网络接口的 NetScaler VPX

为了获得 SR-IOV 网络接口的最佳性能,请执行以下步骤:
  • 确定 PCIe 插槽或 NIC 所绑定的 NUMA 域。
  • 将 VPX 的内存和 vCPU 固定到相同的 NUMA 域。
  • 将 Domain-0 vCPU 绑定到剩余的 CPU。

具有半虚拟化接口的 NetScaler VPX

为了获得最佳性能,建议采用每个 pNIC 两个 vNIC 和每个 pNIC 一个 vNIC 的配置,这与其他 PV 环境相同。
为了实现半虚拟化 (netfront) 接口的最佳性能,请执行以下步骤:
  • 确定 PCIe 插槽或 NIC 所绑定的 NUMA 域。
  • 将 VPX 的内存和 vCPU 固定到相同的 NUMA 域。
  • 将 Domain-0 vCPU 绑定到相同 NUMA 域的剩余 CPU。
  • 将 vNIC 的主机 Rx/Tx 线程固定到 Domain-0 vCPU。
将主机线程固定到 Domain-0 vCPU:
  1. 在 Citrix Hypervisor 主机 shell 上使用 xl list 命令查找 VPX 的 Xen-ID。
  2. 使用以下命令识别主机线程:
    ps -ax | grep vif <Xen-ID>
    在以下示例中,这些值表示:
    • vif5.0 - 分配给 XenCenter 中 VPX 的第一个接口的线程(管理接口)。
    • vif5.1 - 分配给 VPX 的第二个接口的线程,依此类推。
    xl list 命令的输出(/en-us/vpx/media/xl-list-command.png)
  3. 使用以下命令将线程固定到 Domain-0 vCPU:
    taskset –pc <core-id> <process-id>
    示例:
    taskset -pc 1 29189