From 5481caa84071e490249bce0a45206e0145e4e1f3 Mon Sep 17 00:00:00 2001 From: obdev Date: Sat, 12 Oct 2024 07:15:11 +0000 Subject: [PATCH] =?UTF-8?q?perf=20=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E5=8F=82=E6=95=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sh | 2 +- cmake/Env.cmake | 27 ++++++++++++++------------- src/observer/CMakeLists.txt | 2 ++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/build.sh b/build.sh index 3bbb72999..103e1abc1 100755 --- a/build.sh +++ b/build.sh @@ -186,7 +186,7 @@ function build ln -sf ${TOPDIR}/build_clangd/compile_commands.json ${TOPDIR}/compile_commands.json ;; xperf) - do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_AUTO_FDO=ON -DENABLE_THIN_LTO=ON -DOB_USE_LLD=$LLD_OPTION -DENABLE_HOTFUNC=ON + do_build "$@" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_AUTO_FDO=ON -DENABLE_THIN_LTO=ON -DOB_USE_LLD=$LLD_OPTION -DENABLE_HOTFUNC=ON -DOB_USE_CCACHE=OFF ;; xdebug_asan) do_build "$@" -DCMAKE_BUILD_TYPE=Debug -DOB_USE_LLD=$LLD_OPTION -DOB_USE_ASAN=$ASAN_OPTION diff --git a/cmake/Env.cmake b/cmake/Env.cmake index 8a4fd3a89..ff312cdc3 100644 --- a/cmake/Env.cmake +++ b/cmake/Env.cmake @@ -62,14 +62,6 @@ if(ENABLE_AUTO_FDO) set(AUTO_FDO_OPT "-finline-functions -fprofile-sample-use=${CMAKE_SOURCE_DIR}/observer.prof.1702984872675") endif() -ob_define(THIN_LTO_OPT "") -ob_define(THIN_LTO_CONCURRENCY_LINK "") - -if(ENABLE_THIN_LTO) - set(THIN_LTO_OPT "-flto=thin") - set(THIN_LTO_CONCURRENCY_LINK "-Wl,--thinlto-jobs=${LTO_JOBS}") -endif() - set(HOTFUNC_OPT "") if(ENABLE_HOTFUNC) set(HOTFUNC_OPT "-Wl,--no-warn-symbol-ordering,--symbol-ordering-file,${HOTFUNC_PATH}") @@ -209,8 +201,17 @@ if (OB_USE_CCACHE) endif() endif(OB_USE_CCACHE) +ob_define(THIN_LTO_OPT "") +ob_define(THIN_LTO_CONCURRENCY_LINK "") + if (OB_USE_CLANG) + if(ENABLE_THIN_LTO) + message(STATUS "Enable LTO in perf mode for observer") + set(THIN_LTO_OPT "-flto=thin") + set(THIN_LTO_CONCURRENCY_LINK "-Wl,--thinlto-jobs=${LTO_JOBS}") + endif() + if (OB_CC) message(STATUS "Using OB_CC compiler: ${OB_CC}") else() @@ -243,11 +244,11 @@ if (OB_USE_CLANG) set(REORDER_LINK_OPT "-Wl,--no-rosegment,--build-id=sha1 ${HOTFUNC_OPT}") set(OB_LD_BIN "${DEVTOOLS_DIR}/bin/ld.lld") endif() - set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11") - set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") - set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} ${THIN_LTO_CONCURRENCY_LINK} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT}") - set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT}") - set(CMAKE_EXE_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${PIE_OPT} ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT} ${CMAKE_COVERAGE_EXE_LINKER_OPTIONS}") + set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11") + set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") + set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT}") + set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${REORDER_LINK_OPT}") + set(CMAKE_EXE_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${PIE_OPT} ${REORDER_LINK_OPT} ${CMAKE_COVERAGE_EXE_LINKER_OPTIONS}") else() # not clang, use gcc if(OB_BUILD_OPENSOURCE) message("gcc9 not support currently, please set OB_USE_CLANG ON and we will finish it as soon as possible") diff --git a/src/observer/CMakeLists.txt b/src/observer/CMakeLists.txt index 37655e7e6..445c81e0a 100644 --- a/src/observer/CMakeLists.txt +++ b/src/observer/CMakeLists.txt @@ -550,6 +550,8 @@ target_link_libraries(ob_main PUBLIC ob_base) add_executable(observer) target_link_libraries(observer PRIVATE + ${THIN_LTO_OPT} + ${THIN_LTO_CONCURRENCY_LINK} -Wl,--start-group ob_main ob_malloc