From 4d319010eaeb17cce9af55ef00feb71a6930c931 Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Mon, 9 May 2016 18:35:12 +0300 Subject: fix cache splitter --- src/stateless/cp/trex_vm_splitter.cpp | 28 ++++++++++++++++++++++++++++ src/stateless/dp/trex_stateless_dp_core.cpp | 3 --- 2 files changed, 28 insertions(+), 3 deletions(-) (limited to 'src/stateless') diff --git a/src/stateless/cp/trex_vm_splitter.cpp b/src/stateless/cp/trex_vm_splitter.cpp index 963b4525..5069c535 100644 --- a/src/stateless/cp/trex_vm_splitter.cpp +++ b/src/stateless/cp/trex_vm_splitter.cpp @@ -40,6 +40,34 @@ TrexVmSplitter::split(TrexStream *stream, std::vector core_streams m_core_streams = &core_streams; m_stream = stream; + uint16_t cache_size=m_stream->m_cache_size; + /* split the cache_size */ + if (cache_size>0) { + + /* TBD need to check if we need to it is not too big from pool */ + if (cache_size > 10000) { + throw TrexException("Cache is too big try to reduce it "); + } + + /* split like variable splitters with leftovers */ + uint16_t cache_per_core = cache_size/m_dp_core_count; + uint16_t leftover = cache_size % m_dp_core_count; + + if (cache_per_core<1) { + cache_per_core=1; + leftover=0; + } + + for (TrexStream *core_stream : *m_core_streams) { + core_stream->m_cache_size = cache_per_core; + if (leftover) { + core_stream->m_cache_size+=1; + leftover-=1; + } + } + } + + /* if we cannot split - compile the main and duplicate */ bool rc = split_internal(); if (!rc) { diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index 4bfeef4b..7e9bec1d 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -678,10 +678,7 @@ void TrexStatelessDpCore::replay_vm_into_cache(TrexStream * stream, assert(cache_size>0); rte_mbuf_t * m=0; - /* TBD do we have enough from this type of object , need to ask ! */ - uint32_t buf_size = CGenNodeCacheMbuf::get_object_size(cache_size); - /* TBD replace with align, zero API */ CGenNodeCacheMbuf * p = (CGenNodeCacheMbuf *)malloc(buf_size); assert(p); memset(p,0,buf_size); -- cgit 1.2.3-korg