diff options
| author | 童宗振 <[email protected]> | 2024-04-07 04:15:41 +0000 |
|---|---|---|
| committer | 童宗振 <[email protected]> | 2024-04-07 04:15:41 +0000 |
| commit | 90ecdafe92a93af62416fd0df899a78fbed16743 (patch) | |
| tree | be0f39d819dcc00fb6e8c9e27fda0484c3151621 | |
| parent | f1292baea5927a8ffdd3d2ef43b7128d6e8a9a1d (diff) | |
Resolve "pending issues"
| -rw-r--r-- | CMakeLists.txt | 41 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/common.h | 10 | ||||
| -rw-r--r-- | src/config.c | 66 | ||||
| -rw-r--r-- | src/config.h | 8 | ||||
| -rw-r--r-- | src/main.c | 3 | ||||
| -rw-r--r-- | support/CMakeLists.txt | 94 | ||||
| -rw-r--r-- | support/googletest-release-1.8.0.tar.gz | bin | 0 -> 1281617 bytes | |||
| -rw-r--r-- | support/libevent-2.1.12-stable.tar.bz2 | bin | 0 -> 4771840 bytes |
9 files changed, 139 insertions, 85 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index df5ecac..baa544c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,48 +9,11 @@ message(STATUS "CXX Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}") message(STATUS "C Standard: ${CMAKE_C_STANDARD}") message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}") -add_definitions(-D_GNU_SOURCE -D__STDC_LIMIT_MACROS) -# add_definitions(-DALLOW_EXPERIMENTAL_API=1) # for dpdk - -include(ExternalProject) - -# add dependencies: marsio if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "set build type to RelWithDebInfo") endif() -ExternalProject_Add(marsio PREFIX marsio - GIT_REPOSITORY [email protected]:MESA_Platform/marsio.git - GIT_TAG dp_trace_telemetry - CONFIGURE_COMMAND - COMMAND mkdir -p build - COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} .. - BUILD_COMMAND - COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build make - INSTALL_COMMAND "" - BUILD_IN_SOURCE 1) - -ExternalProject_Get_Property(marsio SOURCE_DIR) -file(MAKE_DIRECTORY ${SOURCE_DIR}/build/app) -file(MAKE_DIRECTORY ${SOURCE_DIR}/include/external) - -add_library(libmarsio STATIC IMPORTED GLOBAL) -set_target_properties(libmarsio PROPERTIES - IMPORTED_LOCATION ${SOURCE_DIR}/build/app/libmarsio.so - INTERFACE_LINK_DIRECTORIES ${SOURCE_DIR}/build/app - INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include/external -) - -# add dependencies: maat -set(MESA_FRAMEWORK_LIB_DIR /opt/MESA/lib) -set(MESA_FRAMEWORK_INCLUDE_DIR /opt/MESA/include) - -add_library(maatframe SHARED IMPORTED GLOBAL) -set_property(TARGET maatframe PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libmaatframe.so) -set_property(TARGET maatframe PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) - -add_library(MESA_prof_load SHARED IMPORTED GLOBAL) -set_property(TARGET MESA_prof_load PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libMESA_prof_load.so) -set_property(TARGET MESA_prof_load PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) +add_definitions(-D_GNU_SOURCE -D__STDC_LIMIT_MACROS) +add_subdirectory(${CMAKE_SOURCE_DIR}/support) add_subdirectory(${CMAKE_SOURCE_DIR}/src)
\ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5311200..ec0db9e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_executable(${PROJECT_NAME} main.c config.c job_ctx.c trace_output.c) -target_link_libraries(${PROJECT_NAME} libmarsio maatframe MESA_prof_load uuid pthread)
\ No newline at end of file +target_link_libraries(${PROJECT_NAME} libmarsio maatframe MESA_prof_load libevent-static uuid pthread)
\ No newline at end of file diff --git a/src/common.h b/src/common.h index c4255af..37051c4 100644 --- a/src/common.h +++ b/src/common.h @@ -22,6 +22,16 @@ #define TELEMETRY_DIM(a) (sizeof(a) / sizeof((a)[0])) +#define CHECK_OR_EXIT(condition, fmt, ...) \ + do \ + { \ + if (!(condition)) \ + { \ + syslog(LOG_ERR, fmt, ##__VA_ARGS__); \ + exit(EXIT_FAILURE); \ + } \ + } while (0) + extern struct mr_instance * mr_instance; extern struct config * g_conf; diff --git a/src/config.c b/src/config.c index 452c0ba..e35221e 100644 --- a/src/config.c +++ b/src/config.c @@ -19,11 +19,7 @@ struct config * g_conf = NULL; struct config * config_create() { struct config * conf = calloc(1, sizeof(struct config)); - if (conf == NULL) - { - syslog(LOG_ERR, "calloc failed: %s", strerror(errno)); - exit(EXIT_FAILURE); - } + CHECK_OR_EXIT(conf, "calloc failed: %s", strerror(errno)); g_conf = conf; return conf; @@ -134,61 +130,45 @@ void dynamic_config_apply() job_rule_apply(g_conf->desc, TELEMETRY_DIM(g_conf->desc)); } -void * dynamic_config_reload_handler(void * arg) +static void signal_handler(evutil_socket_t fd, short what, void * arg) { - ssize_t s; - uintptr_t sfd = (uintptr_t)arg; - struct signalfd_siginfo fdsi; - pthread_detach(pthread_self()); - - while (1) + switch (fd) { - s = read(sfd, &fdsi, sizeof(fdsi)); - if (s != sizeof(fdsi)) - { - continue; - } - - if (fdsi.ssi_signo != SIGHUP) - { - continue; - } - + case SIGHUP: dynamic_config_load(); dynamic_config_apply(); + default: + syslog(LOG_WARNING, "Received unexpected signal: %d", fd); } +} - close(sfd); - return (void *)NULL; +static void * dynamic_config_reload_thread_dispatch(void * arg) +{ + struct event_base * base = (struct event_base *)arg; + event_base_dispatch(base); + return NULL; } -void dynamic_config_reload_thread_create() +void dynamic_config_reload_init() { - int sfd; - int ret = 0; - sigset_t mask; - pthread_t thread_id; + static int signals[] = {SIGHUP}; - sigemptyset(&mask); - sigaddset(&mask, SIGHUP); + g_conf->evbase = event_base_new(); - if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1) - { - syslog(LOG_ERR, "SIGHUP: sigprocmask failed : %s", strerror(errno)); - exit(EXIT_FAILURE); - } + CHECK_OR_EXIT(g_conf->evbase, "event_base_new failed"); - sfd = signalfd(-1, &mask, 0); - if (sfd == -1) + for (unsigned int i = 0; i < TELEMETRY_DIM(signals); i++) { - syslog(LOG_ERR, "SIGHUP: signalfd failed : %s", strerror(errno)); - exit(EXIT_FAILURE); + g_conf->evsignal[i] = evsignal_new(g_conf->evbase, signals[i], signal_handler, NULL); + CHECK_OR_EXIT(g_conf->evsignal[i], "create signal event failed. signal is:%d", signals[i]); + evsignal_add(g_conf->evsignal[i], NULL); } - if (pthread_create(&thread_id, NULL, dynamic_config_reload_handler, (void *)(uintptr_t)sfd) != 0) + pthread_t tid; + if (pthread_create(&tid, NULL, dynamic_config_reload_thread_dispatch, g_conf->evbase) != 0) { - syslog(LOG_ERR, "Failed to create dynamic config reload thread: %s", strerror(errno)); + syslog(LOG_ERR, "failed to create thread for event_base dispatch"); exit(EXIT_FAILURE); } } diff --git a/src/config.h b/src/config.h index ad2fff5..eafd533 100644 --- a/src/config.h +++ b/src/config.h @@ -1,5 +1,8 @@ #pragma once #include "common.h" + +#include <event.h> + #include <limits.h> #include <sched.h> #include <stdint.h> @@ -12,6 +15,9 @@ struct config cpu_set_t cpu_set_io; uint8_t log_level; + struct event_base * evbase; + struct event * evsignal[8]; + char dp_trace_dir[PATH_MAX]; unsigned int dp_trace_file_max_size_in_KB; unsigned int dp_trace_merge_timeout; @@ -22,4 +28,4 @@ struct config * config_create(); void config_load(); void dynamic_config_load(); void dynamic_config_apply(); -void dynamic_config_reload_thread_create();
\ No newline at end of file +void dynamic_config_reload_init();
\ No newline at end of file @@ -75,7 +75,8 @@ int main(int argc, char * argv[]) dynamic_config_load(); dp_trace_output_init(); dynamic_config_apply(); - dynamic_config_reload_thread_create(); + + dynamic_config_reload_init(); unsigned int nr_thread = CPU_COUNT(&conf->cpu_set_io); diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt new file mode 100644 index 0000000..99b1bbb --- /dev/null +++ b/support/CMakeLists.txt @@ -0,0 +1,94 @@ +# CMakeFiles for 3rd library + +include(ExternalProject) + +#### GoogleTest +ExternalProject_Add(googletest PREFIX googletest + URL ${CMAKE_CURRENT_SOURCE_DIR}/googletest-release-1.8.0.tar.gz + URL_MD5 16877098823401d1bf2ed7891d7dce36 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + +ExternalProject_Get_Property(googletest INSTALL_DIR) +file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + +add_library(gtest STATIC IMPORTED GLOBAL) +add_dependencies(gtest googletest) +set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest.a) +set_property(TARGET gtest PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) +set_property(TARGET gtest PROPERTY INTERFACE_LINK_LIBRARIES pthread) + +add_library(gtest_main STATIC IMPORTED GLOBAL) +add_dependencies(gtest_main googletest) +set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest_main.a) +set_property(TARGET gtest_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) +set_property(TARGET gtest_main PROPERTY INTERFACE_LINK_LIBRARIES pthread gtest) + +add_library(gmock STATIC IMPORTED GLOBAL) +add_dependencies(gmock googletest) +set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock.a) +set_property(TARGET gmock PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + +add_library(gmock_main STATIC IMPORTED GLOBAL) +add_dependencies(gmock_main googletest) +set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock_main.a) +set_property(TARGET gmock_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + +#### libevent +ExternalProject_Add(libevent PREFIX libevent + URL ${CMAKE_CURRENT_SOURCE_DIR}/libevent-2.1.12-stable.tar.bz2 + URL_MD5 977fb199eb49d46e2c3a924143e5f570 + CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR> --disable-shared --disable-samples --disable-openssl + BUILD_COMMAND make LDFLAGS="-ldl" + BUILD_IN_SOURCE 1) + +ExternalProject_Get_Property(libevent INSTALL_DIR) +file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + +add_library(libevent-static STATIC IMPORTED GLOBAL) +add_dependencies(libevent-static libevent) +set_property(TARGET libevent-static PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libevent.a) +set_property(TARGET libevent-static PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto) +set_property(TARGET libevent-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + +add_library(libevent-static-pthreads STATIC IMPORTED GLOBAL) +add_dependencies(libevent-static-pthreads libevent) +set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libevent_pthreads.a) +set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto) +set_property(TARGET libevent-static-pthreads PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + + +##### marsio +ExternalProject_Add(marsio PREFIX marsio + GIT_REPOSITORY [email protected]:MESA_Platform/marsio.git + GIT_TAG dp_trace_telemetry + CONFIGURE_COMMAND + COMMAND mkdir -p build + COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} .. + BUILD_COMMAND + COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build make + INSTALL_COMMAND "" + BUILD_IN_SOURCE 1) + +ExternalProject_Get_Property(marsio SOURCE_DIR) +file(MAKE_DIRECTORY ${SOURCE_DIR}/build/app) +file(MAKE_DIRECTORY ${SOURCE_DIR}/include/external) + +add_library(libmarsio STATIC IMPORTED GLOBAL) +set_target_properties(libmarsio PROPERTIES + IMPORTED_LOCATION ${SOURCE_DIR}/build/app/libmarsio.so + INTERFACE_LINK_DIRECTORIES ${SOURCE_DIR}/build/app + INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include/external +) + +##### maat +set(MESA_FRAMEWORK_LIB_DIR /opt/MESA/lib) +set(MESA_FRAMEWORK_INCLUDE_DIR /opt/MESA/include) + +add_library(maatframe SHARED IMPORTED GLOBAL) +set_property(TARGET maatframe PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libmaatframe.so) +set_property(TARGET maatframe PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) + +##### MESA_prof_load +add_library(MESA_prof_load SHARED IMPORTED GLOBAL) +set_property(TARGET MESA_prof_load PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libMESA_prof_load.so) +set_property(TARGET MESA_prof_load PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR})
\ No newline at end of file diff --git a/support/googletest-release-1.8.0.tar.gz b/support/googletest-release-1.8.0.tar.gz Binary files differnew file mode 100644 index 0000000..a40df33 --- /dev/null +++ b/support/googletest-release-1.8.0.tar.gz diff --git a/support/libevent-2.1.12-stable.tar.bz2 b/support/libevent-2.1.12-stable.tar.bz2 Binary files differnew file mode 100644 index 0000000..3c42e82 --- /dev/null +++ b/support/libevent-2.1.12-stable.tar.bz2 |
