Deploy a Citrix ADC BLX appliance with DPDK support

Citrix ADC BLX appliances support Data Plane Development Kit (DPDK), which is a set of Linux libraries and network interface controllers for better network performance. A Citrix ADC BLX appliance with DPDK support works only in dedicated network mode. Deploying a Citrix ADC BLX appliance with DPDK support on a Linux host consists of the following steps:

  • Download, install, and compile DPDK libraries on the Linux host
  • Configure DPDK on the Linux host
  • Configure the Citrix ADC BLX appliance for DPDK support
  • Setting the management IP address of the Citrix ADC BLX appliance for the first time
  • Starting the Citrix ADC BLX appliance

Download, install, and compile DPDK libraries on the Linux host

DPDK libraries are hosted on the official DPDK website. Installation of the DPDK libraries on the Linux host consists of extracting the DPDK package, setting DPDK environment variables, and compiling the DPDK libraries.

To download the supported DPDK libraries on the Linux host:

  1. Access the official DPDK Downloads page.

  2. Download the following supported DPDK package version to the Linux host:

    DPDK 17.11.6 (LTS)

After downloading the DPDK libraries, extract the DPDK package on the Linux host, set the RTE_SDK DPDK DPDK environment variable, and then compile the DPDK libraries:

export RTE_SDK=<path to the extracted DPDK installation directory on the Linux host>

For more information on installing and compiling DPDK on a Linux device, see the official DPDK documentation at Official DPDK Documentation.

Configure DPDK on the Linux host

After installing DPDK libraries, you must configure DPDK on the Linux host. Configuring DPDK includes the following tasks:

  • Insert the DPDK IGB UIO kernel module
  • Bind Linux host NIC ports, to be used for the Citrix ADC BLX appliance, to the DPDK IGB UIO module.
  • Set up hugepages for DPDK

Use the DPDK setup script (dpdk-setup.sh), located in the DPDK usertools subdirectory, to perform these tasks.

Note

The following DPDK related procedures are added for your convenience. For more information on configuring DPDK on a Linux system, see the official DPDK documentation at Official DPDK Documentation.

Insert the DPDK IGB UIO kernel module

To insert the DPDK IGB UIO kernel module:

  1. Run the dpdk-setup.sh script:

    bash $RTE_SDK/usertools/dpdk-setup.sh

  2. Type option 17 in the user prompt and press enter.

    .
    .
    [17] Insert IGB UIO module
    [18] Insert VFIO module
    [19] Insert KNI module
    [20] Setup hugepage mappings for non-NUMA systems
    [21] Setup hugepage mappings for NUMA systems
    [22] Display current Ethernet/Crypto device settings
    [23] Bind Ethernet/Crypto device to IGB UIO module
    [24] Bind Ethernet/Crypto device to VFIO module
    [25] Setup VFIO permissions
    .
    .
    ………………
    [34] Exit Script
    
    Option: 17
    
    

Bind Linux host NIC ports to DPDK IGB UIO module

To bind Linux host NIC ports to DPDK IGB UIO module:

  1. Run the dpdk-setup.sh script:

    ./$RTE_SDK/usertoos/dpdk-setup.sh

  2. Type option 23 in the user prompt and press enter.

    .
    .
    [17] Insert IGB UIO module
    [18] Insert VFIO module
    [19] Insert KNI module
    [20] Setup hugepage mappings for non-NUMA systems
    [21] Setup hugepage mappings for NUMA systems
    [22] Display current Ethernet/Crypto device settings
    [23] Bind Ethernet/Crypto device to IGB UIO module
    [24] Bind Ethernet/Crypto device to VFIO module
    [25] Setup VFIO permissions
    .
    .
    ………………
    [34] Exit Script
    
    Option: 23
    
    
  3. Type the PCI address of the Linux host port, which you want to bind to the DPDK IGB UIO kernel module, in the user prompt and press enter:

    
    Network devices using DPDK-compatible driver
    ============================================
    0000:83:00.1 'I350 Gigabit Fiber Network Connection 1522' drv=igb_uio unused=igb
    
    Network devices using kernel driver
    ===================================
    0000:01:00.0 'Ethernet Controller 10-Gigabit X540-AT2 1528' if=eno1 drv=ixgbe unused=igb_uio *Active*
    0000:01:00.1 'Ethernet Controller 10-Gigabit X540-AT2 1528' if=eno2 drv=ixgbe unused=igb_uio
    0000:83:00.0 'I350 Gigabit Fiber Network Connection 1522' if=enp131s0f0 drv=igb unused=igb_uio
    0000:02:00.0 'Ethernet Controller XL710 for 40GbE QSFP+ 1584' drv=i40e unused=igb_uio. << add
    0000:83:00.2 'I350 Gigabit Fiber Network Connection 1522' if=enp131s0f2 drv=igb unused=igb_uio
    0000:83:00.3 'I350 Gigabit Fiber Network Connection 1522' if=enp131s0f3 drv=igb unused=igb_uio
    0000:84:00.0 'I350 Gigabit Fiber Network Connection 1522' if=enp132s0f0 drv=igb unused=igb_uio
    0000:84:00.1 'I350 Gigabit Fiber Network Connection 1522' if=enp132s0f1 drv=igb unused=igb_uio
    ………..
    Mempool devices using kernel driver
    ===================================
    <none>
    
    Other Mempool devices
    =====================
    <none>
    
    
    Enter PCI address of device to bind to IGB UIO driver: 0000:02:00.0
    
    
  4. Repeat the above steps to bind another Linux host network port to DPDK IGB UIO module.

