diff options
-rw-r--r-- | docs/configuration/reference.rst | 4 | ||||
-rw-r--r-- | src/vlib/buffer.c | 20 |
2 files changed, 16 insertions, 8 deletions
diff --git a/docs/configuration/reference.rst b/docs/configuration/reference.rst index d288a6d7788..2a7726cccb4 100644 --- a/docs/configuration/reference.rst +++ b/docs/configuration/reference.rst @@ -552,7 +552,9 @@ buffers <n> ^^^^^^^^^^^^^^^ The number of buffers allocated for this specific NUMA domain. -Default is 0, which falls back to the value configured in **buffers-per-numa**. +If this is set to zero, no buffers are allocated for this domain. + +By default, the value configured in **buffers-per-numa** is used. .. code-block:: console diff --git a/src/vlib/buffer.c b/src/vlib/buffer.c index 5ba42270b1a..71fcfee2190 100644 --- a/src/vlib/buffer.c +++ b/src/vlib/buffer.c @@ -663,6 +663,7 @@ vlib_buffer_main_init_numa_alloc (struct vlib_main_t *vm, u32 numa_node, u8 unpriv) { vlib_buffer_main_t *bm = vm->buffer_main; + u32 default_buffers_per_numa = bm->default_buffers_per_numa; u32 buffers_per_numa = bm->buffers_per_numa[numa_node]; clib_error_t *error; u32 buffer_size; @@ -679,12 +680,13 @@ vlib_buffer_main_init_numa_alloc (struct vlib_main_t *vm, u32 numa_node, return clib_error_return (0, "buffer size (%llu) is greater than page " "size (%llu)", buffer_size, pagesize); - if (buffers_per_numa == 0) - buffers_per_numa = bm->default_buffers_per_numa; + if (default_buffers_per_numa == 0) + default_buffers_per_numa = unpriv ? + VLIB_BUFFER_DEFAULT_BUFFERS_PER_NUMA_UNPRIV : + VLIB_BUFFER_DEFAULT_BUFFERS_PER_NUMA; - if (buffers_per_numa == 0) - buffers_per_numa = unpriv ? VLIB_BUFFER_DEFAULT_BUFFERS_PER_NUMA_UNPRIV : - VLIB_BUFFER_DEFAULT_BUFFERS_PER_NUMA; + if (buffers_per_numa == ~0) + buffers_per_numa = default_buffers_per_numa; name = format (0, "buffers-numa-%d%c", numa_node, 0); n_pages = (buffers_per_numa - 1) / (pagesize / buffer_size) + 1; @@ -856,6 +858,10 @@ vlib_buffer_main_init (struct vlib_main_t * vm) { u8 *index = bm->default_buffer_pool_index_for_numa + numa_node; index[0] = ~0; + + if (bm->buffers_per_numa[numa_node] == 0) + continue; + if ((err = vlib_buffer_main_init_numa_node (vm, numa_node, index))) { clib_error_report (err); @@ -912,7 +918,7 @@ static clib_error_t * vlib_buffers_numa_configure (vlib_buffer_main_t *bm, u32 numa_node, unformat_input_t *input) { - u32 buffers = 0; + u32 buffers = ~0; if (numa_node >= VLIB_BUFFER_MAX_NUMA_NODES) return clib_error_return (0, "invalid numa node"); @@ -945,7 +951,7 @@ vlib_buffers_configure (vlib_main_t * vm, unformat_input_t * input) bm = vm->buffer_main; bm->log2_page_size = CLIB_MEM_PAGE_SZ_UNKNOWN; - memset (bm->buffers_per_numa, 0, sizeof (bm->buffers_per_numa)); + memset (bm->buffers_per_numa, ~0, sizeof (bm->buffers_per_numa)); while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { |