aboutsummaryrefslogtreecommitdiffstats
path: root/src/svm/svm_fifo.c
diff options
context:
space:
mode:
authorDave Barach <dbarach@cisco.com>2017-08-02 13:56:13 -0400
committerFlorin Coras <florin.coras@gmail.com>2017-08-10 14:34:31 +0000
commit818eb54de01459ed3d823f8a9781bbed0845db82 (patch)
treeb3ec3cbfb20ae371a648e9c8f5a7aaaa027b457f /src/svm/svm_fifo.c
parentef5dd4f2aec6df1b58aa8d07493acf486eccf802 (diff)
Improve the svm fifo allocator
- Round up requested fifo size to the next power of two - Maintain per-segment power-of-two freelists - Allocate fifos in chunks, to amortize alignment overhead - Detach builtin test client application after each run so we can use different fifo sizes each time - Be more suspicious of session / application indices Useful prep work for dynamically resizing fifos. As far as the svm fifo code is concerned, it's OK to set fifo->nitems anywhere in the interval: [0, 1<<(fifo->freelist_index) + FIFO_SEGMENT_MIN_FIFO_SIZE] It's unlikely that setting nitems below the path MTU will work out very well... Change-Id: Idad73a027dfb7412056cb02988b77e300fa7e8a7 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/svm/svm_fifo.c')
-rw-r--r--src/svm/svm_fifo.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/svm/svm_fifo.c b/src/svm/svm_fifo.c
index e478c06e..7f8127cf 100644
--- a/src/svm/svm_fifo.c
+++ b/src/svm/svm_fifo.c
@@ -192,8 +192,11 @@ svm_fifo_t *
svm_fifo_create (u32 data_size_in_bytes)
{
svm_fifo_t *f;
+ u32 rounded_data_size;
- f = clib_mem_alloc_aligned_or_null (sizeof (*f) + data_size_in_bytes,
+ /* always round fifo data size to the next highest power-of-two */
+ rounded_data_size = (1 << (max_log2 (data_size_in_bytes)));
+ f = clib_mem_alloc_aligned_or_null (sizeof (*f) + rounded_data_size,
CLIB_CACHE_LINE_BYTES);
if (f == 0)
return 0;