Set up hugepages for DPDK

To set up hugepages for DPDK:

  1. Run the dpdk-setup.sh script:

    ./$RTE_SDK/usertoos/dpdk-setup.sh

  2. Type option 20 or 21, based on the Linux host memory architecture, in the user prompt and press enter.

    .
    .
    [17] Insert IGB UIO module
    [18] Insert VFIO module
    [19] Insert KNI module
    [20] Setup hugepage mappings for non-NUMA systems.
    [21] Setup hugepage mappings for NUMA systems
    [22] Display current Ethernet/Crypto device settings
    [23] Bind Ethernet/Crypto device to IGB UIO module
    [24] Bind Ethernet/Crypto device to VFIO module
    [25] Setup VFIO permissions
    .
    .
    ………………
    [34] Exit Script
    
    Option: 21
    
    
  3. Type the number of hugepages, to be reserved for DPDK, in the user prompt and press enter:

    Removing currently reserved hugepages
    Unmounting /mnt/huge and removing directory
    
    Input the number of 2048kB hugepages
    Example: to have 128MB of hugepages available in a 2MB huge page system,
    enter '64' to reserve 64 * 2MB pages
    
    Number of pages: 1024
    
    Reserving hugepages
    Creating /mnt/huge and mounting as hugetlbfs
    
    

Configure the Citrix ADC BLX appliance for DPDK support

To configure the Citrix ADC BLX appliance for DPDK support, you must set the following parameter in the Citrix ADC BLX configuration file (blx.conf).

  • DPDK config. This parameter enables Citrix ADC BLX appliance to start in DPDK mode for better performance. Also, this parameter specifies the number of packet engines to be used by the Citrix ADC BLX appliance with DPDK support. The default value is set to 8 (0xff). Maximum number of packet engines supported by Citrix ADC BLX appliance with DPDK support is 16.

Note

After setting the DPDK config parameter and starting the Citrix ADC BLX appliance, the DPDK bound Linux NIC ports are automatically added as part of the BLX appliance.

To configure the Citrix ADC BLX appliance for DPDK support:

  1. Open the Citrix ADC BLX configuration file (blx.conf) present in the Linux host. The complete path of the Citrix ADC BLX configuration file is:

    /etc/blx/blx.conf

  2. Uncomment the following line, containing the dpdk-config parameter, in the Citrix ADC BLX configuration file (blx.conf) by removing the # (hash symbol) at the start of the line:

    # dpdk-config: -c 0xff

    Sample config

    In the following sample excerpt of a blx.conf file, dpdk-config parameter setting is enabled.

    .
    .
    # dpdk EAL core mask parameter. Applicable only when blx-dpdk is installed.
    
    dpdk-config: -c 0xff
    .
    .
    

Setting the management IP address of the Citrix ADC BLX appliance for the first time

The management IP address of a Citrix ADC BLX appliance is the IP address at which you access the appliance for management purposes. The management IP address of the Citrix ADC BLX appliance is also called the Citrix ADC IP (NSIP) address.

A Citrix ADC BLX appliance can have only one Citrix ADC IP (NSIP) address. Also, you must add a default route for the configured Citrix ADC IP subnet so that the Citrix ADC IP becomes reachable from other networks on the LAN.

For setting the management IP address of the Citrix ADC BLX appliance for the first time, you must set the related parameters in Citrix ADC BLX configuration file (blx.conf).

To set the management IP address and the default route for the first time:

  1. Open the Citrix ADC BLX configuration file (blx.conf) present in the Linux host. The complete path of the Citrix ADC BLX configuration file is:

    /etc/blx/blx.conf

  2. Uncomment the following parameter and set the management IP address:

    # ipaddress:

  3. Uncomment the following parameter and set the default route in the static route section:

    # default

Sample config:

In the following sample excerpt of a blx.conf file, management IP address and default route are set:

.
.

ipaddress: 203.0.113.10
.
.
default 203.0.113.1
.
.

Starting the Citrix ADC BLX appliance with DPDK support

Start the Citrix ADC BLX appliance by running the following command:

systemctl start blx

The Citrix ADC BLX appliance is now in Up state.

Check the status of Citrix ADC BLX appliance again:

systemctl status blx

After successfully installing and starting a Citrix ADC BLX appliance, you can configure Citrix ADC features on the appliance by using one of the following methods:

  • Citrix ADC command line utility
  • Citrix ADC GUI
  • Citrix NITRO REST APIs

For more information on using these methods, see Configure a Citrix ADC BLX appliance.

For more information on Citrix ADC features, see Citrix ADC Documentation.