Reduce ring size for dpdk NICs and overtal mem footprint 68/1768/2
authorDamjan Marion <damarion@cisco.com>
Sun, 26 Jun 2016 18:16:57 +0000 (20:16 +0200)
committerDave Barach <openvpp@barachs.net>
Tue, 28 Jun 2016 15:08:45 +0000 (15:08 +0000)
Size of interface descriptor rings have direct impact
on Last Level Cache utilization, and can significantly affect performance.
So generally having smaller ring size is good idea as long as
there is enough buffer in the ring to accomodate line rate.

Here we are reducing rings sizes to 1024 which is still bigger
than lab verified 512 buffers per ring.

Indirectly, this also affects memory footprint, as we can have
smaller buffer allocation, which is now 16384 (previously it was 32768)

This patch also fixes issue with i40e vector PMD which was leaking
buffers when previous default ring sizes were set.

Change-Id: I58fb40586304b2f0cb5de9a444055da3cd3acb53
Signed-off-by: Damjan Marion <damarion@cisco.com>
vnet/vnet/devices/dpdk/dpdk.h
vnet/vnet/devices/dpdk/dpdk_priv.h
vnet/vnet/devices/dpdk/init.c

index 6d4ded1..1c3d0bb 100644 (file)
@@ -63,7 +63,7 @@
 
 #include <vlib/pci/pci.h>
 
-#define NB_MBUF   (32<<10)
+#define NB_MBUF   (16<<10)
 
 extern vnet_device_class_t dpdk_device_class;
 extern vlib_node_registration_t dpdk_input_node;
index c202d85..24c91c6 100644 (file)
 #define DPDK_NB_TX_DESC_DEFAULT   512
 #define DPDK_NB_RX_DESC_VIRTIO    256
 #define DPDK_NB_TX_DESC_VIRTIO    256
-#define DPDK_NB_RX_DESC_10GE    2048
-#define DPDK_NB_TX_DESC_10GE    2048
-#define DPDK_NB_RX_DESC_40GE    (4096-128)
-#define DPDK_NB_TX_DESC_40GE    2048
-#define DPDK_NB_RX_DESC_ENIC    (4096+1024)
+#define DPDK_NB_RX_DESC_10GE    1024
+#define DPDK_NB_TX_DESC_10GE    1024
+#define DPDK_NB_RX_DESC_40GE    1024
+#define DPDK_NB_TX_DESC_40GE    1024
+#define DPDK_NB_RX_DESC_ENIC    1024
 
 /* These args appear by themselves */
 #define foreach_eal_double_hyphen_predicate_arg \
index 2ae3922..1f73949 100644 (file)
@@ -1147,7 +1147,7 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
          clib_bitmap_foreach (c, tm->cpu_socket_bitmap, (
            {
              vec_validate(mem_by_socket, c);
-             mem_by_socket[c] = 512; /* default per-socket mem */
+             mem_by_socket[c] = 256; /* default per-socket mem */
            }
          ));
        }