diff options
| author | Lu Qiuwen <[email protected]> | 2024-07-05 15:23:24 +0800 |
|---|---|---|
| committer | 陆秋文 <[email protected]> | 2024-07-05 07:29:52 +0000 |
| commit | 956d45c1d920c4f4a21efcbd8d4437e0d104014f (patch) | |
| tree | 18d06fa996e65711552c23b74fb294d835a41cf7 | |
| parent | 4d4ee55d3e1b9fdd52f0c5561c51481d7ab8f936 (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.txt | 12 | ||||
| -rw-r--r-- | infra/src/vnode_common.c | 10 | ||||
| -rw-r--r-- | infra/src/vnode_common.h | 28 | ||||
| -rw-r--r-- | service/CMakeLists.txt | 1 |
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) |
