VMware ESX、Linux KVM、およびCitrix Hypervisor上でのNetScaler VPXパフォーマンスを最適化する

最終公開日 : Oct 05, 2026
NetScaler VPXのパフォーマンスは、ハイパーバイザー、割り当てられたシステムリソース、およびホスト構成によって大きく異なります。目的のパフォーマンスを達成するには、まずVPXデータシートの推奨事項に従い、その後、このドキュメントで提供されているベストプラクティスを使用してさらに最適化してください。

VMware ESXハイパーバイザー上のNetScaler VPXインスタンス

このセクションでは、構成可能なオプションと設定の詳細、およびVMware ESXハイパーバイザー上のNetScaler VPXインスタンスの最適なパフォーマンスを達成するのに役立つその他の提案について説明します。
  • ESXホストでの推奨構成(vpx-performance-on-esx-kvm-xen.html#recommended-configuration-on-esx-hosts)
  • E1000ネットワークインターフェイスを備えたNetScaler VPX(vpx-performance-on-esx-kvm-xen.html#citrix-adc-vpx-with-e1000-network-interfaces)
  • VMXNET3ネットワークインターフェイスを備えたNetScaler VPX(vpx-performance-on-esx-kvm-xen.html#citrix-adc-vpx-with-vmxnet3-network-interfaces)
  • SR-IOVおよびPCIパススルーネットワークインターフェイスを備えたNetScaler VPX(vpx-performance-on-esx-kvm-xen.html#citrix-adc-vpx-with-sr-iov-and-pci-passthrough-network-interfaces)

ESXホストでの推奨構成

E1000、VMXNET3、SR-IOV、およびPCIパススルーネットワークインターフェイスを備えたVPXで高いパフォーマンスを達成するには、次の推奨事項に従ってください。
  • ESXホストにプロビジョニングされる仮想CPU (vCPU) の総数は、ESXホスト上の物理CPU (pCPU) の総数以下である必要があります。
  • 良好な結果を達成するには、Non-uniform Memory Access (NUMA) アフィニティとCPUアフィニティをESXホストに設定する必要があります。
    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ホストで、1つのpNIC vSwitchから2つの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
  • vNICのTxスループットをさらに向上させるには、デバイス(NIC)キューごとに個別のTx完了スレッドとRxスレッドを使用します。以下のESXコマンドを使用します。
    esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
注:
更新された設定を適用するには、VMware ESXホストを再起動してください。

pNICあたり2つのvNIC展開

以下は、より優れたネットワークパフォーマンスを提供するpNICあたり2つのvNIC展開モデルのサンプル構成と設定コマンドです。
pNICあたり2つのvNIC展開(/en-us/vpx/media/two-vnics-per-pnic-deployment.png)
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
注:
ルートテーブルに次の2つのエントリを含めるようにしてください。
  • 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 ホストで次の設定を行います。
  • 1つの pNIC vSwitch から2つの 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 から2つの 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ごとに1つの送信スレッドを使用するように構成します。
    ethernetX.ctxPerDev = "1"
  • VMの構成に次の設定を追加して、VMがvNICごとに最大8つの送信スレッドを使用するように構成します。
    ethernetX.ctxPerDev = "3"
    注:
    vNICあたりの送信スレッド数を増やすと、ESXホストでより多くのCPUリソース(最大8つ)が必要になります。上記の構成を行う前に、十分なCPUリソースが利用可能であることを確認してください。
注:
更新された設定を適用するには、VMware ESXホストを再起動してください。
VMXNET3をpNICあたり2つのvNIC展開として構成できます。詳細については、「pNICあたり2つの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ビルド48.x以降、NetScaler VPXはESX上のVMXNET3デバイスで最大19のRxおよびTxキューをサポートします。
前提条件:
VMXNET3デバイスのESXで最大19のRxおよびTxキューを構成するには、次の前提条件が満たされていることを確認してください。
  • NetScaler VPX のバージョンは 13.1 ビルド 48.X 以降です。
  • NetScaler VPX は、VMware ESX 7.0 以降でサポートされているハードウェアバージョン 17 以降の仮想マシンで構成されています。
8 を超える Rx および Tx キューをサポートするように VMXNET3 インターフェイスを構成する:
  1. 仮想マシン構成ファイル (.vmx) を開きます。
  2. ethernetX.maxTxQueues と ethernetX.maxRxQueues の値を構成して、Rx および TX キューの数を指定します (X は構成する仮想 NIC の数です)。構成されるキューの最大数は、仮想マシン内の 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 コマンドを使用して NIC の NUMA ドメインを見つけます。
VPX のメモリと CPU が同じ場所にピン留めされていることを確認してください。 以下の出力では、10G NIC「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のvCPUを物理コアに固定します。
  • VPXのvCPUとpCPUのマッピングを表示するには、次のコマンドを入力します
    virsh vcpupin <VPX name>virsh-vcpupin コマンドの出力
    vCPU 0~4は物理コア 8~11にマッピングされています。
  • 現在のpCPU使用率を表示するには、次のコマンドを入力します。
    mpstat -P ALL 5mpstat コマンドの出力
    この出力では、8は管理CPUで、9~11はパケットエンジンです。
  • vCPUとpCPUのピンニングを変更するには、2つのオプションがあります。
    • 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ノードマッピングでVMの構成情報を更新します。
        virsh define /etc/libvirt/qemu/ <VPX_name>.xml
      5. VPXの電源をオンにします。次に、ホスト上でvirsh vcpupin <VPX name>コマンドの出力を確認して、更新されたCPUピンニングを確認します。
ホスト割り込みのオーバーヘッドを排除する。
  • kvm_stat コマンドを使用して VM_EXITS を検出します。
    ハイパーバイザーレベルでは、ホスト割り込みは、VPX の vCPU が固定されているのと同じ pCPU にマッピングされます。これにより、VPX 上の vCPU が定期的に強制終了される可能性があります。
    ホストを実行している VM によって行われた VM 終了を見つけるには、kvm_stat コマンドを使用します。
    [root@localhost ~]# kvm_stat -1  | grep EXTERNAL
    kvm_exit(EXTERNAL_INTERRUPT)  1728349 27738
    [root@localhost ~]#
    1+M のオーダーで値が高い場合は、問題があることを示します。
    単一の VM が存在する場合、期待される値は 30~100 K です。それ以上の場合、1つ以上のホスト割り込みベクトルが同じ pCPU にマッピングされていることを示している可能性があります。
  • ホスト割り込みを検出し、ホスト割り込みを移行します。
    「/proc/interrupts」ファイルに対して concatenate コマンドを実行すると、すべてのホスト割り込みマッピングが表示されます。1つ以上のアクティブな 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 あたり 2 つの vNIC 展開として構成できます。詳細については、「pNIC あたり 2 つの vNIC 展開」を参照してください。
PV (virtio) インターフェイスの最適なパフォーマンスを得るには、次の手順に従います。
  • PCIeスロット/NICが関連付けられているNUMAドメインを特定します。
  • VPXのメモリとvCPUは、同じNUMAドメインにピン留めする必要があります。
  • Vhostスレッドは、同じNUMAドメイン内のCPUにバインドする必要があります。
仮想ホストスレッドを対応するCPUにバインドする:
  1. トラフィックが開始されたら、ホストでtopコマンドを実行します。
    topコマンドを実行する
  2. 仮想ホストプロセス(vhost-<pid-of-qemu>という名前)のアフィニティを特定します。
  3. 次のコマンドを使用して、以前に特定したNUMAドメイン内の物理コアにvHostプロセスをバインドします。
    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. 次のコマンドを使用して、vCPUをバインドするのと同じ物理コアにQEMUプロセスをバインドします。
    taskset –pc 8-11 29824

SR-IOVおよびFortville PCIeパススルーネットワークインターフェイスを備えたNetScaler VPX

SR-IOVおよびFortville PCIeパススルーネットワークインターフェイスの最適なパフォーマンスを得るには、次の手順に従います。
  • PCIeスロット/NICが関連付けられている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 Hypervisor上でのNetScaler VPXインスタンス

このセクションでは、設定可能なオプションと設定の詳細、およびCitrix Hypervisor上でのNetScaler VPXインスタンスの最適なパフォーマンスを実現するのに役立つその他の提案について説明します。

Citrix Hypervisorのパフォーマンス設定

"xl"コマンドを使用してNICの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

最適なパフォーマンスを得るには、他のPV環境と同様に、pNICあたり2つのvNIC、およびpNICあたり1つのvNIC構成が推奨されます。
パラ仮想化(netfront)インターフェースの最適なパフォーマンスを達成するには、次の手順に従います。
  • PCIeスロットまたはNICが関連付けられているNUMAドメインを特定します。
  • VPXのメモリとvCPUを同じNUMAドメインに固定します。
  • Domain-0 vCPUを同じNUMAドメインの残りのCPUにバインドします。
  • vNICのホストRx/TxスレッドをDomain-0 vCPUに固定します。
ホストスレッドをDomain-0 vCPUに固定する:
  1. Citrix Hypervisorホストシェルでxl listコマンドを使用して、VPXのXen-IDを見つけます。
  2. 次のコマンドを使用してホストスレッドを特定します。
    ps -ax | grep vif <Xen-ID>
    次の例では、これらの値は以下を示します。
    • vif5.0 - XenCenterでVPXに割り当てられた最初のインターフェースのスレッド(管理インターフェース)。
    • vif5.1 - VPXに割り当てられた2番目のインターフェースのスレッドなど。
  3. 次のコマンドを使用して、スレッドをDomain-0 vCPUにピン留めします:
    taskset –pc <core-id> <process-id>
    例:
    taskset -pc 1 29189