summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-04-07 04:15:41 +0000
committer童宗振 <[email protected]>2024-04-07 04:15:41 +0000
commit90ecdafe92a93af62416fd0df899a78fbed16743 (patch)
treebe0f39d819dcc00fb6e8c9e27fda0484c3151621
parentf1292baea5927a8ffdd3d2ef43b7128d6e8a9a1d (diff)
Resolve "pending issues"
-rw-r--r--CMakeLists.txt41
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/common.h10
-rw-r--r--src/config.c66
-rw-r--r--src/config.h8
-rw-r--r--src/main.c3
-rw-r--r--support/CMakeLists.txt94
-rw-r--r--support/googletest-release-1.8.0.tar.gzbin0 -> 1281617 bytes
-rw-r--r--support/libevent-2.1.12-stable.tar.bz2bin0 -> 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
diff --git a/src/main.c b/src/main.c
index e8f7bec..fa2f1b6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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
new file mode 100644
index 0000000..a40df33
--- /dev/null
+++ b/support/googletest-release-1.8.0.tar.gz
Binary files differ
diff --git a/support/libevent-2.1.12-stable.tar.bz2 b/support/libevent-2.1.12-stable.tar.bz2
new file mode 100644
index 0000000..3c42e82
--- /dev/null
+++ b/support/libevent-2.1.12-stable.tar.bz2
Binary files differ