summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2024-07-05 15:23:24 +0800
committer陆秋文 <[email protected]>2024-07-05 07:29:52 +0000
commit956d45c1d920c4f4a21efcbd8d4437e0d104014f (patch)
tree18d06fa996e65711552c23b74fb294d835a41cf7
parent4d4ee55d3e1b9fdd52f0c5561c51481d7ab8f936 (diff)
rearrange the variable layout of structure tunnel_desc, enable the LTO and make O3 as default level in release build.
-rw-r--r--CMakeLists.txt12
-rw-r--r--infra/src/vnode_common.c10
-rw-r--r--infra/src/vnode_common.h28
-rw-r--r--service/CMakeLists.txt1
4 files changed, 24 insertions, 27 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3757893..a5bec6c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.9)
# Must be set before project, otherwise you cannot choose between gcc and clang
option(ENABLE_FUZZING_TEST "Enable fuzzing test" False)
@@ -42,10 +42,12 @@ endif()
set(CMAKE_C_FLAGS "-std=gnu99 -m64 -march=${MACHINE} -fPIC -Wall -Wno-format-truncation")
set(CMAKE_CXX_FLAGS "-std=gnu++11 -m64 -march=${MACHINE} -fPIC -Wall -Wno-format-truncation")
-#set(CMAKE_C_FLAGS_RELEASE "-O3")
-#set(CMAKE_CXX_FLAGS_RELEASE "-O3")
-#set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g")
-#set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g")
+# enable LTO
+set(CMAKE_INTERPROCEDURAL_OPTIMIZATION True)
+
+# Force -O3 for release and relwithdebinfo
+string(REPLACE "-O2" "-O3" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+string(REPLACE "-O2" "-O3" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
if(ENABLE_WARNING_AS_ERROR)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
diff --git a/infra/src/vnode_common.c b/infra/src/vnode_common.c
index eed2cd9..c49faf0 100644
--- a/infra/src/vnode_common.c
+++ b/infra/src/vnode_common.c
@@ -55,7 +55,6 @@ static struct tunnel_desc * tunnel_new(const char * symbol, unsigned int sz_excl
goto errout;
}
- snprintf(desc->symbol, sizeof(desc->symbol), "%s", symbol);
desc->tunnel_size = sz_exclusive + sz_shared;
desc->en_buffer = ZMALLOC(sizeof(void *) * MR_LIBVNODE_MAX_SZ_BURST);
@@ -97,13 +96,13 @@ errout:
/* Delete a tunnel */
static int tunnel_delete(struct tunnel_desc * desc)
{
- for (int i = 0; i < desc->sz_en_buffer_used; i++)
+ for (int i = 0; i < desc->sz_en_buffer_used; i++)
{
rte_pktmbuf_free(desc->en_buffer[i]);
}
- struct rte_mbuf * mbuf;
- while (rte_ring_dequeue(desc->tunnel_object, (void **)&mbuf) == 0)
+ struct rte_mbuf * mbuf;
+ while (rte_ring_dequeue(desc->tunnel_object, (void **)&mbuf) == 0)
{
rte_pktmbuf_free(mbuf);
}
@@ -115,11 +114,12 @@ static int tunnel_delete(struct tunnel_desc * desc)
rte_pktmbuf_free(desc->rt_buffer[i]);
}
- MR_VERIFY_2(rte_ring_empty(desc->tunnel_object) == 1, "Tunnel %s is not empty", desc->symbol);
+ MR_VERIFY_2(rte_ring_empty(desc->tunnel_object) == 1, "Tunnel %p is not empty", desc);
rte_free(desc->en_buffer);
rte_free(desc->rt_buffer);
rte_ring_free(desc->tunnel_object);
rte_free(desc);
+
return 0;
}
diff --git a/infra/src/vnode_common.h b/infra/src/vnode_common.h
index 4dc35b9..061bc3b 100644
--- a/infra/src/vnode_common.h
+++ b/infra/src/vnode_common.h
@@ -23,36 +23,24 @@ struct tunnel_desc
{
/* first cacheline, read only */
RTE_MARKER cacheline0;
-
- /* Tunnel Name */
- char symbol[MR_SYMBOL_MAX];
/* Tunel Object, real object to hold pointers */
struct rte_ring * tunnel_object;
/* Tunnel Size */
unsigned int tunnel_size;
- /* Tunnel Enqueue Buffer */
+ unsigned int sz_en_buffer;
struct rte_mbuf ** en_buffer;
+
+ unsigned int sz_rt_buffer;
struct rte_mbuf ** rt_buffer;
- /* second cacheline, read/write */
+ /* second cache line, read/write on prod cores */
RTE_MARKER cacheline1 __rte_cache_min_aligned;
- int32_t inflight_credits;
- /* Tunnel Enqueue Buffer Size */
- unsigned int sz_en_buffer;
/* Tunnel Enqueue Buffer Used */
unsigned int sz_en_buffer_used;
- /* Return Buffer Size */
- unsigned int sz_rt_buffer;
/* Return Buffer Used */
unsigned int sz_rt_buffer_used;
-
-#if VNODE_CHECK_THREAD_SAFE
- /* For debug, to check concurrent access of en_buffer */
- rte_spinlock_t lock_thread_safe_check;
-#endif
-
/* counters */
uint64_t on_line;
uint64_t deliver;
@@ -62,6 +50,14 @@ struct tunnel_desc
/* queue length */
unsigned int q_len;
float q_len_avg;
+
+ RTE_MARKER cacheline2 __rte_cache_min_aligned;
+ int32_t inflight_credits;
+
+#if VNODE_CHECK_THREAD_SAFE
+ /* For debug, to check concurrent access of en_buffer */
+ rte_spinlock_t lock_thread_safe_check;
+#endif
};
struct tunnel_block
diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt
index cac5fc2..ea427fe 100644
--- a/service/CMakeLists.txt
+++ b/service/CMakeLists.txt
@@ -13,7 +13,6 @@ target_link_libraries(mrzcpd MESA_prof_load_static libdpdk ${SYSTEMD_LIBRARIES})
target_link_libraries(mrzcpd rt pthread dl infra z elf)
target_include_directories(mrzcpd INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include/")
target_include_directories(mrzcpd INTERFACE ${SYSTEMD_INCLUDE_DIRS})
-
install(TARGETS mrzcpd RUNTIME DESTINATION ${MR_INSTALL_BINDIR} COMPONENT Program)
add_executable(TestOLP test/TestOLP.cc src/olp_6500.c)