Skip to content

Performance observations when running NF's on local and/or remote NUMA node in a server  #285

Open
@Balaram6712

Description

@Balaram6712

Respected sir,

Please find the following observations and couple of queries on how we can improve the throughput in such cases.

Experimental setup:

We run OpenNetVM on a server which is a two-node (NUMA) server with 24 cores (12 cores per each node), 96GB memory, and one dual-port 10G NICs. We use DPDK Pktgen to generate traffic, which runs on another server which has the same configuration as the previous one. Both servers run Ubuntu 18.04. Two NICs are located on Node-0 (we call it as local node). Node-1 is called remote node. Two servers are connected in back-to-back manner using dual-port 10G NICs.

On top this setup we run multiple following experiments

  1. Running single NF (basic_monitor NF)
    1. Sending 9 Gbps traffic from one NIC
      1. When NF runs on a local node, we have observed full throughput (9 Gbps).
      2. When NF runs on a remote node, we have observed 4.5 Gbps throughput.
        1. In order to improve throughput, we have done the following steps and observed 7 Gbps throughput
          • Increasing buffer size at NF buffer size as well here where is changed to #define NF_QUEUE_RINGSIZE 65536
          • Increasing the buffer size for a port of RX, TX thread RX buffer, TX buffer changed to
            #define RTE_MP_RX_DESC_DEFAULT 8192, #define RTE_MP_TX_DESC_DEFAULT 8192
          • Also the packet read size on NF side here changed to #define PACKET_READ_SIZE ((uint16_t)1024)
    2. Sending 18 Gbps traffic from two ports (9 Gbps from each port)
      1. In order to send traffic from two ports to NF we made following changes in the manager code by directly assigning the action and service id to the packet by making the following changes in this function here
        Screenshot from 2021-04-24 14-45-02
      2. We run NF basic_monitor on a local node (node 0) and we have observed throughput of around 12.5 Gbps. Whereas when we run the same NF on a remote node we have observed 4.5 Gbps throughput.
      3. The following attempts were made to improve the throughput:
        • Using multiple RX threads, TX threads by increasing the count of RX threads in the code here by changing to #define ONVM_NUM_RX_THREADS 2, also increasing the number of cores allocated while running the manager to 5(2 RX, 2TX, 1 Manager).
        • Also increasing the buffer sizes as mentioned above.
        • After these changes, we have observed throughput 15 Gbps and 6.4 Gbps when a NF runs in local node and remote node respectively.

Query 1: could you suggest any other approaches to get full throughput i.e 18 Gbps (for traffic rate 18 Gbps) when a NF runs in a local node?

  1. Running two NFs ( running basic_monitor and simple_forward)
    1. Running two NFs in local node
      1. In order to steer the traffic from each port to a specific NF, we have done the following changes:
        • The changes made to the manager code in this function here by disabling the flow table look up and assigning the action and destination based on the service id based on the port from which the packet is arriving.
          Screenshot from 2021-04-24 18-58-26
        • We have sent 9 Gbps traffic from each port (total 18 Gbps) and observed 7 Gbps throughput for each NF (total 14 Gbps)
    2. Running basic monitor on local node and simple_forward on remote node
      1. We have sent 9 Gbps traffic from each port (total 18 Gbps) and observed 4.5 Gbps throughput for each NF

Query 2: When we run two NFs in a local node, we have observed 7 Gbps throughput for each NF, whereas when we run one NF in local and another NF in remote node, we have observed 4.5 Gbps throughput for each. Here, it is surprising that throughput of NF which is running in local node is also getting 4.5 Gbps instead of 7 Gbps which we observed when both NFs were running in local node. Could you please suggest any changes to improve throughput?

Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions