From 87716f18d5049a1ea7ba9f1bcc9c5ac711ce48dc Mon Sep 17 00:00:00 2001 From: LHesperus <2639350497@qq.com> Date: Wed, 11 Dec 2024 18:39:18 +0800 Subject: [PATCH] update to v2.0.1-1 (cherry picked from commit 5dafb18f371195cdad83e5b130867f5d02642f16) --- ...r-permission-to-755-add-oeaware-grou.patch | 39 + 0001-remove-old-code.patch | 2098 ----------------- ...-data-free-and-fix-unsubscribe-error.patch | 524 ---- ...nnect-to-the-sdk-and-command-executi.patch | 412 ---- 0004-add-command-verification.patch | 204 -- ...ce-name-add-enable-count-and-fix-bug.patch | 233 -- 0006-add-one-time-command-collection.patch | 510 ---- ...-fix-bug-free-spe-mem-after-use-data.patch | 135 -- 0008-Adjust-the-header-file-structure.patch | 2007 ---------------- ...ple-add-elf-resolve-to-support-d-fot.patch | 24 - oeAware-manager-v2.0.0.tar.gz | Bin 187196 -> 0 bytes oeAware-manager-v2.0.1.tar.gz | Bin 0 -> 165458 bytes oeAware-manager.spec | 40 +- 13 files changed, 60 insertions(+), 6166 deletions(-) create mode 100644 0001-change-the-folder-permission-to-755-add-oeaware-grou.patch delete mode 100644 0001-remove-old-code.patch delete mode 100644 0002-add-data-free-and-fix-unsubscribe-error.patch delete mode 100644 0003-fix-failed-to-connect-to-the-sdk-and-command-executi.patch delete mode 100644 0004-add-command-verification.patch delete mode 100644 0005-modify-C-interface-name-add-enable-count-and-fix-bug.patch delete mode 100644 0006-add-one-time-command-collection.patch delete mode 100644 0007-fix-bug-free-spe-mem-after-use-data.patch delete mode 100644 0008-Adjust-the-header-file-structure.patch delete mode 100644 0009-cycles-sample-add-elf-resolve-to-support-d-fot.patch delete mode 100644 oeAware-manager-v2.0.0.tar.gz create mode 100644 oeAware-manager-v2.0.1.tar.gz diff --git a/0001-change-the-folder-permission-to-755-add-oeaware-grou.patch b/0001-change-the-folder-permission-to-755-add-oeaware-grou.patch new file mode 100644 index 0000000..d7b1f30 --- /dev/null +++ b/0001-change-the-folder-permission-to-755-add-oeaware-grou.patch @@ -0,0 +1,39 @@ +From 2b39cac80efe7327b6d68fe01934919bc41249b8 Mon Sep 17 00:00:00 2001 +From: fly_1997 +Date: Tue, 10 Dec 2024 21:46:27 +0800 +Subject: [PATCH] change the folder permission to 755, add oeaware group + permission to liboeaware-sdk.so + +--- + rpm/oeAware.spec | 1 + + src/common/utils.cpp | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/rpm/oeAware.spec b/rpm/oeAware.spec +index 5fbaf1f..4c01d0a 100644 +--- a/rpm/oeAware.spec ++++ b/rpm/oeAware.spec +@@ -60,6 +60,7 @@ install -D -m 0640 ./build/output/plugin/lib/xcall.yaml %{buildroot}%{ + %post + if ! grep -q "oeaware:" /etc/group; then + groupadd oeaware ++ setfacl -m g:oeaware:r /usr/lib64/liboeaware-sdk.so + fi + systemctl start oeaware.service + chcon -t modules_object_t %{_prefix}/lib/smc/smc_acc.ko >/dev/null 2>&1 +diff --git a/src/common/utils.cpp b/src/common/utils.cpp +index 8f63a70..b118235 100644 +--- a/src/common/utils.cpp ++++ b/src/common/utils.cpp +@@ -167,7 +167,7 @@ bool CreateDir(const std::string &path) + if (stat(subPath.c_str(), &buffer) == 0) { + continue; + } +- if (mkdir(subPath.c_str(), S_IRWXU | S_IRWXG) != 0) { ++ if (mkdir(subPath.c_str(), S_IRWXU | S_IXGRP | S_IRGRP | S_IROTH | S_IXOTH) != 0) { + return false; + } + } while (pos != std::string::npos); +-- +2.45.2.windows.1 + diff --git a/0001-remove-old-code.patch b/0001-remove-old-code.patch deleted file mode 100644 index 09e933e..0000000 --- a/0001-remove-old-code.patch +++ /dev/null @@ -1,2098 +0,0 @@ -From a7893161786a6195cbb97d82969a49e02e56adac Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Wed, 20 Nov 2024 09:39:14 +0800 -Subject: [PATCH 1/5] remove old code - ---- - src/plugin/collect/pmu/plugin/plugin.c | 136 ------------ - src/plugin/collect/pmu/plugin/plugin_comm.c | 84 -------- - src/plugin/collect/pmu/plugin/plugin_comm.h | 39 ---- - .../collect/pmu/plugin/plugin_counting.c | 174 --------------- - .../collect/pmu/plugin/plugin_counting.h | 35 --- - .../plugin/plugin_napi_gro_receive_entry.c | 174 --------------- - .../plugin/plugin_napi_gro_receive_entry.h | 35 --- - .../collect/pmu/plugin/plugin_netif_rx.c | 173 --------------- - .../collect/pmu/plugin/plugin_netif_rx.h | 35 --- - .../collect/pmu/plugin/plugin_sampling.c | 176 ---------------- - .../collect/pmu/plugin/plugin_sampling.h | 35 --- - .../plugin/plugin_skb_copy_datagram_iovec.c | 174 --------------- - .../plugin/plugin_skb_copy_datagram_iovec.h | 35 --- - src/plugin/collect/pmu/plugin/plugin_spe.c | 174 --------------- - src/plugin/collect/pmu/plugin/plugin_spe.h | 35 --- - src/plugin/collect/pmu/plugin/plugin_uncore.c | 199 ------------------ - src/plugin/collect/pmu/plugin/plugin_uncore.h | 35 --- - src/plugin/collect/pmu/plugin/pmu_uncore.c | 142 ------------- - src/plugin/collect/pmu/plugin/pmu_uncore.h | 45 ---- - 19 files changed, 1935 deletions(-) - delete mode 100644 src/plugin/collect/pmu/plugin/plugin.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_comm.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_comm.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_counting.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_counting.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_netif_rx.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_netif_rx.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_sampling.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_sampling.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_spe.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_spe.h - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_uncore.c - delete mode 100644 src/plugin/collect/pmu/plugin/plugin_uncore.h - delete mode 100644 src/plugin/collect/pmu/plugin/pmu_uncore.c - delete mode 100644 src/plugin/collect/pmu/plugin/pmu_uncore.h - -diff --git a/src/plugin/collect/pmu/plugin/plugin.c b/src/plugin/collect/pmu/plugin/plugin.c -deleted file mode 100644 -index 0fc7dda..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin.c -+++ /dev/null -@@ -1,136 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include "interface.h" --#include "plugin_sampling.h" --#include "plugin_counting.h" --#include "plugin_uncore.h" --#include "plugin_spe.h" --#include "plugin_netif_rx.h" --#include "plugin_napi_gro_receive_entry.h" --#include "plugin_skb_copy_datagram_iovec.h" -- --#define INS_COLLECTOR_MAX 10 -- --static struct Interface ins_collector[INS_COLLECTOR_MAX] = {0}; -- --struct Interface sampling_collector = { -- .get_version = sampling_get_version, -- .get_description = sampling_get_description, -- .get_priority = sampling_get_priority, -- .get_type = sampling_get_type, -- .get_dep = sampling_get_dep, -- .get_name = sampling_get_name, -- .get_period = sampling_get_period, -- .enable = sampling_enable, -- .disable = sampling_disable, -- .get_ring_buf = sampling_get_ring_buf, -- .run = sampling_run, --}; -- --struct Interface counting_collector = { -- .get_version = counting_get_version, -- .get_description = counting_get_description, -- .get_priority = counting_get_priority, -- .get_type = counting_get_type, -- .get_dep = counting_get_dep, -- .get_name = counting_get_name, -- .get_period = counting_get_period, -- .enable = counting_enable, -- .disable = counting_disable, -- .get_ring_buf = counting_get_ring_buf, -- .run = counting_run, --}; -- --struct Interface uncore_collector = { -- .get_version = uncore_get_version, -- .get_description = uncore_get_description, -- .get_priority = uncore_get_priority, -- .get_type = uncore_get_type, -- .get_dep = uncore_get_dep, -- .get_name = uncore_get_name, -- .get_period = uncore_get_period, -- .enable = uncore_enable, -- .disable = uncore_disable, -- .get_ring_buf = uncore_get_ring_buf, -- .run = uncore_run, --}; -- --struct Interface spe_collector = { -- .get_version = spe_get_version, -- .get_description = spe_get_description, -- .get_priority = spe_get_priority, -- .get_type = spe_get_type, -- .get_dep = spe_get_dep, -- .get_name = spe_get_name, -- .get_period = spe_get_period, -- .enable = spe_enable, -- .disable = spe_disable, -- .get_ring_buf = spe_get_ring_buf, -- .run = spe_run, --}; -- --struct Interface netif_rx_collector = { -- .get_version = netif_rx_get_version, -- .get_description = netif_rx_get_description, -- .get_priority = netif_rx_get_priority, -- .get_type = netif_rx_get_type, -- .get_dep = netif_rx_get_dep, -- .get_name = netif_rx_get_name, -- .get_period = netif_rx_get_period, -- .enable = netif_rx_enable, -- .disable = netif_rx_disable, -- .get_ring_buf = netif_rx_get_ring_buf, -- .run = netif_rx_run, --}; -- --struct Interface g_napiGroRecEntryCollector = { -- .get_version = NapiGroRecEntryGetVer, -- .get_description = NapiGroRecEntryGetDes, -- .get_priority = NapiGroRecEntryGetPriority, -- .get_type = NapiGroRecEntryGetType, -- .get_dep = NapiGroRecEntryGetDep, -- .get_name = NapiGroRecEntryGetName, -- .get_period = NapiGroRecEntryGetPeriod, -- .enable = NapiGroRecEntryEnable, -- .disable = NapiGroRecEntryDisable, -- .get_ring_buf = NapiGroRecEntryGetBuf, -- .run = NapiGroRecEntryRun, --}; -- --struct Interface g_skbCopyDatagramIovecCollector = { -- .get_version = SkbCopyDatagramIovecGetVer, -- .get_description = SkbCopyDatagramIovecGetDes, -- .get_priority = SkbCopyDatagramIovecGetPriority, -- .get_type = SkbCopyDatagramIovecGetType, -- .get_dep = SkbCopyDatagramIovecGetDep, -- .get_name = SkbCopyDatagramIovecGetName, -- .get_period = SkbCopyDatagramIovecGetPeriod, -- .enable = SkbCopyDatagramIovecEnable, -- .disable = SkbCopyDatagramIovecDisable, -- .get_ring_buf = SkbCopyDatagramIovecGetBuf, -- .run = SkbCopyDatagramIovecRun, --}; --int get_instance(struct Interface **interface) --{ -- int ins_count = 0; -- -- ins_collector[ins_count++] = sampling_collector; -- ins_collector[ins_count++] = counting_collector; -- ins_collector[ins_count++] = uncore_collector; -- ins_collector[ins_count++] = spe_collector; -- ins_collector[ins_count++] = netif_rx_collector; -- ins_collector[ins_count++] = g_napiGroRecEntryCollector; -- ins_collector[ins_count++] = g_skbCopyDatagramIovecCollector; -- *interface = &ins_collector[0]; -- -- return ins_count; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_comm.c b/src/plugin/collect/pmu/plugin/plugin_comm.c -deleted file mode 100644 -index 401ef1f..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_comm.c -+++ /dev/null -@@ -1,84 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "interface.h" -- --struct DataRingBuf *init_buf(int buf_len, const char *instance_name) --{ -- struct DataRingBuf *data_ringbuf; -- -- data_ringbuf = (struct DataRingBuf *)malloc(sizeof(struct DataRingBuf)); -- if (!data_ringbuf) { -- printf("malloc data_ringbuf failed\n"); -- return NULL; -- } -- -- (void)memset_s(data_ringbuf, sizeof(struct DataRingBuf), 0, sizeof(struct DataRingBuf)); -- -- data_ringbuf->instance_name = instance_name; -- data_ringbuf->index = -1; -- -- data_ringbuf->buf = (struct DataBuf *)malloc(sizeof(struct DataBuf) * buf_len); -- if (!data_ringbuf->buf) { -- printf("malloc data_ringbuf buf failed\n"); -- free(data_ringbuf); -- data_ringbuf = NULL; -- return NULL; -- } -- -- (void)memset_s(data_ringbuf->buf, sizeof(struct DataBuf) * buf_len, 0, sizeof(struct DataBuf) * buf_len); -- data_ringbuf->buf_len = buf_len; -- -- return data_ringbuf; --} -- --void free_buf(struct DataRingBuf *data_ringbuf) --{ -- if (!data_ringbuf) { -- return; -- } -- -- if (!data_ringbuf->buf) { -- goto out; -- } -- -- free(data_ringbuf->buf); -- data_ringbuf->buf = NULL; -- --out: -- free(data_ringbuf); -- data_ringbuf = NULL; --} -- --void fill_buf(struct DataRingBuf *data_ringbuf, struct PmuData *pmu_data, int len) --{ -- struct DataBuf *buf; -- int index; -- -- index = (data_ringbuf->index + 1) % data_ringbuf->buf_len; -- data_ringbuf->index = index; -- data_ringbuf->count++; -- buf = &data_ringbuf->buf[index]; -- -- if (buf->data != NULL) { -- PmuDataFree(buf->data); -- buf->data = NULL; -- buf->len = 0; -- } -- -- buf->len = len; -- buf->data = (void *)pmu_data; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_comm.h b/src/plugin/collect/pmu/plugin/plugin_comm.h -deleted file mode 100644 -index 1bdc239..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_comm.h -+++ /dev/null -@@ -1,39 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_COMM_H__ --#define __PLUGIN_COMM_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --#define CYCLES_COUNTING_BUF_SIZE 10 --#define CYCLES_SAMPLING_BUF_SIZE 10 --#define UNCORE_BUF_SIZE 10 --#define SPE_BUF_SIZE 10 --#define NETIF_RX_BUF_SIZE 10 --#define NAPI_GRO_REC_ENTRY_BUF_SIZE 10 --#define SKB_COPY_DATAGRAM_IOVEC_BUF_SIZE 10 --#define NET_RECEIVE_TRACE_SAMPLE_PERIOD 10 -- --struct DataRingBuf; --struct PmuData; -- --struct DataRingBuf *init_buf(int buf_len, const char *instance_name); --void free_buf(struct DataRingBuf *data_ringbuf); --void fill_buf(struct DataRingBuf *data_ringbuf, struct PmuData *pmu_data, int len); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_counting.c b/src/plugin/collect/pmu/plugin/plugin_counting.c -deleted file mode 100644 -index 39573fa..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_counting.c -+++ /dev/null -@@ -1,174 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_counting.h" -- --static bool counting_is_open = false; --static int counting_pd = -1; --static struct DataRingBuf *counting_buf = NULL; --struct PmuData *counting_data = NULL; -- --static int counting_init() --{ -- counting_buf = init_buf(CYCLES_COUNTING_BUF_SIZE, PMU_CYCLES_COUNTING); -- if (!counting_buf) { -- return -1; -- } -- -- return 0; --} -- --static void counting_fini() --{ -- if (!counting_buf) { -- return; -- } -- -- free_buf(counting_buf); -- counting_buf = NULL; --} -- --static int counting_open() --{ -- struct PmuAttr attr; -- char *evtList[1]; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- evtList[0] = "cycles"; -- -- attr.evtList = evtList; -- attr.numEvt = 1; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- -- pd = PmuOpen(COUNTING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- counting_is_open = true; -- return pd; --} -- --static void counting_close() --{ -- PmuClose(counting_pd); -- counting_pd = -1; -- counting_is_open = false; --} -- --bool counting_enable() --{ -- if (!counting_buf) { -- int ret = counting_init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!counting_is_open) { -- counting_pd = counting_open(); -- if (counting_pd == -1) { -- counting_fini(); -- goto err; -- } -- } -- -- return PmuEnable(counting_pd) == 0; -- --err: -- return false; --} -- --void counting_disable() --{ -- PmuDisable(counting_pd); -- counting_close(); -- counting_fini(); --} -- --const struct DataRingBuf *counting_get_ring_buf() --{ -- return (const struct DataRingBuf *)counting_buf; --} -- --static void counting_reflash_ring_buf() --{ -- struct DataRingBuf *data_ringbuf; -- int len; -- -- data_ringbuf = (struct DataRingBuf *)counting_buf; -- if (!data_ringbuf) { -- printf("counting_buf has no malloc\n"); -- return; -- } -- -- PmuDisable(counting_pd); -- len = PmuRead(counting_pd, &counting_data); -- PmuEnable(counting_pd); -- -- fill_buf(data_ringbuf, counting_data, len); --} -- --void counting_run(const struct Param *param) --{ -- (void)param; -- counting_reflash_ring_buf(); --} -- --const char *counting_get_version() --{ -- return NULL; --} -- --const char *counting_get_name() --{ -- return PMU_CYCLES_COUNTING; --} -- --const char *counting_get_description() --{ -- return NULL; --} -- --const char *counting_get_dep() --{ -- return NULL; --} -- --int counting_get_priority() --{ -- return 0; --} -- --int counting_get_type() --{ -- return -1; --} -- --int counting_get_period() --{ -- return 100; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_counting.h b/src/plugin/collect/pmu/plugin/plugin_counting.h -deleted file mode 100644 -index c414458..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_counting.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_COUNTING_H__ --#define __PLUGIN_COUNTING_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *counting_get_version(); --const char *counting_get_name(); --const char *counting_get_description(); --const char *counting_get_dep(); --int counting_get_priority(); --int counting_get_type(); --int counting_get_period(); --bool counting_enable(); --void counting_disable(); --const struct DataRingBuf *counting_get_ring_buf(); --void counting_run(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.c b/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.c -deleted file mode 100644 -index 6c7b9a3..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.c -+++ /dev/null -@@ -1,174 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_sampling.h" -- --static bool g_samplingIsOpen = false; --static int g_samplingPd = -1; --static struct DataRingBuf *g_samplingBuf = NULL; --struct PmuData *g_pmuData = NULL; -- --static int Init() --{ -- g_samplingBuf = init_buf(NAPI_GRO_REC_ENTRY_BUF_SIZE, PMU_NAPI_GRO_REC_ENTRY); -- if (!g_samplingBuf) { -- return -1; -- } -- -- return 0; --} -- --static void Finish() --{ -- if (!g_samplingBuf) { -- return; -- } -- -- free_buf(g_samplingBuf); -- g_samplingBuf = NULL; --} -- --static int Open() --{ -- struct PmuAttr attr; -- char *evtList[1]; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- evtList[0] = "net:napi_gro_receive_entry"; -- -- attr.evtList = evtList; -- attr.numEvt = 1; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- attr.period = NET_RECEIVE_TRACE_SAMPLE_PERIOD; -- -- pd = PmuOpen(SAMPLING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- g_samplingIsOpen = true; -- return pd; --} -- --static void Close() --{ -- PmuClose(g_samplingPd); -- g_samplingPd = -1; -- g_samplingIsOpen = false; --} -- --bool NapiGroRecEntryEnable() --{ -- if (!g_samplingBuf) { -- int ret = Init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!g_samplingIsOpen) { -- g_samplingPd = Open(); -- if (g_samplingPd == -1) { -- Finish(); -- goto err; -- } -- } -- -- return PmuEnable(g_samplingPd) == 0; -- --err: -- return false; --} -- --void NapiGroRecEntryDisable() --{ -- PmuDisable(g_samplingPd); -- Close(); -- Finish(); --} -- --const struct DataRingBuf *NapiGroRecEntryGetBuf() --{ -- return (const struct DataRingBuf *)g_samplingBuf; --} -- --static void NapiGroRecEntryReflashBuf() --{ -- struct DataRingBuf *dataRingBuf; -- int len; -- -- dataRingBuf = (struct DataRingBuf *)g_samplingBuf; -- if (!dataRingBuf) { -- printf("g_samplingBuf has not malloc\n"); -- return; -- } -- -- PmuDisable(g_samplingPd); -- len = PmuRead(g_samplingPd, &g_pmuData); -- PmuEnable(g_samplingPd); -- fill_buf(dataRingBuf, g_pmuData, len); --} -- --void NapiGroRecEntryRun(const struct Param *param) --{ -- (void)param; -- NapiGroRecEntryReflashBuf(); --} -- --const char *NapiGroRecEntryGetVer() --{ -- return NULL; --} -- --const char *NapiGroRecEntryGetName() --{ -- return PMU_NAPI_GRO_REC_ENTRY; --} -- --const char *NapiGroRecEntryGetDes() --{ -- return "event used to collect net queue info"; --} -- --const char *NapiGroRecEntryGetDep() --{ -- return NULL; --} -- --int NapiGroRecEntryGetPriority() --{ -- return 0; --} -- --int NapiGroRecEntryGetType() --{ -- return -1; --} -- --int NapiGroRecEntryGetPeriod() --{ -- return 100; // 100ms --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.h b/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.h -deleted file mode 100644 -index 14469d9..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_napi_gro_receive_entry.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PMU_NAPI_GRO_RECEIVE_ENTRY_H__ --#define __PMU_NAPI_GRO_RECEIVE_ENTRY_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *NapiGroRecEntryGetVer(); --const char *NapiGroRecEntryGetName(); --const char *NapiGroRecEntryGetDes(); --const char *NapiGroRecEntryGetDep(); --int NapiGroRecEntryGetPriority(); --int NapiGroRecEntryGetType(); --int NapiGroRecEntryGetPeriod(); --bool NapiGroRecEntryEnable(); --void NapiGroRecEntryDisable(); --const struct DataRingBuf *NapiGroRecEntryGetBuf(); --void NapiGroRecEntryRun(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_netif_rx.c b/src/plugin/collect/pmu/plugin/plugin_netif_rx.c -deleted file mode 100644 -index 78f52d2..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_netif_rx.c -+++ /dev/null -@@ -1,173 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" -- --static bool event_is_open = false; --static int pmu_id = -1; --static struct DataRingBuf *ring_buf = NULL; --struct PmuData *pmu_data = NULL; -- --static int init() --{ -- ring_buf = init_buf(NETIF_RX_BUF_SIZE, PMU_NETIF_RX); -- if (!ring_buf) { -- return -1; -- } -- -- return 0; --} -- --static void finish() --{ -- if (!ring_buf) { -- return; -- } -- -- free_buf(ring_buf); -- ring_buf = NULL; --} -- --static int open() --{ -- struct PmuAttr attr; -- char *evtList[1]; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- evtList[0] = "net:netif_rx"; -- -- attr.evtList = evtList; -- attr.numEvt = 1; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- -- pd = PmuOpen(COUNTING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- event_is_open = true; -- return pd; --} -- --static void netif_rx_close() --{ -- PmuClose(pmu_id); -- pmu_id = -1; -- event_is_open = false; --} -- --bool netif_rx_enable() --{ -- if (!ring_buf) { -- int ret = init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!event_is_open) { -- pmu_id = open(); -- if (pmu_id == -1) { -- finish(); -- goto err; -- } -- } -- -- return PmuEnable(pmu_id) == 0; -- --err: -- return false; --} -- --void netif_rx_disable() --{ -- PmuDisable(pmu_id); -- netif_rx_close(); -- finish(); --} -- --const struct DataRingBuf *netif_rx_get_ring_buf() --{ -- return (const struct DataRingBuf *)ring_buf; --} -- --static void reflash_ring_buf() --{ -- struct DataRingBuf *data_ringbuf; -- int len; -- -- data_ringbuf = (struct DataRingBuf *)ring_buf; -- if (!data_ringbuf) { -- printf("ring_buf has not malloc\n"); -- return; -- } -- -- PmuDisable(pmu_id); -- len = PmuRead(pmu_id, &pmu_data); -- PmuEnable(pmu_id); -- -- fill_buf(data_ringbuf, pmu_data, len); --} -- --void netif_rx_run(const struct Param *param) --{ -- (void)param; -- reflash_ring_buf(); --} -- --const char *netif_rx_get_version() --{ -- return NULL; --} -- --const char *netif_rx_get_name() --{ -- return PMU_NETIF_RX; --} -- --const char *netif_rx_get_description() --{ -- return NULL; --} -- --const char *netif_rx_get_dep() --{ -- return NULL; --} -- --int netif_rx_get_priority() --{ -- return 0; --} -- --int netif_rx_get_type() --{ -- return -1; --} -- --int netif_rx_get_period() --{ -- return 100; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_netif_rx.h b/src/plugin/collect/pmu/plugin/plugin_netif_rx.h -deleted file mode 100644 -index 0c82936..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_netif_rx.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_NETIF_RX_H__ --#define __PLUGIN_NETIF_RX_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *netif_rx_get_version(); --const char *netif_rx_get_name(); --const char *netif_rx_get_description(); --const char *netif_rx_get_dep(); --int netif_rx_get_priority(); --int netif_rx_get_type(); --int netif_rx_get_period(); --bool netif_rx_enable(); --void netif_rx_disable(); --const struct DataRingBuf *netif_rx_get_ring_buf(); --void netif_rx_run(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_sampling.c b/src/plugin/collect/pmu/plugin/plugin_sampling.c -deleted file mode 100644 -index 35e5dfb..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_sampling.c -+++ /dev/null -@@ -1,176 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_sampling.h" -- --static bool sampling_is_open = false; --static int sampling_pd = -1; --static struct DataRingBuf *sampling_buf = NULL; --struct PmuData *sampling_data = NULL; -- --static int sampling_init() --{ -- sampling_buf = init_buf(CYCLES_SAMPLING_BUF_SIZE, PMU_CYCLES_SAMPLING); -- if (!sampling_buf) { -- return -1; -- } -- -- return 0; --} -- --static void sampling_fini() --{ -- if (!sampling_buf) { -- return; -- } -- -- free_buf(sampling_buf); -- sampling_buf = NULL; --} -- --static int sampling_open() --{ -- struct PmuAttr attr; -- char *evtList[1]; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- evtList[0] = "cycles"; -- -- attr.evtList = evtList; -- attr.numEvt = 1; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- attr.freq = 100; -- attr.useFreq = 1; -- -- pd = PmuOpen(SAMPLING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- sampling_is_open = true; -- return pd; --} -- --static void sampling_close() --{ -- PmuClose(sampling_pd); -- sampling_pd = -1; -- sampling_is_open = false; --} -- --bool sampling_enable() --{ -- if (!sampling_buf) { -- int ret = sampling_init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!sampling_is_open) { -- sampling_pd = sampling_open(); -- if (sampling_pd == -1) { -- sampling_fini(); -- goto err; -- } -- } -- -- return PmuEnable(sampling_pd) == 0; -- --err: -- return false; --} -- --void sampling_disable() --{ -- PmuDisable(sampling_pd); -- sampling_close(); -- sampling_fini(); --} -- --const struct DataRingBuf *sampling_get_ring_buf() --{ -- return (const struct DataRingBuf *)sampling_buf; --} -- --static void sampling_reflash_ring_buf() --{ -- struct DataRingBuf *data_ringbuf; -- int len; -- -- data_ringbuf = (struct DataRingBuf *)sampling_buf; -- if (!data_ringbuf) { -- printf("sampling_buf has not malloc\n"); -- return; -- } -- -- PmuDisable(sampling_pd); -- len = PmuRead(sampling_pd, &sampling_data); -- PmuEnable(sampling_pd); -- -- fill_buf(data_ringbuf, sampling_data, len); --} -- --void sampling_run(const struct Param *param) --{ -- (void)param; -- sampling_reflash_ring_buf(); --} -- --const char *sampling_get_version() --{ -- return NULL; --} -- --const char *sampling_get_name() --{ -- return PMU_CYCLES_SAMPLING; --} -- --const char *sampling_get_description() --{ -- return NULL; --} -- --const char *sampling_get_dep() --{ -- return NULL; --} -- --int sampling_get_priority() --{ -- return 0; --} -- --int sampling_get_type() --{ -- return -1; --} -- --int sampling_get_period() --{ -- return 100; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_sampling.h b/src/plugin/collect/pmu/plugin/plugin_sampling.h -deleted file mode 100644 -index 066d74f..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_sampling.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_SAMPLING_H__ --#define __PLUGIN_SAMPLING_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *sampling_get_version(); --const char *sampling_get_name(); --const char *sampling_get_description(); --const char *sampling_get_dep(); --int sampling_get_priority(); --int sampling_get_type(); --int sampling_get_period(); --bool sampling_enable(); --void sampling_disable(); --const struct DataRingBuf *sampling_get_ring_buf(); --void sampling_run(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.c b/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.c -deleted file mode 100644 -index ae4abef..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.c -+++ /dev/null -@@ -1,174 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_sampling.h" -- --static bool g_samplingIsOpen = false; --static int g_samplingPd = -1; --static struct DataRingBuf *g_samplingBuf = NULL; --static struct PmuData *g_pmuData = NULL; -- --static int Init() --{ -- g_samplingBuf = init_buf(SKB_COPY_DATAGRAM_IOVEC_BUF_SIZE, PMU_SKB_COPY_DATEGRAM_IOVEC); -- if (!g_samplingBuf) { -- return -1; -- } -- -- return 0; --} -- --static void Finish() --{ -- if (!g_samplingBuf) { -- return; -- } -- -- free_buf(g_samplingBuf); -- g_samplingBuf = NULL; --} -- --static int Open() --{ -- struct PmuAttr attr; -- char *evtList[1]; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- evtList[0] = "skb:skb_copy_datagram_iovec"; -- -- attr.evtList = evtList; -- attr.numEvt = 1; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- attr.period = NET_RECEIVE_TRACE_SAMPLE_PERIOD; -- -- pd = PmuOpen(SAMPLING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- g_samplingIsOpen = true; -- return pd; --} -- --static void Close() --{ -- PmuClose(g_samplingPd); -- g_samplingPd = -1; -- g_samplingIsOpen = false; --} -- --bool SkbCopyDatagramIovecEnable() --{ -- if (!g_samplingBuf) { -- int ret = Init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!g_samplingIsOpen) { -- g_samplingPd = Open(); -- if (g_samplingPd == -1) { -- Finish(); -- goto err; -- } -- } -- -- return PmuEnable(g_samplingPd) == 0; -- --err: -- return false; --} -- --void SkbCopyDatagramIovecDisable() --{ -- PmuDisable(g_samplingPd); -- Close(); -- Finish(); --} -- --const struct DataRingBuf *SkbCopyDatagramIovecGetBuf() --{ -- return (const struct DataRingBuf *)g_samplingBuf; --} -- --static void SkbCopyDatagramIovecReflashBuf() --{ -- struct DataRingBuf *dataRingBuf; -- int len; -- -- dataRingBuf = (struct DataRingBuf *)g_samplingBuf; -- if (!dataRingBuf) { -- printf("g_samplingBuf has not malloc\n"); -- return; -- } -- -- PmuDisable(g_samplingPd); -- len = PmuRead(g_samplingPd, &g_pmuData); -- PmuEnable(g_samplingPd); -- fill_buf(dataRingBuf, g_pmuData, len); --} -- --void SkbCopyDatagramIovecRun(const struct Param *param) --{ -- (void)param; -- SkbCopyDatagramIovecReflashBuf(); --} -- --const char *SkbCopyDatagramIovecGetVer() --{ -- return NULL; --} -- --const char *SkbCopyDatagramIovecGetName() --{ -- return PMU_SKB_COPY_DATEGRAM_IOVEC; --} -- --const char *SkbCopyDatagramIovecGetDes() --{ -- return "event used to collect recv skb addr info"; --} -- --const char *SkbCopyDatagramIovecGetDep() --{ -- return NULL; --} -- --int SkbCopyDatagramIovecGetPriority() --{ -- return 0; --} -- --int SkbCopyDatagramIovecGetType() --{ -- return -1; --} -- --int SkbCopyDatagramIovecGetPeriod() --{ -- return 100; // 100ms --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.h b/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.h -deleted file mode 100644 -index 49c5202..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_skb_copy_datagram_iovec.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_SKB_COPY_DATAGRAM_IOVEC_H__ --#define __PLUGIN_SKB_COPY_DATAGRAM_IOVEC_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *SkbCopyDatagramIovecGetVer(); --const char *SkbCopyDatagramIovecGetName(); --const char *SkbCopyDatagramIovecGetDes(); --const char *SkbCopyDatagramIovecGetDep(); --int SkbCopyDatagramIovecGetPriority(); --int SkbCopyDatagramIovecGetType(); --int SkbCopyDatagramIovecGetPeriod(); --bool SkbCopyDatagramIovecEnable(); --void SkbCopyDatagramIovecDisable(); --const struct DataRingBuf *SkbCopyDatagramIovecGetBuf(); --void SkbCopyDatagramIovecRun(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_spe.c b/src/plugin/collect/pmu/plugin/plugin_spe.c -deleted file mode 100644 -index 52c31c3..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_spe.c -+++ /dev/null -@@ -1,174 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_spe.h" -- --static bool spe_is_open = false; --static int spe_pd = -1; --static struct DataRingBuf *spe_buf = NULL; --struct PmuData *spe_data = NULL; -- --static int spe_init() --{ -- spe_buf = init_buf(SPE_BUF_SIZE, PMU_SPE); -- if (!spe_buf) { -- return -1; -- } -- -- return 0; --} -- --static void spe_fini() --{ -- if (!spe_buf) { -- return; -- } -- -- free_buf(spe_buf); -- spe_buf = NULL; --} -- --static int spe_open() --{ -- struct PmuAttr attr; -- int pd; -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- attr.evtList = NULL; -- attr.numEvt = 0; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- attr.period = 2048; -- attr.dataFilter = SPE_DATA_ALL; -- attr.evFilter = SPE_EVENT_RETIRED; -- attr.minLatency = 0x60; -- -- pd = PmuOpen(SPE_SAMPLING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- spe_is_open = true; -- return pd; --} -- --static void spe_close() --{ -- PmuClose(spe_pd); -- spe_pd = -1; -- spe_is_open = false; --} -- --bool spe_enable() --{ -- if (!spe_buf) { -- int ret = spe_init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!spe_is_open) { -- spe_pd = spe_open(); -- if (spe_pd == -1) { -- spe_fini(); -- goto err; -- } -- } -- -- return PmuEnable(spe_pd) == 0; -- --err: -- return false; --} -- --void spe_disable() --{ -- PmuDisable(spe_pd); -- spe_close(); -- spe_fini(); --} -- --const struct DataRingBuf *spe_get_ring_buf() --{ -- return (const struct DataRingBuf *)spe_buf; --} -- --static void spe_reflash_ring_buf() --{ -- struct DataRingBuf *data_ringbuf; -- int len; -- -- data_ringbuf = (struct DataRingBuf *)spe_buf; -- if (!data_ringbuf) { -- printf("spe_buf has not malloc\n"); -- return; -- } -- -- // while using PMU_SPE, PmuRead internally calls PmuEnable and PmuDisable -- len = PmuRead(spe_pd, &spe_data); -- -- fill_buf(data_ringbuf, spe_data, len); --} -- --void spe_run(const struct Param *param) --{ -- (void)param; -- spe_reflash_ring_buf(); --} -- --const char *spe_get_version() --{ -- return NULL; --} -- --const char *spe_get_name() --{ -- return PMU_SPE; --} -- --const char *spe_get_description() --{ -- return NULL; --} -- --const char *spe_get_dep() --{ -- return NULL; --} -- --int spe_get_priority() --{ -- return 0; --} -- --int spe_get_type() --{ -- return -1; --} -- --int spe_get_period() --{ -- return 100; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_spe.h b/src/plugin/collect/pmu/plugin/plugin_spe.h -deleted file mode 100644 -index 11bb71f..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_spe.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_SPE_H__ --#define __PLUGIN_SPE_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *spe_get_version(); --const char *spe_get_name(); --const char *spe_get_description(); --const char *spe_get_dep(); --int spe_get_priority(); --int spe_get_type(); --int spe_get_period(); --bool spe_enable(); --void spe_disable(); --const struct DataRingBuf *spe_get_ring_buf(); --void spe_run(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/plugin_uncore.c b/src/plugin/collect/pmu/plugin/plugin_uncore.c -deleted file mode 100644 -index 9b845db..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_uncore.c -+++ /dev/null -@@ -1,199 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include "pmu.h" --#include "pcerrc.h" --#include "interface.h" --#include "pmu_plugin.h" --#include "plugin_comm.h" --#include "plugin_uncore.h" --#include "pmu_uncore.h" -- --static bool uncore_is_open = false; --static int uncore_pd = -1; --static struct DataRingBuf *uncore_buf = NULL; --struct PmuData *uncore_data = NULL; -- --static int uncore_init() --{ -- uncore_buf = init_buf(UNCORE_BUF_SIZE, PMU_UNCORE); -- if (!uncore_buf) { -- return -1; -- } -- -- return 0; --} -- --static void uncore_fini() --{ -- if (!uncore_buf) { -- return; -- } -- -- free_buf(uncore_buf); -- uncore_buf = NULL; --} -- --static int uncore_open() --{ -- struct PmuAttr attr; -- struct uncore_config *rx_outer; -- struct uncore_config *rx_sccl; -- struct uncore_config *rx_ops_num; -- int hha_num; -- int pd = -1; -- int ret; -- -- // Base on oeAware framework, uncore_open is called within uncore_enable. -- // If pmu_uncore is not supported, it will generate a large number of error logs. -- // So temporarily set uncore_is_open = true util oeAware framework provides open API. -- uncore_is_open = true; -- -- ret = hha_uncore_config_init(); -- if (ret != 0) { -- printf("This system not support pmu_uncore\n"); -- return pd; -- } -- -- hha_num = get_uncore_hha_num(); -- rx_outer = get_rx_outer(); -- rx_sccl = get_rx_sccl(); -- rx_ops_num = get_rx_ops_num(); -- -- char *evtList[hha_num * UNCORE_MAX]; -- for (int i = 0; i < hha_num; i++) { -- evtList[i + hha_num * RX_OUTER] = rx_outer[i].uncore_name; -- evtList[i + hha_num * RX_SCCL] = rx_sccl[i].uncore_name; -- evtList[i + hha_num * RX_OPS_NUM] = rx_ops_num[i].uncore_name; -- } -- -- (void)memset_s(&attr, sizeof(struct PmuAttr), 0, sizeof(struct PmuAttr)); -- -- attr.evtList = evtList; -- attr.numEvt = hha_num * UNCORE_MAX; -- attr.pidList = NULL; -- attr.numPid = 0; -- attr.cpuList = NULL; -- attr.numCpu = 0; -- -- pd = PmuOpen(COUNTING, &attr); -- if (pd == -1) { -- printf("%s\n", Perror()); -- return pd; -- } -- -- return pd; --} -- --static void uncore_close() --{ -- PmuClose(uncore_pd); -- uncore_pd = -1; -- uncore_is_open = false; --} -- --bool uncore_enable() --{ -- if (!uncore_buf) { -- int ret = uncore_init(); -- if (ret != 0) { -- goto err; -- } -- } -- -- if (!uncore_is_open) { -- uncore_pd = uncore_open(); -- if (uncore_pd == -1) { -- uncore_fini(); -- goto err; -- } -- } -- -- return PmuEnable(uncore_pd) == 0; -- --err: -- return false; --} -- --void uncore_disable() --{ -- PmuDisable(uncore_pd); -- uncore_close(); -- uncore_fini(); --} -- --const struct DataRingBuf *uncore_get_ring_buf() --{ -- return (const struct DataRingBuf *)uncore_buf; --} -- --static void uncore_reflash_ring_buf() --{ -- struct DataRingBuf *data_ringbuf; -- int len; -- -- data_ringbuf = (struct DataRingBuf *)uncore_buf; -- if (!data_ringbuf) { -- printf("uncore_buf has not malloc\n"); -- return; -- } -- -- PmuDisable(uncore_pd); -- len = PmuRead(uncore_pd, &uncore_data); -- PmuEnable(uncore_pd); -- -- fill_buf(data_ringbuf, uncore_data, len); --} -- --void uncore_run(const struct Param *param) --{ -- (void)param; -- uncore_reflash_ring_buf(); --} -- --const char *uncore_get_version() --{ -- return NULL; --} -- --const char *uncore_get_name() --{ -- return PMU_UNCORE; --} -- --const char *uncore_get_description() --{ -- return NULL; --} -- --const char *uncore_get_dep() --{ -- return NULL; --} -- --int uncore_get_priority() --{ -- return 0; --} -- --int uncore_get_type() --{ -- return -1; --} -- --int uncore_get_period() --{ -- return 100; --} -diff --git a/src/plugin/collect/pmu/plugin/plugin_uncore.h b/src/plugin/collect/pmu/plugin/plugin_uncore.h -deleted file mode 100644 -index a15d950..0000000 ---- a/src/plugin/collect/pmu/plugin/plugin_uncore.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PLUGIN_UNCORE_H__ --#define __PLUGIN_UNCORE_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --const char *uncore_get_version(); --const char *uncore_get_name(); --const char *uncore_get_description(); --const char *uncore_get_dep(); --int uncore_get_priority(); --int uncore_get_type(); --int uncore_get_period(); --bool uncore_enable(); --void uncore_disable(); --const struct DataRingBuf *uncore_get_ring_buf(); --void uncore_run(const struct Param *param); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/plugin/collect/pmu/plugin/pmu_uncore.c b/src/plugin/collect/pmu/plugin/pmu_uncore.c -deleted file mode 100644 -index 71dcda1..0000000 ---- a/src/plugin/collect/pmu/plugin/pmu_uncore.c -+++ /dev/null -@@ -1,142 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#include --#include --#include --#include --#include --#include "pmu_uncore.h" -- --static int hha_num = 0; --static struct uncore_config *uncore_rx_outer = NULL; --static struct uncore_config *uncore_rx_sccl = NULL; --static struct uncore_config *uncore_rx_ops_num = NULL; -- --int get_uncore_hha_num() --{ -- return hha_num; --} -- --struct uncore_config *get_rx_outer() --{ -- return uncore_rx_outer; --} -- --struct uncore_config *get_rx_sccl() --{ -- return uncore_rx_sccl; --} -- --struct uncore_config *get_rx_ops_num() --{ -- return uncore_rx_ops_num; --} -- --static int read_single_uncore_event(const char *hha_name, struct uncore_config *uncore_event, const char *event_name) --{ -- char hha_path[MAX_PATH_LEN] = {0}; -- -- // Read cfg -- snprintf_truncated_s(hha_path, MAX_PATH_LEN, "%s/%s/", hha_name, event_name); -- -- strcpy(uncore_event->uncore_name, hha_path); -- -- return 0; --} -- --static void free_namelist(int n, struct dirent **namelist) --{ -- while (n--) { -- free(namelist[n]); -- } -- free(namelist); --} -- --static int hha_read_uncore_config(int n, struct dirent **namelist) --{ -- int index = 0; -- -- while (index < n) { -- if (read_single_uncore_event(namelist[index]->d_name, &uncore_rx_outer[index], "rx_outer") != 0) { -- return -1; -- } -- if (read_single_uncore_event(namelist[index]->d_name, &uncore_rx_sccl[index], "rx_sccl") != 0) { -- return -1; -- } -- if (read_single_uncore_event(namelist[index]->d_name, &uncore_rx_ops_num[index], "rx_ops_num") != 0) { -- return -1; -- } -- -- index++; -- } -- -- return 0; --} -- --static int hha_scandir_select(const struct dirent *ptr) --{ -- int ret = 0; -- if (strstr(ptr->d_name, "hha") != NULL) { -- ret = 1; -- } -- -- return ret; --} -- --int hha_uncore_config_init(void) --{ -- int ret; -- struct dirent **namelist; -- -- hha_num = scandir(DEVICE_PATH, &namelist, hha_scandir_select, alphasort); -- if (hha_num <= 0) { -- printf("scandir failed\n"); -- return -1; -- } -- -- uncore_rx_outer = (struct uncore_config *)calloc(hha_num, sizeof(struct uncore_config)); -- if (uncore_rx_outer == NULL) { -- free_namelist(hha_num, namelist); -- return -1; -- } -- uncore_rx_sccl = (struct uncore_config *)calloc(hha_num, sizeof(struct uncore_config)); -- if (uncore_rx_sccl == NULL) { // free uncore_rx_sccl in function uncore_config_fini -- free_namelist(hha_num, namelist); -- return -1; -- } -- uncore_rx_ops_num = (struct uncore_config *)calloc(hha_num, sizeof(struct uncore_config)); -- if (uncore_rx_ops_num == NULL) { // free uncore_rx_ops_num in function uncore_config_fini -- free_namelist(hha_num, namelist); -- return -1; -- } -- -- ret = hha_read_uncore_config(hha_num, namelist); -- free_namelist(hha_num, namelist); -- -- return ret; --} -- --void uncore_config_fini(void) --{ --#define UNCORE_CONFIG_FREE(uncore_event) do { \ -- if (uncore_event != NULL) { \ -- free(uncore_event); \ -- uncore_event = NULL; \ -- } \ --} while (0) -- -- UNCORE_CONFIG_FREE(uncore_rx_outer); -- UNCORE_CONFIG_FREE(uncore_rx_sccl); -- UNCORE_CONFIG_FREE(uncore_rx_ops_num); -- -- hha_num = 0; --} -diff --git a/src/plugin/collect/pmu/plugin/pmu_uncore.h b/src/plugin/collect/pmu/plugin/pmu_uncore.h -deleted file mode 100644 -index d49208c..0000000 ---- a/src/plugin/collect/pmu/plugin/pmu_uncore.h -+++ /dev/null -@@ -1,45 +0,0 @@ --/****************************************************************************** -- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved. -- * oeAware is licensed under Mulan PSL v2. -- * You can use this software according to the terms and conditions of the Mulan PSL v2. -- * You may obtain a copy of Mulan PSL v2 at: -- * http://license.coscl.org.cn/MulanPSL2 -- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -- * See the Mulan PSL v2 for more details. -- ******************************************************************************/ --#ifndef __PMU_UNCORE_H__ --#define __PMU_UNCORE_H__ -- --#ifdef __cplusplus --extern "C" { --#endif -- --#define UNCORE_NAME_SIZE 256 --#define MAX_PATH_LEN 256 --#define DEVICE_PATH "/sys/devices/" -- --struct uncore_config { -- char uncore_name[UNCORE_NAME_SIZE]; --}; -- --enum uncore_type { -- RX_OUTER, -- RX_SCCL, -- RX_OPS_NUM, -- UNCORE_MAX, --}; -- --int get_uncore_hha_num(void); --struct uncore_config *get_rx_outer(void); --struct uncore_config *get_rx_sccl(void); --struct uncore_config *get_rx_ops_num(void); --int hha_uncore_config_init(void); --void uncore_config_fini(void); -- --#ifdef __cplusplus --} --#endif -- --#endif --- -2.33.0 - diff --git a/0002-add-data-free-and-fix-unsubscribe-error.patch b/0002-add-data-free-and-fix-unsubscribe-error.patch deleted file mode 100644 index c3c62e8..0000000 --- a/0002-add-data-free-and-fix-unsubscribe-error.patch +++ /dev/null @@ -1,524 +0,0 @@ -From 9fb0aa74fece1deea72ef7c8eef5e45da2113b21 Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Tue, 26 Nov 2024 15:59:15 +0800 -Subject: [PATCH 2/5] add data free and fix unsubscribe error - ---- - src/common/CMakeLists.txt | 7 + - src/common/data_register.cpp | 247 +++++++++++++++---- - src/common/data_register.h | 20 +- - src/plugin/collect/include/command_data.h | 2 +- - src/plugin_mgr/event/unsubscribe_handler.cpp | 7 +- - src/plugin_mgr/instance_run_handler.cpp | 2 +- - src/sdk/oe_client.cpp | 1 + - 7 files changed, 227 insertions(+), 59 deletions(-) - -diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt -index 2d49b3e..46084e5 100644 ---- a/src/common/CMakeLists.txt -+++ b/src/common/CMakeLists.txt -@@ -22,6 +22,13 @@ target_link_libraries(${PROJECT_NAME} log4cplus) - target_link_libraries(${PROJECT_NAME} yaml-cpp) - target_link_libraries(${PROJECT_NAME} curl boundscheck) - -+if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") -+target_link_directories(${PROJECT_NAME} PUBLIC -+ ${LIB_KPERF_LIBPATH} -+) -+target_link_libraries(${PROJECT_NAME} kperf) -+endif() -+ - file(COPY - "${CMAKE_CURRENT_SOURCE_DIR}/data_list.h" - DESTINATION "${CMAKE_BINARY_DIR}/output/include") -diff --git a/src/common/data_register.cpp b/src/common/data_register.cpp -index 89e660e..cdf6d97 100644 ---- a/src/common/data_register.cpp -+++ b/src/common/data_register.cpp -@@ -16,68 +16,107 @@ - - namespace oeaware { - --int TopicSerialize(const void *topic, OutStream &out) -+void TopicFree(CTopic *topic) - { -- auto tmpTopic = static_cast(topic); -- std::string instanceName(tmpTopic->instanceName); -- std::string topicName(tmpTopic->topicName); -- std::string params(tmpTopic->params); -+ if (topic == nullptr) { -+ return; -+ } -+ if (topic->instanceName != nullptr) { -+ delete[] topic->instanceName; -+ topic->instanceName = nullptr; -+ } -+ if (topic->topicName != nullptr) { -+ delete[] topic->topicName; -+ topic->topicName = nullptr; -+ } -+ if (topic->params != nullptr) { -+ delete[] topic->params; -+ topic->params = nullptr; -+ } -+} -+ -+int TopicSerialize(const CTopic *topic, OutStream &out) -+{ -+ std::string instanceName(topic->instanceName); -+ std::string topicName(topic->topicName); -+ std::string params(topic->params); - out << instanceName << topicName << params; - return 0; - } - --int TopicDeserialize(void *topic, InStream &in) -+int TopicDeserialize(CTopic *topic, InStream &in) - { - std::string instanceName; - std::string topicName; - std::string params; - in >> instanceName >> topicName >> params; -- ((CTopic*)topic)->instanceName = new char[instanceName.size() + 1]; -- ((CTopic*)topic)->topicName = new char[topicName.size() + 1]; -- ((CTopic*)topic)->params = new char[params.size() + 1]; -+ topic->instanceName = new char[instanceName.size() + 1]; -+ topic->topicName = new char[topicName.size() + 1]; -+ topic->params = new char[params.size() + 1]; - -- auto ret = strcpy_s(((CTopic*)topic)->instanceName, instanceName.size() + 1, instanceName.data()); -+ auto ret = strcpy_s(topic->instanceName, instanceName.size() + 1, instanceName.data()); - if (ret != EOK) return ret; -- ret = strcpy_s(((CTopic*)topic)->topicName, topicName.size() + 1, topicName.data()); -+ ret = strcpy_s(topic->topicName, topicName.size() + 1, topicName.data()); - if (ret != EOK) return ret; -- ret = strcpy_s(((CTopic*)topic)->params, params.size() + 1, params.data()); -+ ret = strcpy_s(topic->params, params.size() + 1, params.data()); - if (ret != EOK) return ret; - return 0; - } - --int DataListSerialize(const void *dataList, OutStream &out) -+void DataListFree(DataList *dataList) -+{ -+ if (dataList == nullptr) { -+ return; -+ } -+ auto ® = Register::GetInstance(); -+ DataFreeFunc free = reg.GetDataFreeFunc(Concat({dataList->topic.instanceName, dataList->topic.topicName}, "::")); -+ if (free == nullptr) { -+ free = reg.GetDataFreeFunc(dataList->topic.instanceName); -+ } -+ if (free != nullptr) { -+ for (uint64_t i = 0; i < dataList->len; ++i) { -+ free(dataList->data[i]); -+ } -+ } -+ TopicFree(&dataList->topic); -+ if (dataList->data != nullptr) { -+ delete[] dataList->data; -+ dataList->data = nullptr; -+ } -+} -+ -+int DataListSerialize(const DataList *dataList, OutStream &out) - { -- auto tmpList = static_cast(dataList); -- TopicSerialize(&tmpList->topic, out); -- out << tmpList->len; -+ TopicSerialize(&dataList->topic, out); -+ out << dataList->len; - auto ® = Register::GetInstance(); -- auto func = reg.GetDataSerialize(Concat({tmpList->topic.instanceName, tmpList->topic.topicName}, "::")); -+ auto func = reg.GetDataSerialize(Concat({dataList->topic.instanceName, dataList->topic.topicName}, "::")); - if (func == nullptr) { -- func = reg.GetDataSerialize(tmpList->topic.instanceName); -+ func = reg.GetDataSerialize(dataList->topic.instanceName); - } -- for (uint64_t i = 0; i < tmpList->len; ++i) { -- func(tmpList->data[i], out); -+ for (uint64_t i = 0; i < dataList->len; ++i) { -+ func(dataList->data[i], out); - } - return 0; - } - --int DataListDeserialize(void *dataList, InStream &in) -+int DataListDeserialize(DataList *dataList, InStream &in) - { - CTopic topic; - TopicDeserialize(&topic, in); - uint64_t size; - in >> size; -- ((DataList*)dataList)->topic = topic; -- ((DataList*)dataList)->len = size; -- ((DataList*)dataList)->data = new void* [size]; -+ dataList->topic = topic; -+ dataList->len = size; -+ dataList->data = new void* [size]; - auto ® = Register::GetInstance(); - auto func = reg.GetDataDeserialize(Concat({topic.instanceName, topic.topicName}, "::")); - if (func == nullptr) { - func = reg.GetDataDeserialize(topic.instanceName); - } - for (uint64_t i = 0; i < size; ++i) { -- ((DataList*)dataList)->data[i] = nullptr; -- auto ret = func(&(((DataList*)dataList)->data[i]), in); -+ dataList->data[i] = nullptr; -+ auto ret = func(&(dataList->data[i]), in); - if (ret) { - return ret; - } -@@ -85,6 +124,16 @@ int DataListDeserialize(void *dataList, InStream &in) - return 0; - } - -+void ResultFree(Result *result) -+{ -+ if (result == nullptr) { -+ return; -+ } -+ if (result->payload != nullptr) { -+ delete[] result->payload; -+ result->payload = nullptr; -+ } -+} - - int ResultDeserialize(void *data, InStream &in) - { -@@ -96,6 +145,17 @@ int ResultDeserialize(void *data, InStream &in) - return ret; - } - #if defined(__arm__) || defined(__aarch64__) -+void PmuBaseDataFree(void *data) -+{ -+ auto tmpData = static_cast(data); -+ if (tmpData == nullptr) { -+ return; -+ } -+ PmuDataFree(tmpData->pmuData); -+ tmpData->pmuData = nullptr; -+ tmpData->len = 0; -+} -+ - int PmuCountingDataSerialize(const void *data, OutStream &out) - { - auto tmpData = static_cast(data); -@@ -456,6 +516,19 @@ int PmuUncoreDataDeserialize(void **data, InStream &in) - } - #endif - -+void ThreadInfoFree(void *data) -+{ -+ auto threadInfo = static_cast(data); -+ if (threadInfo == nullptr) { -+ return; -+ } -+ if (threadInfo->name != nullptr) { -+ delete[] threadInfo->name; -+ threadInfo->name = nullptr; -+ } -+ delete threadInfo; -+} -+ - int ThreadInfoSerialize(const void *data, OutStream &out) - { - auto threadInfo = static_cast(data); -@@ -476,6 +549,32 @@ int ThreadInfoDeserialize(void **data, InStream &in) - return 0; - } - -+void KernelDataFree(void *data) -+{ -+ auto tmpData = static_cast(data); -+ if (tmpData == nullptr) { -+ return; -+ } -+ KernelDataNode *node = tmpData->kernelData; -+ for (int i = 0; i < tmpData->len; ++i) { -+ auto tmp = node->next; -+ if (node == nullptr) { -+ break; -+ } -+ if (node->key != nullptr) { -+ delete[] node->key; -+ node->key = nullptr; -+ } -+ if (node->value != nullptr) { -+ delete[] node->value; -+ node->value = nullptr; -+ } -+ delete node; -+ node = tmp; -+ } -+ delete tmpData; -+} -+ - int KernelDataSerialize(const void *data, OutStream &out) - { - auto tmpData = static_cast(data); -@@ -523,17 +622,47 @@ int KernelDataDeserialize(void **data, InStream &in) - return 0; - } - -+void CommandDataFree(void *data) -+{ -+ CommandData *commandData = (CommandData*)data; -+ if (commandData == nullptr) { -+ return; -+ } -+ for (int i = 0; i < commandData->attrLen; ++i) { -+ if (commandData->itemAttr[i] != nullptr) { -+ delete[] commandData->itemAttr[i]; -+ commandData->itemAttr[i] = nullptr; -+ } -+ } -+ if (commandData->items == nullptr) { -+ delete commandData; -+ return; -+ } -+ for (int i = 0; i < commandData->itemLen; ++i) { -+ for (int j = 0; j < commandData->attrLen; ++j) { -+ if (commandData->items[i].value[j] != nullptr) { -+ delete[] commandData->items[i].value[j]; -+ commandData->items[i].value[j] = nullptr; -+ } -+ } -+ } -+ delete[] commandData->items; -+ commandData->items = nullptr; -+ -+ delete commandData; -+} -+ - int CommandDataSerialize(const void *data, OutStream &out) - { -- auto sarData = (SarData*)data; -- out << sarData->attrLen << sarData->itemLen; -- for (int i = 0; i < sarData->attrLen; ++i) { -- std::string attr(sarData->itemAttr[i]); -+ auto commandData = (CommandData*)data; -+ out << commandData->attrLen << commandData->itemLen; -+ for (int i = 0; i < commandData->attrLen; ++i) { -+ std::string attr(commandData->itemAttr[i]); - out << attr; - } -- for (int i = 0; i < sarData->itemLen; ++i) { -- for (int j = 0; j < sarData->attrLen; ++j) { -- std::string item(sarData->items[i].value[j]); -+ for (int i = 0; i < commandData->itemLen; ++i) { -+ for (int j = 0; j < commandData->attrLen; ++j) { -+ std::string item(commandData->items[i].value[j]); - out << item; - } - } -@@ -542,8 +671,8 @@ int CommandDataSerialize(const void *data, OutStream &out) - - int CommandDataDeserialize(void **data, InStream &in) - { -- *data = new SarData(); -- auto sarData = static_cast(*data); -+ *data = new CommandData(); -+ auto sarData = static_cast(*data); - in >> sarData->attrLen >> sarData->itemLen; - int ret; - for (int i = 0; i < sarData->attrLen; ++i) { -@@ -570,6 +699,15 @@ int CommandDataDeserialize(void **data, InStream &in) - return 0; - } - -+void AnalysisDataFree(void *data) -+{ -+ auto analysisData = static_cast(data); -+ if (analysisData == nullptr) { -+ return; -+ } -+ delete analysisData; -+} -+ - int AnalysisDataSerialize(const void *data, OutStream &out) - { - auto analysisData = static_cast(data); -@@ -600,44 +738,55 @@ int AnalysisDataDeserialize(void **data, InStream &in) - - void Register::RegisterData(const std::string &name, const RegisterEntry &entry) - { -- deserializeFuncs[name] = entry; -+ registerEntry[name] = entry; - } - - void Register::InitRegisterData() - { - #if defined(__arm__) || defined(__aarch64__) -- RegisterData("pmu_counting_collector", RegisterEntry(PmuCountingDataSerialize, PmuCountingDataDeserialize)); -+ RegisterData("pmu_counting_collector", RegisterEntry(PmuCountingDataSerialize, PmuCountingDataDeserialize, -+ PmuBaseDataFree)); - -- RegisterData("pmu_sampling_collector", RegisterEntry(PmuSamplingDataSerialize, PmuSamplingDataDeserialize)); -+ RegisterData("pmu_sampling_collector", RegisterEntry(PmuSamplingDataSerialize, PmuSamplingDataDeserialize, -+ PmuBaseDataFree)); - -- RegisterData("pmu_spe_collector", RegisterEntry(PmuSpeDataSerialize, PmuSpeDataDeserialize)); -+ RegisterData("pmu_spe_collector", RegisterEntry(PmuSpeDataSerialize, PmuSpeDataDeserialize, PmuBaseDataFree)); - -- RegisterData("pmu_uncore_collector", RegisterEntry(PmuUncoreDataSerialize, PmuUncoreDataDeserialize)); -+ RegisterData("pmu_uncore_collector", RegisterEntry(PmuUncoreDataSerialize, PmuUncoreDataDeserialize, -+ PmuBaseDataFree)); - #endif -- RegisterData("thread_collector", RegisterEntry(ThreadInfoSerialize, ThreadInfoDeserialize)); -+ RegisterData("thread_collector", RegisterEntry(ThreadInfoSerialize, ThreadInfoDeserialize, ThreadInfoFree)); -+ -+ RegisterData("kernel_config", RegisterEntry(KernelDataSerialize, KernelDataDeserialize, KernelDataFree)); - -- RegisterData("kernel_config", RegisterEntry(KernelDataSerialize, KernelDataDeserialize)); -+ RegisterData("thread_scenario", RegisterEntry(ThreadInfoSerialize, ThreadInfoDeserialize, ThreadInfoFree)); - -- RegisterData("thread_scenario", RegisterEntry(ThreadInfoSerialize, ThreadInfoDeserialize)); -+ RegisterData("command_collector", RegisterEntry(CommandDataSerialize, CommandDataDeserialize, CommandDataFree)); - -- RegisterData("command_collector", RegisterEntry(CommandDataSerialize, CommandDataDeserialize)); -- RegisterData("command_collector", RegisterEntry(CommandDataSerialize, CommandDataDeserialize)); - RegisterData("analysis_aware", RegisterEntry(AnalysisDataSerialize, AnalysisDataDeserialize)); - } - - SerializeFunc Register::GetDataSerialize(const std::string &name) - { -- if (!deserializeFuncs.count(name)) { -+ if (!registerEntry.count(name)) { - return nullptr; - } -- return deserializeFuncs[name].se; -+ return registerEntry[name].se; - } - - DeserializeFunc Register::GetDataDeserialize(const std::string &name) - { -- if (!deserializeFuncs.count(name)) { -+ if (!registerEntry.count(name)) { -+ return nullptr; -+ } -+ return registerEntry[name].de; -+} -+ -+DataFreeFunc Register::GetDataFreeFunc(const std::string &name) -+{ -+ if (!registerEntry.count(name)) { - return nullptr; - } -- return deserializeFuncs[name].de; -+ return registerEntry[name].free; - } - } -diff --git a/src/common/data_register.h b/src/common/data_register.h -index 5e1ae4a..b72cd97 100644 ---- a/src/common/data_register.h -+++ b/src/common/data_register.h -@@ -13,18 +13,21 @@ - #define COMMON_DATA_REGISTER_H - #include - #include "serialize.h" -+#include "data_list.h" - - namespace oeaware { - using DeserializeFunc = int(*)(void**, InStream &in); - using SerializeFunc = int(*)(const void*, OutStream &out); --using FreeData = void(*)(void *); -+using DataFreeFunc = void(*)(void *); - - struct RegisterEntry { - RegisterEntry() { } - RegisterEntry(const SerializeFunc &se, const DeserializeFunc &de) : se(se), de(de) { } -+ RegisterEntry(const SerializeFunc &se, const DeserializeFunc &de, const DataFreeFunc &free) : se(se), -+ de(de), free(free) { } - SerializeFunc se; - DeserializeFunc de; -- FreeData free; -+ DataFreeFunc free; - }; - - class Register { -@@ -40,17 +43,20 @@ public: - void InitRegisterData(); - DeserializeFunc GetDataDeserialize(const std::string &name); - SerializeFunc GetDataSerialize(const std::string &name); -+ DataFreeFunc GetDataFreeFunc(const std::string &name); - void RegisterData(const std::string &name, const RegisterEntry &func); - private: - Register() { }; - -- std::unordered_map deserializeFuncs; -+ std::unordered_map registerEntry; - }; -- --int DataListSerialize(const void *data, OutStream &out); --int DataListDeserialize(void *data, InStream &in); -+void DataListFree(DataList *dataList); -+int DataListSerialize(const DataList *dataList, OutStream &out); -+int DataListDeserialize(DataList *dataList, InStream &in); - int ResultDeserialize(void *data, InStream &in); --int TopicSerialize(const void *topic, OutStream &out); -+int TopicSerialize(const CTopic *topic, OutStream &out); -+int TopicDeserialize(CTopic *topic, InStream &in); -+void TopicFree(CTopic *topic); - } - - #endif -diff --git a/src/plugin/collect/include/command_data.h b/src/plugin/collect/include/command_data.h -index f466bd3..e7a8540 100644 ---- a/src/plugin/collect/include/command_data.h -+++ b/src/plugin/collect/include/command_data.h -@@ -26,7 +26,7 @@ typedef struct { - int attrLen; - char *itemAttr[ATTR_MAX_LENGTH]; - CommandIter *items; --} SarData, CommandData; -+} CommandData; - #ifdef __cplusplus - } - #endif -diff --git a/src/plugin_mgr/event/unsubscribe_handler.cpp b/src/plugin_mgr/event/unsubscribe_handler.cpp -index 72b53bf..749a683 100644 ---- a/src/plugin_mgr/event/unsubscribe_handler.cpp -+++ b/src/plugin_mgr/event/unsubscribe_handler.cpp -@@ -23,7 +23,12 @@ EventResult UnsubscribeHandler::Handle(const Event &event) - INFO(logger, "sdk " << event.payload[0] << " disconnected and has been unsubscribed related topics."); - return eventResult; - } -- auto msg = std::make_shared(RunType::UNSUBSCRIBE, event.payload); -+ CTopic cTopic; -+ InStream in(event.payload[0]); -+ TopicDeserialize(&cTopic, in); -+ Topic topic{cTopic.instanceName, cTopic.topicName, cTopic.params}; -+ auto msg = std::make_shared(RunType::UNSUBSCRIBE, -+ std::vector{topic.GetType(), event.payload[1]}); - instanceRunHandler->RecvQueuePush(msg); - msg->Wait(); - result = msg->result; -diff --git a/src/plugin_mgr/instance_run_handler.cpp b/src/plugin_mgr/instance_run_handler.cpp -index 2e11d0d..30dc886 100644 ---- a/src/plugin_mgr/instance_run_handler.cpp -+++ b/src/plugin_mgr/instance_run_handler.cpp -@@ -181,7 +181,7 @@ void InstanceRunHandler::PublishData(std::shared_ptr &msg) - auto instance = memoryStore->GetInstance(subscriber); - instance->interface->UpdateData(msg->dataList); - } -- // free dataList -+ DataListFree(&msg->dataList); - } - - bool InstanceRunHandler::HandleMessage() -diff --git a/src/sdk/oe_client.cpp b/src/sdk/oe_client.cpp -index 4eb04ae..9452a37 100644 ---- a/src/sdk/oe_client.cpp -+++ b/src/sdk/oe_client.cpp -@@ -70,6 +70,7 @@ void Impl::HandleRecv() - for (auto handle : topicHandle[key]) { - handle(&dataList); - } -+ DataListFree(&dataList); - break; - } - default: --- -2.33.0 - diff --git a/0003-fix-failed-to-connect-to-the-sdk-and-command-executi.patch b/0003-fix-failed-to-connect-to-the-sdk-and-command-executi.patch deleted file mode 100644 index 3d9ace0..0000000 --- a/0003-fix-failed-to-connect-to-the-sdk-and-command-executi.patch +++ /dev/null @@ -1,412 +0,0 @@ -From 51355e66be3eeec6ebe79faa88324c788e5a3829 Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Wed, 27 Nov 2024 05:13:26 +0800 -Subject: [PATCH 3/5] fix failed to connect to the sdk and command execution is - stuck - ---- - src/common/utils.cpp | 16 ++++ - src/common/utils.h | 1 + - .../collect/system/command/command_base.cpp | 48 +++++++++++- - .../collect/system/command/command_base.h | 9 +++ - .../system/command/command_collector.cpp | 9 ++- - src/plugin/collect/system/kernel_config.cpp | 1 + - src/plugin_mgr/config.cpp | 17 ----- - src/plugin_mgr/config.h | 1 - - src/plugin_mgr/message_manager.cpp | 76 +++++++++++++++++-- - src/plugin_mgr/message_manager.h | 3 +- - src/sdk/oe_client.cpp | 12 ++- - 11 files changed, 160 insertions(+), 33 deletions(-) - -diff --git a/src/common/utils.cpp b/src/common/utils.cpp -index 4e12a57..a300a6a 100644 ---- a/src/common/utils.cpp -+++ b/src/common/utils.cpp -@@ -156,4 +156,20 @@ std::vector SplitString(const std::string &str, const std::string & - } - return tokens; - } -+bool CreateDir(const std::string &path) -+{ -+ size_t pos = 0; -+ do { -+ pos = path.find_first_of("/", pos + 1); -+ std::string subPath = path.substr(0, pos); -+ struct stat buffer; -+ if (stat(subPath.c_str(), &buffer) == 0) { -+ continue; -+ } -+ if (mkdir(subPath.c_str(), S_IRWXU | S_IRWXG) != 0) { -+ return false; -+ } -+ } while (pos != std::string::npos); -+ return true; -+} - } -diff --git a/src/common/utils.h b/src/common/utils.h -index ba787fe..48b72bd 100644 ---- a/src/common/utils.h -+++ b/src/common/utils.h -@@ -28,6 +28,7 @@ bool EndWith(const std::string &s, const std::string &ending); - std::string Concat(const std::vector& strings, const std::string &split); - // Separate "str" with the separator "split" - std::vector SplitString(const std::string &str, const std::string &split); -+bool CreateDir(const std::string &path); - } - - #endif // !COMMON_UTILS_H -\ No newline at end of file -diff --git a/src/plugin/collect/system/command/command_base.cpp b/src/plugin/collect/system/command/command_base.cpp -index d5a30dd..bf658b8 100644 ---- a/src/plugin/collect/system/command/command_base.cpp -+++ b/src/plugin/collect/system/command/command_base.cpp -@@ -10,6 +10,45 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - #include "command_base.h" -+#include -+#include -+ -+int PopenProcess::Pclose() -+{ -+ if (fclose(stream) == EOF) { -+ return -1; -+ } -+ stream = nullptr; -+ if (kill(pid, SIGTERM) == -1) { -+ return -1; -+ } -+ return 0; -+} -+ -+void PopenProcess::Popen(const std::string &cmd) -+{ -+ int pipeFd[2]; -+ if (pipe(pipeFd) == -1) { -+ return; -+ } -+ pid = fork(); -+ if (pid == -1) { -+ close(pipeFd[0]); -+ close(pipeFd[1]); -+ } else if (pid == 0) { -+ close(pipeFd[0]); -+ dup2(pipeFd[1], STDOUT_FILENO); -+ close(pipeFd[1]); -+ execl("/bin/bash", "bash", "-c", cmd.data(), nullptr); -+ _exit(1); -+ } -+ close(pipeFd[1]); -+ stream = fdopen(pipeFd[0], "r"); -+ if (!stream) { -+ close(pipeFd[0]); -+ return; -+ } -+} - - CommandBase::CommandBase() - { -@@ -23,18 +62,19 @@ CommandBase::CommandBase() - bool CommandBase::ValidateArgs(const oeaware::Topic& topic) - { - auto cmd = GetCommand(topic); -- FILE *pipe = popen(cmd.c_str(), "r"); -- if (!pipe) { -+ PopenProcess p; -+ p.Popen(cmd); -+ if (!p.stream) { - return false; - } - char buffer[128]; - bool isValid = false; -- if (fgets(buffer, sizeof(buffer), pipe) != nullptr) { -+ if (fgets(buffer, sizeof(buffer), p.stream) != nullptr) { - if (strstr(buffer, "Linux") != nullptr || strstr(buffer, "procs") != nullptr) { - isValid = true; - } - } -- pclose(pipe); -+ p.Pclose(); - return isValid; - } - -diff --git a/src/plugin/collect/system/command/command_base.h b/src/plugin/collect/system/command/command_base.h -index eb75c49..a6d7627 100644 ---- a/src/plugin/collect/system/command/command_base.h -+++ b/src/plugin/collect/system/command/command_base.h -@@ -44,4 +44,13 @@ public: - void Close(); - }; - -+class PopenProcess { -+public: -+ int Pclose(); -+ void Popen(const std::string &cmd); -+ -+ FILE *stream; -+ pid_t pid; -+}; -+ - #endif -diff --git a/src/plugin/collect/system/command/command_collector.cpp b/src/plugin/collect/system/command/command_collector.cpp -index 6c54555..640a406 100644 ---- a/src/plugin/collect/system/command/command_collector.cpp -+++ b/src/plugin/collect/system/command/command_collector.cpp -@@ -32,15 +32,16 @@ CommandCollector::CommandCollector(): oeaware::Interface() - void CommandCollector::CollectThread(const oeaware::Topic &topic, CommandBase* collector) - { - std::string cmd = collector->GetCommand(topic); -- FILE* pipe = popen(cmd.c_str(), "r"); -- if (!pipe) { -+ PopenProcess p; -+ p.Popen(cmd); -+ if (!p.stream) { - return; - } - char buffer[256]; -- while (collector->isRunning && fgets(buffer, sizeof(buffer), pipe) != nullptr) { -+ while (collector->isRunning && fgets(buffer, sizeof(buffer), p.stream) != nullptr) { - collector->ParseLine(std::string(buffer)); - } -- pclose(pipe); -+ p.Pclose(); - - collector->Close(); - } -diff --git a/src/plugin/collect/system/kernel_config.cpp b/src/plugin/collect/system/kernel_config.cpp -index 63aafea..6bdfc8a 100644 ---- a/src/plugin/collect/system/kernel_config.cpp -+++ b/src/plugin/collect/system/kernel_config.cpp -@@ -113,6 +113,7 @@ static bool IsSymlink(const std::string &path) - } - return S_ISLNK(st.st_mode); - } -+ - void KernelConfig::GetAllEth() - { - const std::string path = "/sys/class/net"; -diff --git a/src/plugin_mgr/config.cpp b/src/plugin_mgr/config.cpp -index 341880b..8cd1432 100644 ---- a/src/plugin_mgr/config.cpp -+++ b/src/plugin_mgr/config.cpp -@@ -15,23 +15,6 @@ - #include "default_path.h" - - namespace oeaware { --bool CreateDir(const std::string &path) --{ -- size_t pos = 0; -- do { -- pos = path.find_first_of("/", pos + 1); -- std::string subPath = path.substr(0, pos); -- struct stat buffer; -- if (stat(subPath.c_str(), &buffer) == 0) { -- continue; -- } -- if (mkdir(subPath.c_str(), S_IRWXU | S_IRWXG) != 0) { -- return false; -- } -- } while (pos != std::string::npos); -- return true; --} -- - bool CheckPluginList(YAML::Node pluginListItem) - { - if (pluginListItem["name"].IsNull()) { -diff --git a/src/plugin_mgr/config.h b/src/plugin_mgr/config.h -index 640ab00..19e6d33 100644 ---- a/src/plugin_mgr/config.h -+++ b/src/plugin_mgr/config.h -@@ -130,7 +130,6 @@ private: - }; - - std::string GetPath(); --bool CreateDir(const std::string &path); - } - - #endif -diff --git a/src/plugin_mgr/message_manager.cpp b/src/plugin_mgr/message_manager.cpp -index 1ffa4cc..bfa5b0c 100644 ---- a/src/plugin_mgr/message_manager.cpp -+++ b/src/plugin_mgr/message_manager.cpp -@@ -11,6 +11,7 @@ - ******************************************************************************/ - #include "message_manager.h" - #include -+#include - #include - #include "default_path.h" - #include "utils.h" -@@ -41,15 +42,56 @@ int Epoll::EventWait(struct epoll_event *events, int maxEvents, int timeout) - return epoll_wait(epfd, events, maxEvents, timeout); - } - -+static std::vector GetUserFromGroup(const std::string &groupName) -+{ -+ std::vector users; -+ std::ifstream file("/etc/group"); -+ if (!file.is_open()) { -+ return users; -+ } -+ std::string line; -+ size_t userPartIndex = 3; -+ while (std::getline(file, line)) { -+ std::vector parts = SplitString(line, ":"); -+ if (parts.size() > userPartIndex && parts[0] == groupName) { -+ std::vector userParts = SplitString(parts[userPartIndex], ","); -+ users.insert(users.end(), userParts.begin(), userParts.end()); -+ break; -+ } -+ } -+ file.close(); -+ return users; -+} -+ -+static int GetUid(const std::string &name) -+{ -+ struct passwd pwd; -+ struct passwd *result; -+ char buf[1024]; -+ int res = getpwnam_r(name.c_str(), &pwd, buf, sizeof(buf), &result); -+ if (res != 0 || result == nullptr) { -+ return -1; -+ } -+ return pwd.pw_uid; -+} -+ - void TcpSocket::InitGroups() - { - std::vector groupNames{"oeaware", "root"}; -+ groups[0].emplace_back(0); - for (auto &groupName : groupNames) { - auto gid = GetGidByGroupName(groupName); - if (gid < 0) { - continue; - } -- groups.emplace_back(gid); -+ auto users = GetUserFromGroup(groupName); -+ for (auto &user : users) { -+ auto uid = GetUid(user); -+ if (uid < 0) { -+ continue; -+ } -+ groups[gid].emplace_back(uid); -+ } - } - } - -@@ -68,6 +110,11 @@ bool TcpSocket::StartListen() - ERROR(logger, path << " chmod error!"); - return false; - } -+ std::string cmd = "setfacl -m g:oeaware:rw " + path; -+ auto ret = system(cmd.c_str()); -+ if (ret) { -+ WARN(logger, "failed to set the communication permission of the oeaware user group."); -+ } - if (domainSocket->Listen() < 0) { - ERROR(logger, "listen error!"); - return false; -@@ -136,7 +183,6 @@ static void GetEventResult(Message &msg, EventResultQueue sendMessage) - } - - const int DISCONNECTED = -1; --const int DISCONNECTED_AND_UNSUBCRIBE = -2; - - void TcpMessageHandler::Init(EventQueue newRecvMessage, EventResultQueue newSendMessage, EventQueue newRecvData) - { -@@ -240,6 +286,23 @@ void TcpMessageHandler::Start() - } - } - -+bool TcpSocket::CheckFileGroups(const std::string &path) -+{ -+ struct stat st; -+ if (lstat(path.c_str(), &st) < 0) { -+ return false; -+ } -+ for (auto &p : groups) { -+ bool ok = std::any_of(p.second.begin(), p.second.end(), [&](uid_t uid) { -+ return uid == st.st_uid; -+ }); -+ if (ok) { -+ return true; -+ } -+ } -+ return false; -+} -+ - void TcpSocket::SaveConnection() - { - struct sockaddr_un un; -@@ -255,12 +318,12 @@ void TcpSocket::SaveConnection() - memcpy_s(name, maxNameLength, un.sun_path, len); - name[len] = 0; - bool isSdk = false; -- if (strcmp(name, DEFAULT_SDK_CONN_PATH.c_str()) == 0) { -+ if (len > 0) { - isSdk = true; - } - // check permission -- if (isSdk && !CheckFileGroups(DEFAULT_SDK_CONN_PATH, groups)) { -- WARN(logger, "sdk permission error"); -+ if (isSdk && !CheckFileGroups(name)) { -+ WARN(logger, "sdk permission error, " << name); - return; - } - if (!epoll->EventCtl(EPOLL_CTL_ADD, conn)) { -@@ -274,6 +337,9 @@ void TcpSocket::SaveConnection() - type |= CMD_CONN; - } - tcpMessageHandler.AddConn(conn, type); -+ if (isSdk) { -+ INFO(logger, "a sdk connection is established, " << name); -+ } - DEBUG(logger, "client connected!"); - } - -diff --git a/src/plugin_mgr/message_manager.h b/src/plugin_mgr/message_manager.h -index 38f544d..3c67096 100644 ---- a/src/plugin_mgr/message_manager.h -+++ b/src/plugin_mgr/message_manager.h -@@ -73,12 +73,13 @@ private: - bool StartListen(); - void SaveConnection(); - void HandleEvents(struct epoll_event *events, int num); -+ bool CheckFileGroups(const std::string &path); - private: - log4cplus::Logger logger; - std::unique_ptr domainSocket; - std::unique_ptr epoll; - TcpMessageHandler tcpMessageHandler; -- std::vector groups; -+ std::unordered_map> groups; - const int maxRequestNum = 20; - const int maxNameLength = 108; - }; -diff --git a/src/sdk/oe_client.cpp b/src/sdk/oe_client.cpp -index 9452a37..040433a 100644 ---- a/src/sdk/oe_client.cpp -+++ b/src/sdk/oe_client.cpp -@@ -80,7 +80,17 @@ void Impl::HandleRecv() - } - int Impl::Init() - { -- domainSocket = std::make_shared(DEFAULT_SDK_CONN_PATH); -+ auto home = getenv("HOME"); -+ std::string homeDir; -+ if (home == nullptr) { -+ homeDir = "/var/run/oeAware"; -+ } else { -+ homeDir = home; -+ homeDir += "/.oeaware"; -+ } -+ -+ CreateDir(homeDir); -+ domainSocket = std::make_shared(homeDir + "/oeaware-sdk.sock"); - domainSocket->SetRemotePath(DEFAULT_SERVER_LISTEN_PATH); - resultQueue = std::make_shared>(); - int sock = domainSocket->Socket(); --- -2.33.0 - diff --git a/0004-add-command-verification.patch b/0004-add-command-verification.patch deleted file mode 100644 index 09c7b79..0000000 --- a/0004-add-command-verification.patch +++ /dev/null @@ -1,204 +0,0 @@ -From eff9e77d5a695f2ef800c54206dbe0ac11dc0272 Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Wed, 27 Nov 2024 10:18:57 +0800 -Subject: [PATCH 4/5] add command verification - ---- - src/plugin/collect/system/CMakeLists.txt | 2 +- - .../collect/system/command/command_base.cpp | 29 ++++++++++--------- - .../collect/system/command/command_base.h | 3 ++ - .../system/command/command_collector.h | 3 +- - src/plugin/collect/system/kernel_config.cpp | 9 ++++++ - src/plugin/collect/system/kernel_config.h | 1 + - src/plugin_mgr/event/subscribe_handler.cpp | 10 ++----- - src/plugin_mgr/instance_run_handler.cpp | 3 +- - 8 files changed, 36 insertions(+), 24 deletions(-) - -diff --git a/src/plugin/collect/system/CMakeLists.txt b/src/plugin/collect/system/CMakeLists.txt -index ee6044f..af4a239 100644 ---- a/src/plugin/collect/system/CMakeLists.txt -+++ b/src/plugin/collect/system/CMakeLists.txt -@@ -1,6 +1,6 @@ - cmake_minimum_required(VERSION 3.11) - project(system_collector) --include_directories(../include) -+include_directories(command) - add_compile_options(-O2 -fPIC -Wall -Wextra) - add_library(system_collector SHARED - thread_collector.cpp -diff --git a/src/plugin/collect/system/command/command_base.cpp b/src/plugin/collect/system/command/command_base.cpp -index bf658b8..e6c0a83 100644 ---- a/src/plugin/collect/system/command/command_base.cpp -+++ b/src/plugin/collect/system/command/command_base.cpp -@@ -10,6 +10,7 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - #include "command_base.h" -+#include - #include - #include - -@@ -59,23 +60,25 @@ CommandBase::CommandBase() - attrsFirst["vmstat"] = {"swpd"}; - } - -+std::vector CommandBase::command{"mpstat", "iostat", "vmstat", "sar", "pidstat"}; -+std::vector CommandBase::illegal{"|", ";", "&", "$", ">", "<", "`", "\n"}; -+ -+bool CommandBase::ValidateCmd(const std::string &cmd) -+{ -+ for (auto word : illegal) { -+ if (strstr(cmd.c_str(), word.c_str())) { -+ return false; -+ } -+ } -+ return true; -+} -+ - bool CommandBase::ValidateArgs(const oeaware::Topic& topic) - { -- auto cmd = GetCommand(topic); -- PopenProcess p; -- p.Popen(cmd); -- if (!p.stream) { -+ if (std::find(command.begin(), command.end(), topic.topicName) == command.end()) { - return false; - } -- char buffer[128]; -- bool isValid = false; -- if (fgets(buffer, sizeof(buffer), p.stream) != nullptr) { -- if (strstr(buffer, "Linux") != nullptr || strstr(buffer, "procs") != nullptr) { -- isValid = true; -- } -- } -- p.Pclose(); -- return isValid; -+ return ValidateCmd(topic.params); - } - - void CommandBase::ParseLine(const std::string& line) -diff --git a/src/plugin/collect/system/command/command_base.h b/src/plugin/collect/system/command/command_base.h -index a6d7627..ef9bd7c 100644 ---- a/src/plugin/collect/system/command/command_base.h -+++ b/src/plugin/collect/system/command/command_base.h -@@ -35,9 +35,12 @@ public: - oeaware::Topic topic; - std::unordered_map> attrsFirst; - std::vector skipLine{"---swap--"}; -+ static std::vector command; -+ static std::vector illegal; - CommandBase(); - virtual ~CommandBase() = default; - static bool ValidateArgs(const oeaware::Topic& topic); -+ static bool ValidateCmd(const std::string &cmd); - void ParseLine(const std::string& line); - static std::string GetCommand(const oeaware::Topic& topic); - bool FillDataStruct(void* dataStruct); -diff --git a/src/plugin/collect/system/command/command_collector.h b/src/plugin/collect/system/command/command_collector.h -index 26fc7e7..72553e3 100644 ---- a/src/plugin/collect/system/command/command_collector.h -+++ b/src/plugin/collect/system/command/command_collector.h -@@ -27,8 +27,7 @@ public: - void Disable() override; - void Run() override; - private: -- std::vector topicStr = {"mpstat", "iostat", "vmstat", "sar", "pidstat", "lscpu", "zone_reclaim_mode", -- "meminfo", "ethtool", "ifconfig", "os-release", "version"}; -+ std::vector topicStr = {"mpstat", "iostat", "vmstat", "sar", "pidstat"}; - std::unordered_map> collectors; - std::unordered_map collectThreads; - std::unordered_map publishThreads; -diff --git a/src/plugin/collect/system/kernel_config.cpp b/src/plugin/collect/system/kernel_config.cpp -index 6bdfc8a..3d25251 100644 ---- a/src/plugin/collect/system/kernel_config.cpp -+++ b/src/plugin/collect/system/kernel_config.cpp -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include "command_base.h" - - KernelConfig::KernelConfig(): oeaware::Interface() - { -@@ -258,12 +259,20 @@ void KernelConfig::WriteSysParam(const std::string &path, const std::string &val - INFO(logger, "successfully wrote value{" << value <<"} to " << path << "."); - } - -+std::vector KernelConfig::cmdGroup{"sysctl", "ifconfig", "/sbin/blockdev"}; -+ - void KernelConfig::SetKernelConfig() - { - for (auto &p : setSystemParams) { - WriteSysParam(p.first, p.second); - } - for (auto &cmd : cmdRun) { -+ auto cmdParts = oeaware::SplitString(cmd, " "); -+ if (cmdParts.empty() || std::find(cmdGroup.begin(), cmdGroup.end(), cmdParts[0]) == cmdGroup.end() || -+ !CommandBase::ValidateCmd(cmd)) { -+ WARN(logger, "cmd{" << cmd << "} invalid."); -+ continue; -+ } - FILE *pipe = popen(cmd.data(), "r"); - if (!pipe) { - WARN(logger, "{" << cmd << "} run failed."); -diff --git a/src/plugin/collect/system/kernel_config.h b/src/plugin/collect/system/kernel_config.h -index aa96886..32049d4 100644 ---- a/src/plugin/collect/system/kernel_config.h -+++ b/src/plugin/collect/system/kernel_config.h -@@ -62,6 +62,7 @@ private: - std::unordered_map kernelParams; - - std::vector cmdRun; -+ static std::vector cmdGroup; - std::vector allEths; - }; - -diff --git a/src/plugin_mgr/event/subscribe_handler.cpp b/src/plugin_mgr/event/subscribe_handler.cpp -index 8697958..f29b455 100644 ---- a/src/plugin_mgr/event/subscribe_handler.cpp -+++ b/src/plugin_mgr/event/subscribe_handler.cpp -@@ -14,24 +14,20 @@ - namespace oeaware { - Result SubscribeHandler::Subscribe(const std::string &name, const Topic &topic) - { -- Result result; - if (!memoryStore->IsInstanceExist(topic.instanceName)) { - WARN(logger, "The subscribed instance " << topic.instanceName << " does not exist."); -- result.code = -1; -- return result; -+ return Result(FAILED, "instance does not exist."); - } - auto instance = memoryStore->GetInstance(topic.instanceName); - if (!instance->supportTopics.count(topic.topicName)) { - WARN(logger, "The subscribed topic " << topic.topicName << " does not exist."); -- result.code = -1; -- return result; -+ return Result(FAILED, "topic does not exist."); - } - auto msg = std::make_shared(RunType::SUBSCRIBE, - std::vector{topic.GetType(), name}); - instanceRunHandler->RecvQueuePush(msg); - msg->Wait(); -- result = msg->result; -- return result; -+ return msg->result; - } - - EventResult SubscribeHandler::Handle(const Event &event) -diff --git a/src/plugin_mgr/instance_run_handler.cpp b/src/plugin_mgr/instance_run_handler.cpp -index 30dc886..abee581 100644 ---- a/src/plugin_mgr/instance_run_handler.cpp -+++ b/src/plugin_mgr/instance_run_handler.cpp -@@ -61,7 +61,8 @@ Result InstanceRunHandler::Subscribe(const std::vector &payload) - if (!topicState[topic.instanceName][topic.topicName][topic.params]) { - result = instance->interface->OpenTopic(topic); - if (result.code < 0) { -- WARN(logger, "topic open failed, " << result.payload); -+ WARN(logger, "topic{" << LogText(topic.instanceName) << ", " << LogText(topic.topicName) << ", " << -+ LogText(topic.params) << "} open failed, " << result.payload); - DisableInstance(instance->name); - return result; - } --- -2.33.0 - diff --git a/0005-modify-C-interface-name-add-enable-count-and-fix-bug.patch b/0005-modify-C-interface-name-add-enable-count-and-fix-bug.patch deleted file mode 100644 index 270322f..0000000 --- a/0005-modify-C-interface-name-add-enable-count-and-fix-bug.patch +++ /dev/null @@ -1,233 +0,0 @@ -From 1a84134fbe63c1a7bea679b5696bafd99a1b6666 Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Sat, 30 Nov 2024 15:25:03 +0800 -Subject: [PATCH 5/5] modify C interface name, add enable count and fix bugs - ---- - src/client/cmd_handler.cpp | 7 ++++--- - src/client/main.cpp | 4 ++-- - src/plugin_mgr/config.cpp | 5 +++++ - src/plugin_mgr/config.h | 1 + - src/plugin_mgr/event/enable_handler.cpp | 3 +++ - src/plugin_mgr/instance_run_handler.cpp | 3 ++- - src/plugin_mgr/plugin.cpp | 2 +- - src/plugin_mgr/plugin.h | 1 + - src/sdk/oe_client.cpp | 14 +++++++++----- - src/sdk/oe_client.h | 10 +++++----- - 10 files changed, 33 insertions(+), 17 deletions(-) - -diff --git a/src/client/cmd_handler.cpp b/src/client/cmd_handler.cpp -index b1e2ba0..289461b 100644 ---- a/src/client/cmd_handler.cpp -+++ b/src/client/cmd_handler.cpp -@@ -33,7 +33,7 @@ void LoadHandler::Handler(Message &msg) - void LoadHandler::ResHandler(Message &msg) - { - if (msg.opt == Opt::RESPONSE_OK) { -- std::cout << "Plugin loaded successfully."; -+ std::cout << "Plugin loaded successfully.\n"; - } else { - std::cout << "Plugin loaded failed, because "<< msg.payload[0] << ".\n"; - } -@@ -54,9 +54,10 @@ void QueryHandler::PrintFormat() - { - std::cout << "format:\n" - "[plugin]\n" -- "\t[instance]([dependency status], [running status])\n" -+ "\t[instance]([dependency status], [running status], [enable cnt])\n" - "dependency status: available means satisfying dependency, otherwise unavailable.\n" -- "running status: running means that instance is running, otherwise close.\n"; -+ "running status: running means that instance is running, otherwise close.\n" -+ "enable cnt: number of instances enabled.\n"; - } - - void QueryHandler::ResHandler(Message &msg) -diff --git a/src/client/main.cpp b/src/client/main.cpp -index 188d5e2..1c50f1a 100644 ---- a/src/client/main.cpp -+++ b/src/client/main.cpp -@@ -41,8 +41,8 @@ int main(int argc, char *argv[]) - std::string analysis = argv[1]; - if (analysis == "analysis") { - CTopic topic = {"analysis_aware", "analysis_aware", ""}; -- Init(); -- Subscribe(&topic, AnalysisCallback); -+ OeInit(); -+ OeSubscribe(&topic, AnalysisCallback); - std::unique_lock lock(g_mutex); - g_cv.wait(lock, []{ return g_finish; }); - return 0; -diff --git a/src/plugin_mgr/config.cpp b/src/plugin_mgr/config.cpp -index 8cd1432..aee3243 100644 ---- a/src/plugin_mgr/config.cpp -+++ b/src/plugin_mgr/config.cpp -@@ -61,6 +61,10 @@ void Config::SetEnableList(const YAML::Node &node) - std::string pluginName = enableList[i]["name"].as(); - YAML::Node instances = enableList[i]["instances"]; - EnableItem enableItem(pluginName); -+ if (!instances.IsSequence()) { -+ WARN(logger, "the format of the enable list is incorrect."); -+ continue; -+ } - if (!instances.IsDefined() || instances.IsNull()) { - enableItem.SetEnabled(true); - } else { -@@ -75,6 +79,7 @@ void Config::SetEnableList(const YAML::Node &node) - - bool Config::Load(const std::string &path) - { -+ logger = Logger::GetInstance().Get("Main"); - YAML::Node node; - struct stat buffer; - if (stat(path.c_str(), &buffer) != 0) { -diff --git a/src/plugin_mgr/config.h b/src/plugin_mgr/config.h -index 19e6d33..dc02b37 100644 ---- a/src/plugin_mgr/config.h -+++ b/src/plugin_mgr/config.h -@@ -127,6 +127,7 @@ private: - std::string logType; - std::unordered_map pluginList; - std::vector enableList; -+ log4cplus::Logger logger; - }; - - std::string GetPath(); -diff --git a/src/plugin_mgr/event/enable_handler.cpp b/src/plugin_mgr/event/enable_handler.cpp -index 66eba6c..a5d8e1a 100644 ---- a/src/plugin_mgr/event/enable_handler.cpp -+++ b/src/plugin_mgr/event/enable_handler.cpp -@@ -29,6 +29,9 @@ ErrorCode EnableHandler::InstanceEnabled(const std::string &name) - instanceRunHandler->RecvQueuePush(msg); - /* Wait for InstanceRunHandler to finsh this task. */ - msg->Wait(); -+ if (msg->result.code < 0) { -+ return ErrorCode::ENABLE_INSTANCE_ENV; -+ } - return ErrorCode::OK; - } - -diff --git a/src/plugin_mgr/instance_run_handler.cpp b/src/plugin_mgr/instance_run_handler.cpp -index abee581..aa428ff 100644 ---- a/src/plugin_mgr/instance_run_handler.cpp -+++ b/src/plugin_mgr/instance_run_handler.cpp -@@ -26,6 +26,7 @@ Result InstanceRunHandler::EnableInstance(const std::string &name) - return result; - } - instance->enabled = true; -+ instance->enableCnt++; - if (instance->interface->GetType() & SCENARIO) { - scheduleQueue.push(ScheduleInstance{instance, time + instance->interface->GetPeriod()}); - } else if (instance->interface->GetType() & TUNE) { -@@ -196,7 +197,7 @@ bool InstanceRunHandler::HandleMessage() - DEBUG(logger, "handle message " << (int)msg->GetType()); - switch (msg->GetType()) { - case RunType::ENABLED: { -- EnableInstance(msg->payload[0]); -+ msg->result = EnableInstance(msg->payload[0]); - break; - } - case RunType::DISABLED: { -diff --git a/src/plugin_mgr/plugin.cpp b/src/plugin_mgr/plugin.cpp -index 5789737..8b894b6 100644 ---- a/src/plugin_mgr/plugin.cpp -+++ b/src/plugin_mgr/plugin.cpp -@@ -72,6 +72,6 @@ std::string Instance::GetInfo() const - { - std::string stateText = this->state ? pluginStateOn : pluginStateOff; - std::string runText = this->enabled ? pluginEnabled : pluginDisabled; -- return name + "(" + stateText + ", " + runText + ")"; -+ return name + "(" + stateText + ", " + runText + ", count: " + std::to_string(enableCnt) + ")"; - } - } -diff --git a/src/plugin_mgr/plugin.h b/src/plugin_mgr/plugin.h -index ef5fc1d..bf63852 100644 ---- a/src/plugin_mgr/plugin.h -+++ b/src/plugin_mgr/plugin.h -@@ -23,6 +23,7 @@ struct Instance { - std::string pluginName; - bool state = true; - bool enabled; -+ uint64_t enableCnt = 0; - std::shared_ptr interface; - std::unordered_map supportTopics; - const static std::string pluginEnabled; -diff --git a/src/sdk/oe_client.cpp b/src/sdk/oe_client.cpp -index 040433a..a9f82ef 100644 ---- a/src/sdk/oe_client.cpp -+++ b/src/sdk/oe_client.cpp -@@ -22,6 +22,7 @@ - namespace oeaware { - class Impl { - public: -+ Impl() noexcept : domainSocket(nullptr), socketStream(nullptr) { } - int Init(); - int Subscribe(const CTopic &topic, Callback callback); - int Unsubscribe(const CTopic &topic); -@@ -114,6 +115,9 @@ int Impl::Init() - int Impl::HandleRequest(const Opt &opt, const std::vector &payload) - { - MessageProtocol protocol(MessageHeader(MessageType::REQUEST), Message(opt, payload)); -+ if (socketStream == nullptr) { -+ return -1; -+ } - SendMessage(*socketStream, protocol); - Result result; - if (!resultQueue->WaitTimeAndPop(result)) { -@@ -166,28 +170,28 @@ void Impl::Close() - - static oeaware::Impl impl; - --int Init() -+int OeInit() - { - oeaware::Register::GetInstance().InitRegisterData(); - return impl.Init(); - } - --int Subscribe(const CTopic *topic, Callback callback) -+int OeSubscribe(const CTopic *topic, Callback callback) - { - return impl.Subscribe(*topic, callback); - } - --int Unsubscribe(const CTopic *topic) -+int OeUnsubscribe(const CTopic *topic) - { - return impl.Unsubscribe(*topic); - } - --int Publish(const DataList *dataList) -+int OePublish(const DataList *dataList) - { - return impl.Publish(*dataList); - } - --void Close() -+void OeClose() - { - impl.Close(); - } -diff --git a/src/sdk/oe_client.h b/src/sdk/oe_client.h -index 17d8e68..267462c 100644 ---- a/src/sdk/oe_client.h -+++ b/src/sdk/oe_client.h -@@ -16,11 +16,11 @@ - extern "C" { - #endif - typedef int(*Callback)(const DataList *); --int Init(); --int Subscribe(const CTopic *topic, Callback callback); --int Unsubscribe(const CTopic *topic); --int Publish(const DataList *dataList); --void Close(); -+int OeInit(); -+int OeSubscribe(const CTopic *topic, Callback callback); -+int OeUnsubscribe(const CTopic *topic); -+int OePublish(const DataList *dataList); -+void OeClose(); - #ifdef __cplusplus - } - #endif --- -2.33.0 - diff --git a/0006-add-one-time-command-collection.patch b/0006-add-one-time-command-collection.patch deleted file mode 100644 index 0008869..0000000 --- a/0006-add-one-time-command-collection.patch +++ /dev/null @@ -1,510 +0,0 @@ -From 55a03b46318e4c977b7e84508c998775e9db34ba Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Tue, 3 Dec 2024 09:13:09 +0800 -Subject: [PATCH 1/4] add one-time command collection - ---- - src/common/utils.cpp | 29 +++ - src/common/utils.h | 3 + - src/plugin/collect/system/CMakeLists.txt | 2 + - .../collect/system/command/command_base.h | 2 +- - .../system/command/command_collector.cpp | 5 +- - src/plugin/collect/system/kernel_config.cpp | 223 ++++++++++-------- - src/plugin/collect/system/kernel_config.h | 25 +- - tests/CMakeLists.txt | 2 +- - 8 files changed, 175 insertions(+), 116 deletions(-) - -diff --git a/src/common/utils.cpp b/src/common/utils.cpp -index a300a6a..ddd5235 100644 ---- a/src/common/utils.cpp -+++ b/src/common/utils.cpp -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -172,4 +173,32 @@ bool CreateDir(const std::string &path) - } while (pos != std::string::npos); - return true; - } -+ -+bool SetDataListTopic(DataList *dataList, const std::string &instanceName, const std::string &topicName, -+ const std::string ¶ms) -+{ -+ dataList->topic.instanceName = new char[instanceName.size() + 1]; -+ if (dataList->topic.instanceName == nullptr) { -+ return false; -+ } -+ strcpy_s(dataList->topic.instanceName, instanceName.size() + 1, instanceName.data()); -+ dataList->topic.topicName = new char[topicName.size() + 1]; -+ if (dataList->topic.topicName == nullptr) { -+ delete[] dataList->topic.instanceName; -+ dataList->topic.instanceName = nullptr; -+ return false; -+ } -+ strcpy_s(dataList->topic.topicName, topicName.size() + 1, topicName.data()); -+ dataList->topic.params = new char[params.size() + 1]; -+ if (dataList->topic.params == nullptr) { -+ delete[] dataList->topic.instanceName; -+ delete[] dataList->topic.topicName; -+ dataList->topic.instanceName = nullptr; -+ dataList->topic.topicName = nullptr; -+ return false; -+ } -+ strcpy_s(dataList->topic.params, params.size() + 1, params.data()); -+ return true; -+} -+ - } -diff --git a/src/common/utils.h b/src/common/utils.h -index 48b72bd..ceadf36 100644 ---- a/src/common/utils.h -+++ b/src/common/utils.h -@@ -13,6 +13,7 @@ - #define COMMON_UTILS_H - #include - #include -+#include "data_list.h" - - namespace oeaware { - bool Download(const std::string &url, const std::string &path); -@@ -29,6 +30,8 @@ std::string Concat(const std::vector& strings, const std::string &s - // Separate "str" with the separator "split" - std::vector SplitString(const std::string &str, const std::string &split); - bool CreateDir(const std::string &path); -+bool SetDataListTopic(DataList *dataList, const std::string &instanceName, const std::string &topicName, -+ const std::string ¶ms); - } - - #endif // !COMMON_UTILS_H -\ No newline at end of file -diff --git a/src/plugin/collect/system/CMakeLists.txt b/src/plugin/collect/system/CMakeLists.txt -index af4a239..b7d2666 100644 ---- a/src/plugin/collect/system/CMakeLists.txt -+++ b/src/plugin/collect/system/CMakeLists.txt -@@ -10,5 +10,7 @@ add_library(system_collector SHARED - ./command/command_collector.cpp - ./command/command_base.cpp - ) -+target_include_directories(system_collector PRIVATE src/common) -+target_link_libraries(system_collector common) - set_target_properties(system_collector PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_LIBRARY_DIRECTORY}) -\ No newline at end of file -diff --git a/src/plugin/collect/system/command/command_base.h b/src/plugin/collect/system/command/command_base.h -index ef9bd7c..8653a60 100644 ---- a/src/plugin/collect/system/command/command_base.h -+++ b/src/plugin/collect/system/command/command_base.h -@@ -34,7 +34,7 @@ public: - std::string nowType; - oeaware::Topic topic; - std::unordered_map> attrsFirst; -- std::vector skipLine{"---swap--"}; -+ std::vector skipLine{"---swap--", "Average:"}; - static std::vector command; - static std::vector illegal; - CommandBase(); -diff --git a/src/plugin/collect/system/command/command_collector.cpp b/src/plugin/collect/system/command/command_collector.cpp -index 640a406..1f6ac1e 100644 ---- a/src/plugin/collect/system/command/command_collector.cpp -+++ b/src/plugin/collect/system/command/command_collector.cpp -@@ -9,8 +9,8 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- - #include "command_collector.h" -+#include - - CommandCollector::CommandCollector(): oeaware::Interface() - { -@@ -41,8 +41,9 @@ void CommandCollector::CollectThread(const oeaware::Topic &topic, CommandBase* c - while (collector->isRunning && fgets(buffer, sizeof(buffer), p.stream) != nullptr) { - collector->ParseLine(std::string(buffer)); - } -+ int waitTime = 10 * 1000; -+ usleep(waitTime); - p.Pclose(); -- - collector->Close(); - } - -diff --git a/src/plugin/collect/system/kernel_config.cpp b/src/plugin/collect/system/kernel_config.cpp -index 3d25251..145251c 100644 ---- a/src/plugin/collect/system/kernel_config.cpp -+++ b/src/plugin/collect/system/kernel_config.cpp -@@ -17,7 +17,9 @@ - #include - #include - #include -+#include "utils.h" - #include "command_base.h" -+#include "data_register.h" - - KernelConfig::KernelConfig(): oeaware::Interface() - { -@@ -35,6 +37,31 @@ KernelConfig::KernelConfig(): oeaware::Interface() - } - } - -+bool KernelConfig::InitCmd(std::stringstream &ss, const std::string &topicType) -+{ -+ std::string cmd; -+ std::string word; -+ while (ss >> word) { -+ if (word == cmdSeparator) { -+ if (!CommandBase::ValidateCmd(cmd)) { -+ return false; -+ } -+ getCmds[topicType].emplace_back(cmd); -+ cmd = ""; -+ continue; -+ } -+ if (!cmd.empty()) { -+ cmd += " "; -+ } -+ cmd += word; -+ } -+ if (!CommandBase::ValidateCmd(cmd)) { -+ return false; -+ } -+ getCmds[topicType].emplace_back(cmd); -+ return true; -+} -+ - oeaware::Result KernelConfig::OpenTopic(const oeaware::Topic &topic) - { - if (find(topicStr.begin(), topicStr.end(), topic.topicName) == topicStr.end()) { -@@ -42,9 +69,12 @@ oeaware::Result KernelConfig::OpenTopic(const oeaware::Topic &topic) - } - std::stringstream ss(topic.params); - std::string word; -- while (ss >> word) { -- if (topic.topicName == "get_kernel_config") { -- getTopics[topic.GetType()].insert(word); -+ std::string topicType = topic.GetType(); -+ if (topic.topicName == "get_cmd" && !InitCmd(ss, topicType)) { -+ return oeaware::Result(FAILED, "params invalid."); -+ } else if (topic.topicName == "get_kernel_config") { -+ while (ss >> word) { -+ getTopics[topicType].insert(word); - } - } - return oeaware::Result(OK); -@@ -53,87 +83,11 @@ oeaware::Result KernelConfig::OpenTopic(const oeaware::Topic &topic) - void KernelConfig::CloseTopic(const oeaware::Topic &topic) - { - getTopics.erase(topic.GetType()); -+ getCmds.erase(topic.GetType()); - setSystemParams.clear(); - cmdRun.clear(); - } - --void KernelConfig::InitFileParam() --{ -- for (auto &v : kernelParamPath) { -- std::string path = v[1]; -- std::ifstream file(path); -- if (!file.is_open()) { -- continue; -- } -- std::string key = v[0]; -- std::string line; -- std::string value = ""; -- while (std::getline(file, line)) { -- if (line.empty()) { -- continue; -- } -- value += line; -- value += '\n'; -- } -- kernelParams[key] = value; -- file.close(); -- } --} -- --void KernelConfig::AddCommandParam(const std::string &cmd) --{ -- FILE *pipe = popen(cmd.data(), "r"); -- if (!pipe) { -- return; -- } -- char buffer[1024]; -- std::string value; -- while (fgets(buffer, sizeof(buffer), pipe) != nullptr) { -- value += buffer; -- } -- pclose(pipe); -- auto v = oeaware::SplitString(cmd, " "); -- std::vector skipSpace; -- for (auto &word : v) { -- if (word.empty()) continue; -- skipSpace.emplace_back(word); -- } -- if (skipSpace.size() > 1 && v[0] == "ethtool") { -- kernelParams[v[0] + "@" + v[1]] = value; -- return; -- } -- kernelParams[cmd] = value; --} -- --static bool IsSymlink(const std::string &path) --{ -- struct stat st; -- if (lstat(path.c_str(), &st) != 0) { -- perror("lstat failed"); -- return false; -- } -- return S_ISLNK(st.st_mode); --} -- --void KernelConfig::GetAllEth() --{ -- const std::string path = "/sys/class/net"; -- std::vector interfaces; -- DIR* dir = opendir(path.c_str()); -- if (dir == nullptr) { -- WARN(logger, "failed to open directory: " << path << "."); -- return; -- } -- struct dirent* entry; -- while ((entry = readdir(dir)) != nullptr) { -- std::string name(entry->d_name); -- if (name != "." && name != ".." && IsSymlink(path + "/" + name)) { -- allEths.push_back(name); -- } -- } -- closedir(dir); --} -- - oeaware::Result KernelConfig::Enable(const std::string ¶m) - { - (void)param; -@@ -156,21 +110,12 @@ oeaware::Result KernelConfig::Enable(const std::string ¶m) - sysctlParams[values[0]] = values[1]; - } - pclose(pipe); -- InitFileParam(); -- GetAllEth(); -- AddCommandParam("lscpu"); -- AddCommandParam("ifconfig"); -- for (auto ð : allEths) { -- AddCommandParam("ethtool " + eth); -- } -- - return oeaware::Result(OK); - } - - void KernelConfig::Disable() - { - sysctlParams.clear(); -- kernelParams.clear(); - setSystemParams.clear(); - getTopics.clear(); - cmdRun.clear(); -@@ -196,32 +141,103 @@ void KernelConfig::UpdateData(const DataList &dataList) - return; - } - --void KernelConfig::PublishKernelConfig() -+std::vector KernelConfig::getCmdGroup{"cat", "grep", "awk", "pgrep", "ls", "ethtool"}; -+ -+static void SetKernelData(KernelData *data, const std::string &ret) - { -- if (getTopics.empty()) { -+ data->kernelData = new KernelDataNode(); -+ if (data->kernelData == nullptr) { -+ return; -+ } -+ data->len = 1; -+ data->kernelData->key = new char[1]; -+ if (data->kernelData->key == nullptr) { -+ delete data->kernelData; -+ data->kernelData = nullptr; -+ return; -+ } -+ data->kernelData->key[0] = 0; -+ data->kernelData->value = new char[ret.size() + 1]; -+ if (data->kernelData->value == nullptr) { -+ delete data->kernelData; -+ delete[] data->kernelData->key; -+ data->kernelData->key = nullptr; -+ data->kernelData = nullptr; - return; - } -+ strcpy_s(data->kernelData->value, ret.size() + 1, ret.data()); -+ data->kernelData->next = nullptr; -+} -+ -+void KernelConfig::PublishCmd() -+{ -+ for (auto &p : getCmds) { -+ oeaware::Topic topic = oeaware::Topic::GetTopicFromType(p.first); -+ DataList dataList; -+ if (!oeaware::SetDataListTopic(&dataList, topic.instanceName, topic.topicName, topic.params)) { -+ continue; -+ } -+ KernelData *data = new KernelData(); -+ if (data == nullptr) { -+ WARN(logger, "KernelData failed to allocate memory."); -+ continue; -+ } -+ std::string cmd = ""; -+ for (auto &cmdPart : p.second) { -+ if (!cmd.empty()) { -+ cmd += " | "; -+ } -+ cmd += cmdPart; -+ } -+ PopenProcess pipe; -+ pipe.Popen(cmd); -+ char buffer[1024]; -+ std::string ret = ""; -+ while (fgets(buffer, sizeof(buffer), pipe.stream) != nullptr) { -+ ret += buffer; -+ } -+ if (pipe.Pclose() < 0) { -+ WARN(logger, "pipe close error."); -+ } -+ SetKernelData(data, ret); -+ dataList.len = 1; -+ dataList.data = new void* [1]; -+ if (dataList.data == nullptr) { -+ oeaware::Register::GetInstance().GetDataFreeFunc("kernel_config")(data); -+ continue; -+ } -+ dataList.data[0] = data; -+ Publish(dataList); -+ } -+} -+ -+void KernelConfig::PublishKernelParams() -+{ - for (auto &p : getTopics) { - oeaware::Topic topic = oeaware::Topic::GetTopicFromType(p.first); - DataList dataList; -- dataList.topic.instanceName = new char[topic.instanceName.size() + 1]; -- strcpy_s(dataList.topic.instanceName, topic.instanceName.size() + 1, topic.instanceName.data()); -- dataList.topic.topicName = new char[topic.topicName.size() + 1]; -- strcpy_s(dataList.topic.topicName, topic.topicName.size() + 1, topic.topicName.data()); -- dataList.topic.params = new char[topic.params.size() + 1]; -- strcpy_s(dataList.topic.params, topic.params.size() + 1, topic.params.data()); -+ if (!oeaware::SetDataListTopic(&dataList, topic.instanceName, topic.topicName, topic.params)) { -+ continue; -+ } - KernelData *data = new KernelData(); -+ if (data == nullptr) { -+ WARN(logger, "KernelData failed to allocate memory."); -+ continue; -+ } - KernelDataNode *tmp = nullptr; - for (auto &name : p.second) { - std::string value = ""; - if (sysctlParams.count(name)) { - value = sysctlParams[name]; -- } else if (kernelParams.count(name)) { -- value = kernelParams[name]; - } else { -+ WARN(logger, "invalid params: " << name << "."); - continue; - } - KernelDataNode *newNode = createNode(name.data(), value.data()); -+ if (newNode == nullptr) { -+ WARN(logger, "KernelDataNode failed to allocate memory."); -+ continue; -+ } - if (data->kernelData == NULL) { - data->kernelData = newNode; - tmp = newNode; -@@ -239,6 +255,15 @@ void KernelConfig::PublishKernelConfig() - } - } - -+void KernelConfig::PublishKernelConfig() -+{ -+ if (getTopics.empty() && getCmds.empty()) { -+ return; -+ } -+ PublishCmd(); -+ PublishKernelParams(); -+} -+ - void KernelConfig::WriteSysParam(const std::string &path, const std::string &value) - { - std::ofstream sysFile(path); -diff --git a/src/plugin/collect/system/kernel_config.h b/src/plugin/collect/system/kernel_config.h -index 32049d4..4c6eb99 100644 ---- a/src/plugin/collect/system/kernel_config.h -+++ b/src/plugin/collect/system/kernel_config.h -@@ -20,10 +20,11 @@ - /* - * topic: get_kernel_config, obtain the kernel parameter information. - * params: kernel params name, including -- * 1. sysctl -a -N -- * 2. kernel_version, os_release, meminfo, zone_reclaim_mode -- * 3. lscpu, ifconfig, ethtool@{name}. -- * params : -+ * 1. sysctl -a -N -+ * -+ * topic: get_cmd, the trustlist command is supported. -+ * params: each command is seqarated by "@@", include "cat", "grep", "awk", "pgrep", "ls", "ethtool". -+ * - * topic: set_kernel_config, modify kernel parameters. - * DataList: - * data: KernelData, [key, value]: -@@ -41,29 +42,27 @@ public: - void Disable() override; - void Run() override; - private: -+ void PublishCmd(); -+ void PublishKernelParams(); - void PublishKernelConfig(); - void SetKernelConfig(); -+ bool InitCmd(std::stringstream &ss, const std::string &topicType); - void InitFileParam(); - void AddCommandParam(const std::string &cmd); - void WriteSysParam(const std::string &path, const std::string &value); - void GetAllEth(); - -- std::vector topicStr = {"get_kernel_config", "set_kernel_config"}; -- -- const std::vector> kernelParamPath{{"kernel_version", "/proc/version"}, -- {"os_release", "/etc/os-release"}, {"meminfo", "/proc/meminfo"}, -- {"zone_reclaim_mode", "/proc/sys/vm/zone_reclaim_mode"}}; -+ std::vector topicStr = {"get_kernel_config", "get_cmd", "set_kernel_config"}; - // key: topic type, value: parameters to be queried. - std::unordered_map> getTopics; -+ std::unordered_map> getCmds; - std::vector> setSystemParams; - - std::unordered_map sysctlParams; -- // Stores system parameters, include lscpu, ifconfig, file path. -- std::unordered_map kernelParams; -- - std::vector cmdRun; -+ static std::vector getCmdGroup; - static std::vector cmdGroup; -- std::vector allEths; -+ const std::string cmdSeparator = "@@"; - }; - - #endif -diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt -index dec13ac..11079f2 100644 ---- a/tests/CMakeLists.txt -+++ b/tests/CMakeLists.txt -@@ -25,7 +25,7 @@ add_executable(pmu_count_test - pmu_count_test.cpp - ) - --target_link_libraries(serialize_test PRIVATE curl GTest::gtest_main) -+target_link_libraries(serialize_test PRIVATE common GTest::gtest_main) - target_link_libraries(logger_test PRIVATE GTest::gtest_main log4cplus) - target_link_libraries(safe_queue_test PRIVATE GTest::gtest_main) - target_link_libraries(pmu_count_test PRIVATE GTest::gtest_main) --- -2.33.0 - diff --git a/0007-fix-bug-free-spe-mem-after-use-data.patch b/0007-fix-bug-free-spe-mem-after-use-data.patch deleted file mode 100644 index 5838edf..0000000 --- a/0007-fix-bug-free-spe-mem-after-use-data.patch +++ /dev/null @@ -1,135 +0,0 @@ -From cf12b73ec44cf0c553319d675b780e6e8c84f0bc Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Tue, 3 Dec 2024 16:10:46 +0800 -Subject: [PATCH 2/4] fix bug : free spe mem after use data - ---- - src/plugin/collect/pmu/pmu_spe_collector.cpp | 66 ++++++++++++-------- - src/plugin/collect/pmu/pmu_spe_collector.h | 5 +- - 2 files changed, 45 insertions(+), 26 deletions(-) - -diff --git a/src/plugin/collect/pmu/pmu_spe_collector.cpp b/src/plugin/collect/pmu/pmu_spe_collector.cpp -index 114c0ee..8d265eb 100644 ---- a/src/plugin/collect/pmu/pmu_spe_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_spe_collector.cpp -@@ -63,15 +63,26 @@ int PmuSpeCollector::OpenSpe() - return pd; - } - --void PmuSpeCollector::DynamicAdjustPeriod(uint64_t interval) -+void PmuSpeCollector::DynamicAdjustPeriod(int interval) - { -+ if (pmuId == -1) { -+ return; -+ } - if (interval > timeout) { - PmuDisable(pmuId); - PmuClose(pmuId); - attrPeriod *= periodThreshold; -+ if (attrPeriod > maxAttrPeriod) { -+ attrPeriod = maxAttrPeriod; -+ } -+ INFO(logger, "PmuSpeCollector dynamic adjust period to " << -+ attrPeriod << ", PmuRead interval is " << interval << " ms."); - pmuId = OpenSpe(); -- PmuEnable(pmuId); -+ if (pmuId != -1) { -+ PmuEnable(pmuId); -+ } - } -+ // later add code to decrease period when interval is too small - } - - oeaware::Result PmuSpeCollector::OpenTopic(const oeaware::Topic &topic) -@@ -79,7 +90,8 @@ oeaware::Result PmuSpeCollector::OpenTopic(const oeaware::Topic &topic) - if (topic.instanceName != this->name || topic.topicName != topicStr) { - return oeaware::Result(FAILED, "OpenTopic failed"); - } -- -+ attrPeriod = minAttrPeriod; -+ readTimeMs = 0; - if (pmuId == -1) { - pmuId = OpenSpe(); - if (pmuId == -1) { -@@ -124,27 +136,31 @@ void PmuSpeCollector::UpdateData(const DataList &dataList) - - void PmuSpeCollector::Run() - { -- if (pmuId != -1) { -- PmuSpeData *data = new PmuSpeData(); -- PmuDisable(pmuId); -- data->len = PmuRead(pmuId, &(data->pmuData)); -- PmuEnable(pmuId); -- -- auto now = std::chrono::high_resolution_clock::now(); -- data->interval = std::chrono::duration_cast(now - timestamp).count(); -- DynamicAdjustPeriod(data->interval); -- timestamp = std::chrono::high_resolution_clock::now(); -- -- DataList dataList; -- dataList.topic.instanceName = new char[name.size() + 1]; -- strcpy_s(dataList.topic.instanceName, name.size() + 1, name.data()); -- dataList.topic.topicName = new char[topicStr.size() + 1]; -- strcpy_s(dataList.topic.topicName, topicStr.size() + 1, topicStr.data()); -- dataList.topic.params = new char[1]; -- dataList.topic.params[0] = 0; -- dataList.len = 1; -- dataList.data = new void* [1]; -- dataList.data[0] = data; -- Publish(dataList); -+ // adjust period will pmuclose and free spe data -+ // so adjust period should be done after other plugins have finished using SPE data -+ DynamicAdjustPeriod(readTimeMs); -+ if (pmuId == -1) { -+ return; - } -+ PmuSpeData *data = new PmuSpeData(); -+ PmuDisable(pmuId); -+ auto readBegin = std::chrono::high_resolution_clock::now(); -+ data->len = PmuRead(pmuId, &(data->pmuData)); -+ readTimeMs = std::chrono::duration_cast( -+ std::chrono::high_resolution_clock::now() - readBegin).count(); -+ PmuEnable(pmuId); -+ auto now = std::chrono::high_resolution_clock::now(); -+ data->interval = std::chrono::duration_cast(now - timestamp).count(); -+ timestamp = std::chrono::high_resolution_clock::now(); -+ DataList dataList; -+ dataList.topic.instanceName = new char[name.size() + 1]; -+ strcpy_s(dataList.topic.instanceName, name.size() + 1, name.data()); -+ dataList.topic.topicName = new char[topicStr.size() + 1]; -+ strcpy_s(dataList.topic.topicName, topicStr.size() + 1, topicStr.data()); -+ dataList.topic.params = new char[1]; -+ dataList.topic.params[0] = 0; -+ dataList.len = 1; -+ dataList.data = new void *[1]; -+ dataList.data[0] = data; -+ Publish(dataList); - } -\ No newline at end of file -diff --git a/src/plugin/collect/pmu/pmu_spe_collector.h b/src/plugin/collect/pmu/pmu_spe_collector.h -index 00f0be7..3323e47 100644 ---- a/src/plugin/collect/pmu/pmu_spe_collector.h -+++ b/src/plugin/collect/pmu/pmu_spe_collector.h -@@ -28,7 +28,7 @@ public: - void Disable() override; - void Run() override; - private: -- void DynamicAdjustPeriod(uint64_t interval); -+ void DynamicAdjustPeriod(int interval); - void InitSpeAttr(struct PmuAttr &attr); - int OpenSpe(); - -@@ -38,6 +38,9 @@ private: - std::chrono::time_point timestamp; - const int timeout = 50; - const int periodThreshold = 2; -+ const int minAttrPeriod = 2048; -+ const int maxAttrPeriod = 2048000; -+ int readTimeMs = 0; // last period PmuRead() time - }; - - #endif -\ No newline at end of file --- -2.33.0 - diff --git a/0008-Adjust-the-header-file-structure.patch b/0008-Adjust-the-header-file-structure.patch deleted file mode 100644 index 93ad3d3..0000000 --- a/0008-Adjust-the-header-file-structure.patch +++ /dev/null @@ -1,2007 +0,0 @@ -From 2b27b629317083abfc1ed82a289c7e75690aa515 Mon Sep 17 00:00:00 2001 -From: fly_1997 -Date: Tue, 3 Dec 2024 18:46:31 +0800 -Subject: [PATCH 3/4] Adjust the header file structure - ---- - CMakeLists.txt | 24 +++++++++++++++++++ - build.sh | 4 +++- - .../oeaware/data}/adapt_data.h | 4 ++-- - .../oeaware/data}/command_data.h | 4 ++-- - .../oeaware/data}/docker_data.h | 7 ++---- - .../oeaware/data}/kernel_data.h | 8 +++---- - .../oeaware/data}/pmu_counting_data.h | 6 ++--- - .../oeaware/data}/pmu_plugin.h | 0 - .../oeaware/data}/pmu_sampling_data.h | 6 ++--- - .../oeaware/data}/pmu_spe_data.h | 6 ++--- - .../oeaware/data}/pmu_uncore_data.h | 6 ++--- - .../oeaware/data}/thread_info.h | 6 ++--- - {src/common => include/oeaware}/data_list.h | 20 ++++++++++++++-- - .../common => include/oeaware}/default_path.h | 6 ++--- - .../oeaware}/instance_run_message.h | 17 +++---------- - {src/common => include/oeaware}/interface.h | 12 +++++----- - {src/common => include/oeaware}/logger.h | 6 ++--- - {src/common => include/oeaware}/safe_queue.h | 6 ++--- - {src/common => include/oeaware}/serialize.h | 4 ++-- - {src/common => include/oeaware}/topic.h | 8 +++---- - {src/common => include/oeaware}/utils.h | 8 +++---- - install.sh | 4 ++-- - src/client/cmd_handler.cpp | 2 +- - src/client/main.cpp | 2 +- - src/client/tcp_socket.h | 2 +- - src/common/CMakeLists.txt | 19 +-------------- - src/common/data_register.cpp | 21 ++++++++-------- - src/common/data_register.h | 4 ++-- - src/common/domain_socket.cpp | 2 +- - src/common/event.h | 2 +- - src/common/logger.cpp | 2 +- - src/common/message_protocol.h | 2 +- - src/common/utils.cpp | 2 +- - src/plugin/CMakeLists.txt | 17 +------------ - src/plugin/collect/docker/CMakeLists.txt | 1 - - src/plugin/collect/docker/docker_adapt.cpp | 2 +- - src/plugin/collect/docker/docker_adapt.h | 4 ++-- - .../collect/docker/docker_collector.cpp | 2 -- - src/plugin/collect/pmu/CMakeLists.txt | 2 -- - .../collect/pmu/pmu_counting_collector.cpp | 7 +++--- - .../collect/pmu/pmu_counting_collector.h | 3 +-- - .../collect/pmu/pmu_sampling_collector.cpp | 7 +++--- - .../collect/pmu/pmu_sampling_collector.h | 3 +-- - src/plugin/collect/pmu/pmu_spe_collector.cpp | 7 +++--- - src/plugin/collect/pmu/pmu_spe_collector.h | 3 +-- - src/plugin/collect/pmu/pmu_uncore.cpp | 2 +- - .../collect/pmu/pmu_uncore_collector.cpp | 9 ++++--- - src/plugin/collect/pmu/pmu_uncore_collector.h | 3 +-- - src/plugin/collect/system/CMakeLists.txt | 3 ++- - .../collect/system/command/command_base.cpp | 3 ++- - .../collect/system/command/command_base.h | 4 +--- - .../system/command/command_collector.cpp | 2 +- - .../system/command/command_collector.h | 2 +- - src/plugin/collect/system/kernel_config.cpp | 7 +++--- - src/plugin/collect/system/kernel_config.h | 5 ++-- - src/plugin/collect/system/kernel_data.cpp | 4 ++-- - .../collect/system/system_collector.cpp | 1 - - .../collect/system/thread_collector.cpp | 2 +- - src/plugin/collect/system/thread_collector.h | 4 ++-- - src/plugin/scenario/analysis/CMakeLists.txt | 3 --- - .../analysis/adapt/analysis_aware.cpp | 12 ++++------ - .../scenario/analysis/adapt/analysis_aware.h | 4 ++-- - .../scenario/analysis/analysis/analysis.cpp | 2 +- - .../scenario/analysis/analysis/common.h | 2 +- - .../scenario/thread_aware/CMakeLists.txt | 4 ++-- - .../scenario/thread_aware/thread_aware.h | 4 ++-- - src/plugin/tune/docker/CMakeLists.txt | 2 -- - src/plugin/tune/docker/cpu_burst.cpp | 4 ++-- - src/plugin/tune/docker/cpu_burst.h | 4 ++-- - src/plugin/tune/docker/cpu_burst_adapt.cpp | 6 ++--- - src/plugin/tune/docker/cpu_burst_adapt.h | 2 +- - src/plugin/tune/docker/docker_adapt.cpp | 2 -- - .../system/cpu/stealtask_tune/CMakeLists.txt | 2 -- - .../cpu/stealtask_tune/stealtask_tune.cpp | 3 +-- - .../cpu/stealtask_tune/stealtask_tune.h | 2 +- - .../tune/system/network/smc_tune/smc_tune.cpp | 4 ++-- - .../tune/system/network/smc_tune/smc_tune.h | 2 +- - .../system/power/seep_tune/CMakeLists.txt | 1 - - .../tune/system/power/seep_tune/seep_tune.cpp | 3 +-- - .../tune/system/power/seep_tune/seep_tune.h | 2 +- - src/plugin/tune/system/system_tune.cpp | 2 +- - src/plugin/tune/system/xcall/xcall_tune.cpp | 4 ++-- - src/plugin/tune/system/xcall/xcall_tune.h | 4 +--- - src/plugin/tune/unixbench/ub_tune.cpp | 9 ++++--- - src/plugin/tune/unixbench/ub_tune.h | 2 +- - src/plugin_mgr/config.cpp | 2 +- - src/plugin_mgr/event/event_handler.h | 2 +- - src/plugin_mgr/event/list_handler.cpp | 4 ++-- - src/plugin_mgr/event/load_handler.cpp | 3 +-- - src/plugin_mgr/instance_run_handler.h | 5 ++-- - src/plugin_mgr/main.cpp | 4 ++-- - src/plugin_mgr/memory_store.h | 1 - - src/plugin_mgr/message_manager.cpp | 4 ++-- - src/plugin_mgr/message_manager.h | 3 +-- - src/plugin_mgr/plugin.h | 2 +- - src/plugin_mgr/plugin_manager.cpp | 2 +- - src/plugin_mgr/plugin_manager.h | 2 +- - src/sdk/CMakeLists.txt | 8 +++---- - src/sdk/oe_client.cpp | 6 ++--- - src/sdk/oe_client.h | 2 +- - tests/CMakeLists.txt | 2 +- - tests/logger_test.cpp | 2 +- - tests/safe_queue_test.cpp | 2 +- - tests/serialize_test.cpp | 2 +- - tests/utils_test.cpp | 2 +- - tests/xcall_tune_test.cpp | 1 - - 106 files changed, 225 insertions(+), 268 deletions(-) - rename {src/plugin/scenario/include => include/oeaware/data}/adapt_data.h (92%) - rename {src/plugin/collect/include => include/oeaware/data}/command_data.h (93%) - rename {src/plugin/collect/include => include/oeaware/data}/docker_data.h (66%) - rename {src/plugin/collect/include => include/oeaware/data}/kernel_data.h (85%) - rename {src/plugin/collect/include => include/oeaware/data}/pmu_counting_data.h (89%) - rename {src/plugin/collect/include => include/oeaware/data}/pmu_plugin.h (100%) - rename {src/plugin/collect/include => include/oeaware/data}/pmu_sampling_data.h (89%) - rename {src/plugin/collect/include => include/oeaware/data}/pmu_spe_data.h (90%) - rename {src/plugin/collect/include => include/oeaware/data}/pmu_uncore_data.h (89%) - rename {src/plugin/collect/include => include/oeaware/data}/thread_info.h (91%) - rename {src/common => include/oeaware}/data_list.h (55%) - rename {src/common => include/oeaware}/default_path.h (92%) - rename {src/common => include/oeaware}/instance_run_message.h (81%) - rename {src/common => include/oeaware}/interface.h (94%) - rename {src/common => include/oeaware}/logger.h (96%) - rename {src/common => include/oeaware}/safe_queue.h (96%) - rename {src/common => include/oeaware}/serialize.h (99%) - rename {src/common => include/oeaware}/topic.h (95%) - rename {src/common => include/oeaware}/utils.h (94%) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 02ba4df..c0ba108 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -8,3 +8,27 @@ add_subdirectory(src/plugin_mgr) - add_subdirectory(src/client) - add_subdirectory(src/sdk) - add_subdirectory(tests) -+ -+if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") -+file(COPY "${CMAKE_SOURCE_DIR}/include/oeaware/data/pmu_counting_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/pmu_sampling_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/pmu_spe_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/pmu_uncore_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/docker_data.h" -+ DESTINATION "${CMAKE_BINARY_DIR}/output/include/oeaware/data") -+endif() -+file(COPY "${CMAKE_SOURCE_DIR}/include/oeaware/data/kernel_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/command_data.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/data/thread_info.h" -+ DESTINATION "${CMAKE_BINARY_DIR}/output/include/oeaware/data") -+ -+file(COPY "${CMAKE_SOURCE_DIR}/include/oeaware/data_list.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/default_path.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/instance_run_message.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/interface.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/logger.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/safe_queue.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/serialize.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/topic.h" -+ "${CMAKE_SOURCE_DIR}/include/oeaware/utils.h" -+ DESTINATION "${CMAKE_BINARY_DIR}/output/include/oeaware/") -\ No newline at end of file -diff --git a/build.sh b/build.sh -index cfee1c8..fe4c676 100644 ---- a/build.sh -+++ b/build.sh -@@ -53,6 +53,8 @@ elif [[ "$os_arch" == "aarch64" && "$build_kperf_by_src" == "ON" ]]; then - git checkout $libkperf_version - sh build.sh - cd .. -+ mkdir ${script_dir}/include/oeaware/data/libkperf -+ cp ${libkperf_inc}/* ${script_dir}/include/oeaware/data/libkperf - elif [[ "$os_arch" == "aarch64" && "$build_kperf_by_src" == "OFF" ]]; then - echo "[NOTE] use libkperf by rpm" - libkperf_inc=/usr/include/libkperf -@@ -60,5 +62,5 @@ elif [[ "$os_arch" == "aarch64" && "$build_kperf_by_src" == "OFF" ]]; then - fi - - --cmake .. -DLIB_KPERF_LIBPATH=${libkperf_lib} -DLIB_KPERF_INCPATH=${libkperf_inc} -+cmake .. -DLIB_KPERF_LIBPATH=${libkperf_lib} -DLIB_KPERF_INCPATH=${script_dir}/include/oeaware/data - make -j$(nproc) -\ No newline at end of file -diff --git a/src/plugin/scenario/include/adapt_data.h b/include/oeaware/data/adapt_data.h -similarity index 92% -rename from src/plugin/scenario/include/adapt_data.h -rename to include/oeaware/data/adapt_data.h -index 65423ee..e3e2878 100644 ---- a/src/plugin/scenario/include/adapt_data.h -+++ b/include/oeaware/data/adapt_data.h -@@ -10,8 +10,8 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef ADAPT_DATA_H --#define ADAPT_DATA_H -+#ifndef OEAWARE_DATA_ADAPT_DATA_H -+#define OEAWARE_DATA_ADAPT_DATA_H - - #ifdef __cplusplus - extern "C" { -diff --git a/src/plugin/collect/include/command_data.h b/include/oeaware/data/command_data.h -similarity index 93% -rename from src/plugin/collect/include/command_data.h -rename to include/oeaware/data/command_data.h -index e7a8540..13aef4a 100644 ---- a/src/plugin/collect/include/command_data.h -+++ b/include/oeaware/data/command_data.h -@@ -10,8 +10,8 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef COMMAND_DATA_H --#define COMMAND_DATA_H -+#ifndef OEAWARE_DATA_COMMAND_DATA_H -+#define OEAWARE_DATA_COMMAND_DATA_H - - #define ATTR_MAX_LENGTH 20 - #ifdef __cplusplus -diff --git a/src/plugin/collect/include/docker_data.h b/include/oeaware/data/docker_data.h -similarity index 66% -rename from src/plugin/collect/include/docker_data.h -rename to include/oeaware/data/docker_data.h -index acd917d..b8d94b9 100644 ---- a/src/plugin/collect/include/docker_data.h -+++ b/include/oeaware/data/docker_data.h -@@ -1,15 +1,12 @@ - --#ifndef __DOCKER_COLLECTOR_H__ --#define __DOCKER_COLLECTOR_H__ -+#ifndef OEAWARE_DATA_DOCKER_COLLECTOR_H -+#define OEAWARE_DATA_DOCKER_COLLECTOR_H - #include - #include - - #ifdef __cplusplus - extern "C" { - #endif -- --#define DOCKER_COLLECTOR "docker_collector" -- - struct Container { - std::string id; - int64_t cfs_period_us; -diff --git a/src/plugin/collect/include/kernel_data.h b/include/oeaware/data/kernel_data.h -similarity index 85% -rename from src/plugin/collect/include/kernel_data.h -rename to include/oeaware/data/kernel_data.h -index c796513..258c9de 100644 ---- a/src/plugin/collect/include/kernel_data.h -+++ b/include/oeaware/data/kernel_data.h -@@ -10,14 +10,14 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef KERNEL_DATA_H --#define KERNEL_DATA_H -+#ifndef OEAWARE_DATA_KERNEL_DATA_H -+#define OEAWARE_DATA_KERNEL_DATA_H - - #ifdef __cplusplus - extern "C" { - #endif - --typedef struct KernelDataNode{ -+typedef struct KernelDataNode { - char *key; - char *value; - struct KernelDataNode *next; -@@ -28,7 +28,7 @@ typedef struct { - KernelDataNode *kernelData; - } KernelData; - --KernelDataNode* createNode(const char *key, const char *value); -+KernelDataNode* CreateNode(const char *key, const char *value); - #ifdef __cplusplus - } - #endif -diff --git a/src/plugin/collect/include/pmu_counting_data.h b/include/oeaware/data/pmu_counting_data.h -similarity index 89% -rename from src/plugin/collect/include/pmu_counting_data.h -rename to include/oeaware/data/pmu_counting_data.h -index fd07496..032dfff 100644 ---- a/src/plugin/collect/include/pmu_counting_data.h -+++ b/include/oeaware/data/pmu_counting_data.h -@@ -10,9 +10,9 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef PMU_COUNTING_DATA_H --#define PMU_COUNTING_DATA_H --#include "pmu.h" -+#ifndef OEAWARE_DATA_PMU_COUNTING_DATA_H -+#define OEAWARE_DATA_PMU_COUNTING_DATA_H -+#include - - #ifdef __cplusplus - extern "C" { -diff --git a/src/plugin/collect/include/pmu_plugin.h b/include/oeaware/data/pmu_plugin.h -similarity index 100% -rename from src/plugin/collect/include/pmu_plugin.h -rename to include/oeaware/data/pmu_plugin.h -diff --git a/src/plugin/collect/include/pmu_sampling_data.h b/include/oeaware/data/pmu_sampling_data.h -similarity index 89% -rename from src/plugin/collect/include/pmu_sampling_data.h -rename to include/oeaware/data/pmu_sampling_data.h -index 517d9ab..f683c4e 100644 ---- a/src/plugin/collect/include/pmu_sampling_data.h -+++ b/include/oeaware/data/pmu_sampling_data.h -@@ -10,9 +10,9 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef PMU_SAMPLING_DATA_H --#define PMU_SAMPLING_DATA_H --#include "pmu.h" -+#ifndef OEAWARE_DATA_PMU_SAMPLING_DATA_H -+#define OEAWARE_DATA_PMU_SAMPLING_DATA_H -+#include - - #ifdef __cplusplus - extern "C" { -diff --git a/src/plugin/collect/include/pmu_spe_data.h b/include/oeaware/data/pmu_spe_data.h -similarity index 90% -rename from src/plugin/collect/include/pmu_spe_data.h -rename to include/oeaware/data/pmu_spe_data.h -index 90991e2..c45e72d 100644 ---- a/src/plugin/collect/include/pmu_spe_data.h -+++ b/include/oeaware/data/pmu_spe_data.h -@@ -10,9 +10,9 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef PMU_SPE_DATA_H --#define PMU_SPE_DATA_H --#include "pmu.h" -+#ifndef OEAWARE_DATA_PMU_SPE_DATA_H -+#define OEAWARE_DATA_PMU_SPE_DATA_H -+#include - - #ifdef __cplusplus - extern "C" { -diff --git a/src/plugin/collect/include/pmu_uncore_data.h b/include/oeaware/data/pmu_uncore_data.h -similarity index 89% -rename from src/plugin/collect/include/pmu_uncore_data.h -rename to include/oeaware/data/pmu_uncore_data.h -index b33fe41..8afa47f 100644 ---- a/src/plugin/collect/include/pmu_uncore_data.h -+++ b/include/oeaware/data/pmu_uncore_data.h -@@ -10,9 +10,9 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#ifndef PMU_UNCORE_DATA_H --#define PMU_UNCORE_DATA_H --#include "pmu.h" -+#ifndef OEAWARE_DATA_PMU_UNCORE_DATA_H -+#define OEAWARE_DATA_PMU_UNCORE_DATA_H -+#include - - #ifdef __cplusplus - extern "C" { -diff --git a/src/plugin/collect/include/thread_info.h b/include/oeaware/data/thread_info.h -similarity index 91% -rename from src/plugin/collect/include/thread_info.h -rename to include/oeaware/data/thread_info.h -index 3838927..d24a480 100644 ---- a/src/plugin/collect/include/thread_info.h -+++ b/include/oeaware/data/thread_info.h -@@ -9,8 +9,8 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef THREAD_INFO_H --#define THREAD_INFO_H -+#ifndef OEAWARE_DATA_THREAD_INFO_H -+#define OEAWARE_DATA_THREAD_INFO_H - #ifdef __cplusplus - extern "C" { - #endif -@@ -23,4 +23,4 @@ typedef struct { - } - #endif - --#endif // !THREAD_INFO_H -+#endif -diff --git a/src/common/data_list.h b/include/oeaware/data_list.h -similarity index 55% -rename from src/common/data_list.h -rename to include/oeaware/data_list.h -index 78fa0c9..11962c0 100644 ---- a/src/common/data_list.h -+++ b/include/oeaware/data_list.h -@@ -9,8 +9,24 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_DATA_LIST_H --#define COMMON_DATA_LIST_H -+#ifndef OEAWARE_DATA_LIST_H -+#define OEAWARE_DATA_LIST_H -+// Names of all instances. -+#define OE_PMU_COUNTING_COLLECTOR "pmu_counting_collector" -+#define OE_PMU_SAMPLING_COLLECTOR "pmu_sampling_collector" -+#define OE_PMU_SPE_COLLECTOR "pmu_spe_collector" -+#define OE_PMU_UNCORE_COLLECTOR "pmu_uncore_collector" -+#define OE_DOCKER_COLLECTOR "docker_collector" -+#define OE_KERNEL_CONFIG_COLLECTOR "kernel_config" -+#define OE_THREAD_COLLECTOR "thread_collector" -+#define OE_COMMAND_COLLECTOR "command_collector" -+#define OE_UNIXBENCH_TUNE "unixbench_tune" -+#define OE_DOCKER_CPU_BURST_TUNE "docker_cpu_burst" -+#define OE_STEALTASK_TUNE "stealtask_tune" -+#define OE_SMC_TUNE "smc_tune" -+#define OE_SEEP_TUNE "seep_tune" -+#define OE_XCALL_TUNE "xcall_tune" -+ - #ifdef __cplusplus - extern "C" { - #endif -diff --git a/src/common/default_path.h b/include/oeaware/default_path.h -similarity index 92% -rename from src/common/default_path.h -rename to include/oeaware/default_path.h -index 091400c..99042c4 100644 ---- a/src/common/default_path.h -+++ b/include/oeaware/default_path.h -@@ -9,8 +9,8 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_DEFAULT_PATH_H --#define COMMON_DEFAULT_PATH_H -+#ifndef OEAWARE_DEFAULT_PATH_H -+#define OEAWARE_DEFAULT_PATH_H - #include - - namespace oeaware { -@@ -21,4 +21,4 @@ const std::string DEFAULT_SERVER_LISTEN_PATH = "/var/run/oeAware/oeAware-server" - const std::string DEFAULT_SDK_CONN_PATH = "/var/run/oeAware/oeAware-sdk"; - } - --#endif // !COMMON_DEFAULT_PATH_H -\ No newline at end of file -+#endif -\ No newline at end of file -diff --git a/src/common/instance_run_message.h b/include/oeaware/instance_run_message.h -similarity index 81% -rename from src/common/instance_run_message.h -rename to include/oeaware/instance_run_message.h -index 647a004..5f6c147 100644 ---- a/src/common/instance_run_message.h -+++ b/include/oeaware/instance_run_message.h -@@ -10,11 +10,11 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef INSTANCE_RUN_MESSAGE_H --#define INSTANCE_RUN_MESSAGE_H -+#ifndef OEAWARE_INSTANCE_RUN_MESSAGE_H -+#define OEAWARE_INSTANCE_RUN_MESSAGE_H - #include - #include --#include "topic.h" -+#include - - namespace oeaware { - enum class RunType { -@@ -70,16 +70,5 @@ enum class InstanceMessageType { - UNSUBSCRIBE, - PUBLISH_DATA, - }; -- --class InstanceMessage { -- // InstanceMessage() {} -- // explicit InstanceMessage(RunType type) : type(type) { } -- // InstanceMessage(RunType type, const std::vector &payload) : payload(payload), type(type) { } -- InstanceMessageType type; -- std::vector payload; -- Result result; -- const DataList *dataList; --}; -- - } - #endif -\ No newline at end of file -diff --git a/src/common/interface.h b/include/oeaware/interface.h -similarity index 94% -rename from src/common/interface.h -rename to include/oeaware/interface.h -index 83323cd..5f915a4 100644 ---- a/src/common/interface.h -+++ b/include/oeaware/interface.h -@@ -9,12 +9,12 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_INTERFACE_H --#define COMMON_INTERFACE_H --#include "data_list.h" --#include "logger.h" --#include "safe_queue.h" --#include "instance_run_message.h" -+#ifndef OEAWARE_INTERFACE_H -+#define OEAWARE_INTERFACE_H -+#include -+#include -+#include -+#include - - namespace oeaware { - // Instance type. -diff --git a/src/common/logger.h b/include/oeaware/logger.h -similarity index 96% -rename from src/common/logger.h -rename to include/oeaware/logger.h -index 1c3ee18..1a8745e 100644 ---- a/src/common/logger.h -+++ b/include/oeaware/logger.h -@@ -9,13 +9,13 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_LOGGER_H --#define COMMON_LOGGER_H -+#ifndef OEAWARE_LOGGER_H -+#define OEAWARE_LOGGER_H - #include - #include - #include - #include --#include "default_path.h" -+#include - - namespace oeaware { - #define INFO(logger, fmt) LOG4CPLUS_INFO(logger, fmt) -diff --git a/src/common/safe_queue.h b/include/oeaware/safe_queue.h -similarity index 96% -rename from src/common/safe_queue.h -rename to include/oeaware/safe_queue.h -index 47cf75f..f0f9f07 100644 ---- a/src/common/safe_queue.h -+++ b/include/oeaware/safe_queue.h -@@ -9,8 +9,8 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_SAFE_QUEUE_H --#define COMMON_SAFE_QUEUE_H -+#ifndef OEAWARE_SAFE_QUEUE_H -+#define OEAWARE_SAFE_QUEUE_H - #include - #include - #include -@@ -70,4 +70,4 @@ private: - }; - } - --#endif // !COMMON_QUEUE_H -+#endif -diff --git a/src/common/serialize.h b/include/oeaware/serialize.h -similarity index 99% -rename from src/common/serialize.h -rename to include/oeaware/serialize.h -index 4eef8b7..c3240b0 100644 ---- a/src/common/serialize.h -+++ b/include/oeaware/serialize.h -@@ -9,8 +9,8 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_SERIALIZE_H --#define COMMON_SERIALIZE_H -+#ifndef OEAWARE_SERIALIZE_H -+#define OEAWARE_SERIALIZE_H - #include - #include - #include -diff --git a/src/common/topic.h b/include/oeaware/topic.h -similarity index 95% -rename from src/common/topic.h -rename to include/oeaware/topic.h -index ce9977c..f298ceb 100644 ---- a/src/common/topic.h -+++ b/include/oeaware/topic.h -@@ -9,10 +9,10 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_TOPIC_H --#define COMMON_TOPIC_H --#include "utils.h" --#include "serialize.h" -+#ifndef OEAWARE_TOPIC_H -+#define OEAWARE_TOPIC_H -+#include -+#include - - namespace oeaware { - struct Topic { -diff --git a/src/common/utils.h b/include/oeaware/utils.h -similarity index 94% -rename from src/common/utils.h -rename to include/oeaware/utils.h -index ceadf36..98e9c5c 100644 ---- a/src/common/utils.h -+++ b/include/oeaware/utils.h -@@ -9,11 +9,11 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#ifndef COMMON_UTILS_H --#define COMMON_UTILS_H -+#ifndef OEAWARE_UTILS_H -+#define OEAWARE_UTILS_H - #include - #include --#include "data_list.h" -+#include - - namespace oeaware { - bool Download(const std::string &url, const std::string &path); -@@ -34,4 +34,4 @@ bool SetDataListTopic(DataList *dataList, const std::string &instanceName, const - const std::string ¶ms); - } - --#endif // !COMMON_UTILS_H -\ No newline at end of file -+#endif -\ No newline at end of file -diff --git a/install.sh b/install.sh -index c544c78..909595b 100644 ---- a/install.sh -+++ b/install.sh -@@ -1,5 +1,5 @@ - mkdir -p /usr/include/oeaware --cp -r build/output/include/* /usr/include/oeaware -+cp -r build/output/bin/include/* /usr/include/ - cp -r build/output/bin/* /bin/ - mkdir -p /etc/oeaware - cp config.yaml /etc/oeaware -@@ -11,4 +11,4 @@ chmod 640 build/output/plugin/lib/*.conf - cp build/output/plugin/lib/*.conf /lib64/oeAware-plugin - chmod 400 build/output/plugin/ko/*.ko - cp build/output/plugin/ko/smc_acc.ko /usr/lib/smc/smc_acc.ko --insmod /usr/lib/smc/smc_acc.ko -\ No newline at end of file -+insmod /usr/lib/smc/smc_acc.ko -diff --git a/src/client/cmd_handler.cpp b/src/client/cmd_handler.cpp -index 289461b..01719b2 100644 ---- a/src/client/cmd_handler.cpp -+++ b/src/client/cmd_handler.cpp -@@ -11,7 +11,7 @@ - ******************************************************************************/ - #include "cmd_handler.h" - #include --#include "utils.h" -+#include "oeaware/utils.h" - - namespace oeaware { - std::unordered_set LoadHandler::types = {"collector", "scenario", "tune"}; -diff --git a/src/client/main.cpp b/src/client/main.cpp -index 1c50f1a..26d0ae1 100644 ---- a/src/client/main.cpp -+++ b/src/client/main.cpp -@@ -14,7 +14,7 @@ - #include - #include "client.h" - #include "oe_client.h" --#include "adapt_data.h" -+#include "oeaware/data/adapt_data.h" - - std::condition_variable g_cv; - std::mutex g_mutex; -diff --git a/src/client/tcp_socket.h b/src/client/tcp_socket.h -index 36dc89b..dbd8f17 100644 ---- a/src/client/tcp_socket.h -+++ b/src/client/tcp_socket.h -@@ -13,7 +13,7 @@ - #define CLIENT_TCP_SOCKET_H - #include - #include "message_protocol.h" --#include "default_path.h" -+#include "oeaware/default_path.h" - - namespace oeaware { - class TcpSocket { -diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt -index 46084e5..d6bbd58 100644 ---- a/src/common/CMakeLists.txt -+++ b/src/common/CMakeLists.txt -@@ -29,21 +29,4 @@ target_link_directories(${PROJECT_NAME} PUBLIC - target_link_libraries(${PROJECT_NAME} kperf) - endif() - --file(COPY -- "${CMAKE_CURRENT_SOURCE_DIR}/data_list.h" --DESTINATION "${CMAKE_BINARY_DIR}/output/include") -- --# for external plugin development --file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/interface.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/data_register.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/default_path.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/domain_socket.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/event.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/interface.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/logger.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/message_protocol.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/safe_queue.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/serialize.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/topic.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/utils.h" -- DESTINATION "${CMAKE_BINARY_DIR}/output/include/interface") -\ No newline at end of file -+target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include) -diff --git a/src/common/data_register.cpp b/src/common/data_register.cpp -index cdf6d97..1d8350b 100644 ---- a/src/common/data_register.cpp -+++ b/src/common/data_register.cpp -@@ -1,18 +1,17 @@ - #include "data_register.h" - #include --#include "data_list.h" --#include "utils.h" -+#include "oeaware/utils.h" - #if defined(__arm__) || defined(__aarch64__) --#include "pmu_counting_data.h" --#include "pmu_sampling_data.h" --#include "pmu_spe_data.h" --#include "pmu_uncore_data.h" --#include "symbol.h" -+#include "oeaware/data/pmu_counting_data.h" -+#include "oeaware/data/pmu_sampling_data.h" -+#include "oeaware/data/pmu_spe_data.h" -+#include "oeaware/data/pmu_uncore_data.h" -+#include "libkperf/symbol.h" - #endif --#include "thread_info.h" --#include "kernel_data.h" --#include "command_data.h" --#include "adapt_data.h" -+#include "oeaware/data/thread_info.h" -+#include "oeaware/data/kernel_data.h" -+#include "oeaware/data/command_data.h" -+#include "oeaware/data/adapt_data.h" - - namespace oeaware { - -diff --git a/src/common/data_register.h b/src/common/data_register.h -index b72cd97..5ec5fb4 100644 ---- a/src/common/data_register.h -+++ b/src/common/data_register.h -@@ -12,8 +12,8 @@ - #ifndef COMMON_DATA_REGISTER_H - #define COMMON_DATA_REGISTER_H - #include --#include "serialize.h" --#include "data_list.h" -+#include "oeaware/serialize.h" -+#include "oeaware/data_list.h" - - namespace oeaware { - using DeserializeFunc = int(*)(void**, InStream &in); -diff --git a/src/common/domain_socket.cpp b/src/common/domain_socket.cpp -index 4bcf840..57d8a55 100644 ---- a/src/common/domain_socket.cpp -+++ b/src/common/domain_socket.cpp -@@ -12,7 +12,7 @@ - #include "domain_socket.h" - #include - #include --#include "default_path.h" -+#include "oeaware/default_path.h" - - namespace oeaware { - int DomainSocket::CreateSockAddrUn(struct sockaddr_un &un, const std::string &sunPath) -diff --git a/src/common/event.h b/src/common/event.h -index 1e5b87a..baba985 100644 ---- a/src/common/event.h -+++ b/src/common/event.h -@@ -12,7 +12,7 @@ - #ifndef PLUGIN_MGR_EVENT_EVENT_H - #define PLUGIN_MGR_EVENT_EVENT_H - #include "message_protocol.h" --#include "safe_queue.h" -+#include "oeaware/safe_queue.h" - - namespace oeaware { - enum class EventType { -diff --git a/src/common/logger.cpp b/src/common/logger.cpp -index 53b9cb0..f28750d 100644 ---- a/src/common/logger.cpp -+++ b/src/common/logger.cpp -@@ -9,7 +9,7 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#include "logger.h" -+#include "oeaware/logger.h" - #include - - namespace oeaware { -diff --git a/src/common/message_protocol.h b/src/common/message_protocol.h -index d353ee0..ffda7bc 100644 ---- a/src/common/message_protocol.h -+++ b/src/common/message_protocol.h -@@ -15,7 +15,7 @@ - #include - #include - #include --#include "serialize.h" -+#include "oeaware/serialize.h" - - namespace oeaware { - const int MAX_RECV_BUFF_SIZE = 16384; -diff --git a/src/common/utils.cpp b/src/common/utils.cpp -index ddd5235..8f63a70 100644 ---- a/src/common/utils.cpp -+++ b/src/common/utils.cpp -@@ -9,7 +9,7 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#include "utils.h" -+#include "oeaware/utils.h" - #include - #include - #include -diff --git a/src/plugin/CMakeLists.txt b/src/plugin/CMakeLists.txt -index 8b643a9..4aeefcb 100644 ---- a/src/plugin/CMakeLists.txt -+++ b/src/plugin/CMakeLists.txt -@@ -1,9 +1,6 @@ - - include_directories( -- ${CMAKE_CURRENT_SOURCE_DIR}/../common -- ${CMAKE_CURRENT_SOURCE_DIR}/collect/include -- ${CMAKE_CURRENT_SOURCE_DIR}/scenario/include -- ${CMAKE_CURRENT_SOURCE_DIR}/tune/include -+ ${CMAKE_SOURCE_DIR}/include - ) - - set(PLUGIN_OUTPUT_LIBRARY_DIRECTORY ${CMAKE_BINARY_DIR}/output/plugin/lib) -@@ -25,15 +22,3 @@ add_subdirectory(scenario/thread_aware) - - add_subdirectory(tune/system) - add_subdirectory(tune/unixbench) --if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") --file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/pmu_counting_data.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/pmu_sampling_data.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/pmu_spe_data.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/pmu_uncore_data.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/docker_data.h" -- DESTINATION "${CMAKE_BINARY_DIR}/output/include") --endif() --file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/kernel_data.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/thread_info.h" -- "${CMAKE_CURRENT_SOURCE_DIR}/collect/include/command_data.h" -- DESTINATION "${CMAKE_BINARY_DIR}/output/include") -diff --git a/src/plugin/collect/docker/CMakeLists.txt b/src/plugin/collect/docker/CMakeLists.txt -index 02b1bf0..cdde00f 100644 ---- a/src/plugin/collect/docker/CMakeLists.txt -+++ b/src/plugin/collect/docker/CMakeLists.txt -@@ -1,6 +1,5 @@ - cmake_minimum_required(VERSION 3.11) - project(docker_collector) --include_directories(../include) - add_compile_options(-O2 -fPIC -Wall -Wextra) - add_library(docker_collector SHARED - docker_adapt.cpp -diff --git a/src/plugin/collect/docker/docker_adapt.cpp b/src/plugin/collect/docker/docker_adapt.cpp -index 97fa596..eab3270 100644 ---- a/src/plugin/collect/docker/docker_adapt.cpp -+++ b/src/plugin/collect/docker/docker_adapt.cpp -@@ -40,7 +40,7 @@ static bool GetContainersInfo(int64_t &val, const std::string &container_id, con - - DockerAdapt::DockerAdapt() - { -- name = DOCKER_COLLECTOR; -+ name = OE_DOCKER_COLLECTOR; - description = "collect information of docker"; - version = "1.0.0"; - period = PERIOD; -diff --git a/src/plugin/collect/docker/docker_adapt.h b/src/plugin/collect/docker/docker_adapt.h -index 0b639b6..570a2a7 100644 ---- a/src/plugin/collect/docker/docker_adapt.h -+++ b/src/plugin/collect/docker/docker_adapt.h -@@ -15,8 +15,8 @@ - #include - #include - #include --#include "interface.h" --#include "docker_data.h" -+#include "oeaware/interface.h" -+#include "oeaware/data/docker_data.h" - - class DockerAdapt : public oeaware::Interface { - public: -diff --git a/src/plugin/collect/docker/docker_collector.cpp b/src/plugin/collect/docker/docker_collector.cpp -index 0c70bc6..7e9166b 100644 ---- a/src/plugin/collect/docker/docker_collector.cpp -+++ b/src/plugin/collect/docker/docker_collector.cpp -@@ -9,8 +9,6 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- --#include "interface.h" - #include "docker_adapt.h" - - extern "C" void GetInstance(std::vector> &interface) -diff --git a/src/plugin/collect/pmu/CMakeLists.txt b/src/plugin/collect/pmu/CMakeLists.txt -index c2ea6da..bcd83eb 100644 ---- a/src/plugin/collect/pmu/CMakeLists.txt -+++ b/src/plugin/collect/pmu/CMakeLists.txt -@@ -27,8 +27,6 @@ set(pmu_src - add_library(pmu SHARED ${pmu_src}) - - include_directories(pmu PRIVATE -- ${CMAKE_CURRENT_SOURCE_DIR}/../include -- ${CMAKE_CURRENT_SOURCE_DIR}/plugin - ${LIB_KPERF_INCPATH} - ) - -diff --git a/src/plugin/collect/pmu/pmu_counting_collector.cpp b/src/plugin/collect/pmu/pmu_counting_collector.cpp -index d4de3c8..2d1a86b 100644 ---- a/src/plugin/collect/pmu/pmu_counting_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_counting_collector.cpp -@@ -9,16 +9,15 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- -+#include "pmu_counting_collector.h" - #include - #include - #include --#include "pmu_counting_collector.h" --#include "pmu_counting_data.h" -+#include "oeaware/data/pmu_counting_data.h" - - PmuCountingCollector::PmuCountingCollector(): oeaware::Interface() - { -- this->name = "pmu_counting_collector"; -+ this->name = OE_PMU_COUNTING_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect counting information of pmu"; - this->priority = 0; -diff --git a/src/plugin/collect/pmu/pmu_counting_collector.h b/src/plugin/collect/pmu/pmu_counting_collector.h -index 966040c..06878c3 100644 ---- a/src/plugin/collect/pmu/pmu_counting_collector.h -+++ b/src/plugin/collect/pmu/pmu_counting_collector.h -@@ -14,8 +14,7 @@ - #define PMU_COUNTING_COLLECTOR_H - #include - #include --#include "data_list.h" --#include "interface.h" -+#include "oeaware/interface.h" - - class PmuCountingCollector : public oeaware::Interface { - public: -diff --git a/src/plugin/collect/pmu/pmu_sampling_collector.cpp b/src/plugin/collect/pmu/pmu_sampling_collector.cpp -index 8f8576f..4d1a4ec 100644 ---- a/src/plugin/collect/pmu/pmu_sampling_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_sampling_collector.cpp -@@ -9,16 +9,15 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- -+#include "pmu_sampling_collector.h" - #include - #include - #include --#include "pmu_sampling_collector.h" --#include "pmu_sampling_data.h" -+#include "oeaware/data/pmu_sampling_data.h" - - PmuSamplingCollector::PmuSamplingCollector(): oeaware::Interface() - { -- this->name = "pmu_sampling_collector"; -+ this->name = OE_PMU_SAMPLING_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect sampling information of pmu"; - this->priority = 0; -diff --git a/src/plugin/collect/pmu/pmu_sampling_collector.h b/src/plugin/collect/pmu/pmu_sampling_collector.h -index 75b8476..5a73f34 100644 ---- a/src/plugin/collect/pmu/pmu_sampling_collector.h -+++ b/src/plugin/collect/pmu/pmu_sampling_collector.h -@@ -14,8 +14,7 @@ - #define PMU_SAMPLING_COLLECTOR_H - #include - #include --#include "data_list.h" --#include "interface.h" -+#include "oeaware/interface.h" - - constexpr int NET_RECEIVE_TRACE_SAMPLE_PERIOD = 10; - constexpr int CYCLES_FREQ = 100; -diff --git a/src/plugin/collect/pmu/pmu_spe_collector.cpp b/src/plugin/collect/pmu/pmu_spe_collector.cpp -index 8d265eb..42be95b 100644 ---- a/src/plugin/collect/pmu/pmu_spe_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_spe_collector.cpp -@@ -9,15 +9,14 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- -+#include "pmu_spe_collector.h" - #include - #include --#include "pmu_spe_collector.h" --#include "pmu_spe_data.h" -+#include "oeaware/data/pmu_spe_data.h" - - PmuSpeCollector::PmuSpeCollector(): oeaware::Interface() - { -- this->name = "pmu_spe_collector"; -+ this->name = OE_PMU_SPE_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect spe information of pmu"; - this->priority = 0; -diff --git a/src/plugin/collect/pmu/pmu_spe_collector.h b/src/plugin/collect/pmu/pmu_spe_collector.h -index 3323e47..ec2a8cf 100644 ---- a/src/plugin/collect/pmu/pmu_spe_collector.h -+++ b/src/plugin/collect/pmu/pmu_spe_collector.h -@@ -14,8 +14,7 @@ - #define PMU_SPE_COLLECTOR_H - #include - #include --#include "data_list.h" --#include "interface.h" -+#include "oeaware/interface.h" - - class PmuSpeCollector : public oeaware::Interface { - public: -diff --git a/src/plugin/collect/pmu/pmu_uncore.cpp b/src/plugin/collect/pmu/pmu_uncore.cpp -index 2bca6bb..cf46121 100644 ---- a/src/plugin/collect/pmu/pmu_uncore.cpp -+++ b/src/plugin/collect/pmu/pmu_uncore.cpp -@@ -9,12 +9,12 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -+#include "pmu_uncore.h" - #include - #include - #include - #include - #include --#include "pmu_uncore.h" - - static int hhaNum = 0; - static struct UncoreConfig *uncoreRxOuter = nullptr; -diff --git a/src/plugin/collect/pmu/pmu_uncore_collector.cpp b/src/plugin/collect/pmu/pmu_uncore_collector.cpp -index c57f420..e9bd87c 100644 ---- a/src/plugin/collect/pmu/pmu_uncore_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_uncore_collector.cpp -@@ -9,19 +9,18 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- -+#include "pmu_uncore_collector.h" - #include - #include - #include - #include --#include "pmu_uncore_collector.h" --#include "pmu_uncore_data.h" -+#include "oeaware/data/pmu_uncore_data.h" - #include "pmu_uncore.h" --#include "pcerrc.h" -+#include "libkperf/pcerrc.h" - - PmuUncoreCollector::PmuUncoreCollector(): oeaware::Interface() - { -- this->name = "pmu_uncore_collector"; -+ this->name = OE_PMU_UNCORE_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect uncore information of pmu"; - this->priority = 0; -diff --git a/src/plugin/collect/pmu/pmu_uncore_collector.h b/src/plugin/collect/pmu/pmu_uncore_collector.h -index d623adf..175026f 100644 ---- a/src/plugin/collect/pmu/pmu_uncore_collector.h -+++ b/src/plugin/collect/pmu/pmu_uncore_collector.h -@@ -14,8 +14,7 @@ - #define PMU_UNCORE_COLLECTOR_H - #include - #include --#include "data_list.h" --#include "interface.h" -+#include "oeaware/interface.h" - - class PmuUncoreCollector : public oeaware::Interface { - public: -diff --git a/src/plugin/collect/system/CMakeLists.txt b/src/plugin/collect/system/CMakeLists.txt -index b7d2666..3ec2358 100644 ---- a/src/plugin/collect/system/CMakeLists.txt -+++ b/src/plugin/collect/system/CMakeLists.txt -@@ -10,7 +10,8 @@ add_library(system_collector SHARED - ./command/command_collector.cpp - ./command/command_base.cpp - ) --target_include_directories(system_collector PRIVATE src/common) -+target_include_directories(system_collector PUBLIC ${CMAKE_SOURCE_DIR}/include) -+target_include_directories(system_collector PRIVATE ${CMAKE_SOURCE_DIR}/src/common) - target_link_libraries(system_collector common) - set_target_properties(system_collector PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_LIBRARY_DIRECTORY}) -\ No newline at end of file -diff --git a/src/plugin/collect/system/command/command_base.cpp b/src/plugin/collect/system/command/command_base.cpp -index e6c0a83..863d339 100644 ---- a/src/plugin/collect/system/command/command_base.cpp -+++ b/src/plugin/collect/system/command/command_base.cpp -@@ -13,7 +13,8 @@ - #include - #include - #include -- -+#include "oeaware/data/command_data.h" -+#include "oeaware/data_list.h" - int PopenProcess::Pclose() - { - if (fclose(stream) == EOF) { -diff --git a/src/plugin/collect/system/command/command_base.h b/src/plugin/collect/system/command/command_base.h -index 8653a60..295d503 100644 ---- a/src/plugin/collect/system/command/command_base.h -+++ b/src/plugin/collect/system/command/command_base.h -@@ -17,9 +17,7 @@ - #include - #include - #include --#include "data_list.h" --#include "topic.h" --#include "command_data.h" -+#include "oeaware/topic.h" - - class CommandBase { - public: -diff --git a/src/plugin/collect/system/command/command_collector.cpp b/src/plugin/collect/system/command/command_collector.cpp -index 1f6ac1e..aeb9205 100644 ---- a/src/plugin/collect/system/command/command_collector.cpp -+++ b/src/plugin/collect/system/command/command_collector.cpp -@@ -14,7 +14,7 @@ - - CommandCollector::CommandCollector(): oeaware::Interface() - { -- this->name = "command_collector"; -+ this->name = OE_COMMAND_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect information of command"; - this->priority = 0; -diff --git a/src/plugin/collect/system/command/command_collector.h b/src/plugin/collect/system/command/command_collector.h -index 72553e3..ccbdea7 100644 ---- a/src/plugin/collect/system/command/command_collector.h -+++ b/src/plugin/collect/system/command/command_collector.h -@@ -14,7 +14,7 @@ - #define COMMAND_COLLECTOR_H - - #include "command_base.h" --#include "interface.h" -+#include "oeaware/interface.h" - - class CommandCollector : public oeaware::Interface { - public: -diff --git a/src/plugin/collect/system/kernel_config.cpp b/src/plugin/collect/system/kernel_config.cpp -index 145251c..9ac295b 100644 ---- a/src/plugin/collect/system/kernel_config.cpp -+++ b/src/plugin/collect/system/kernel_config.cpp -@@ -17,13 +17,14 @@ - #include - #include - #include --#include "utils.h" -+#include "oeaware/utils.h" - #include "command_base.h" -+#include "oeaware/data/kernel_data.h" - #include "data_register.h" - - KernelConfig::KernelConfig(): oeaware::Interface() - { -- this->name = "kernel_config"; -+ this->name = OE_KERNEL_CONFIG_COLLECTOR; - this->version = "1.0.0"; - this->description = "collect or set kernel config"; - this->priority = 0; -@@ -233,7 +234,7 @@ void KernelConfig::PublishKernelParams() - WARN(logger, "invalid params: " << name << "."); - continue; - } -- KernelDataNode *newNode = createNode(name.data(), value.data()); -+ KernelDataNode *newNode = CreateNode(name.data(), value.data()); - if (newNode == nullptr) { - WARN(logger, "KernelDataNode failed to allocate memory."); - continue; -diff --git a/src/plugin/collect/system/kernel_config.h b/src/plugin/collect/system/kernel_config.h -index 4c6eb99..ce99d67 100644 ---- a/src/plugin/collect/system/kernel_config.h -+++ b/src/plugin/collect/system/kernel_config.h -@@ -14,9 +14,8 @@ - #include - #include - #include --#include "data_list.h" --#include "interface.h" --#include "kernel_data.h" -+#include "oeaware/interface.h" -+ - /* - * topic: get_kernel_config, obtain the kernel parameter information. - * params: kernel params name, including -diff --git a/src/plugin/collect/system/kernel_data.cpp b/src/plugin/collect/system/kernel_data.cpp -index c9c001e..49fb5f6 100644 ---- a/src/plugin/collect/system/kernel_data.cpp -+++ b/src/plugin/collect/system/kernel_data.cpp -@@ -11,10 +11,10 @@ - ******************************************************************************/ - #include - #include --#include "kernel_data.h" -+#include "oeaware/data/kernel_data.h" - - --KernelDataNode* createNode(const char *key, const char *value) -+KernelDataNode* CreateNode(const char *key, const char *value) - { - KernelDataNode *node = new KernelDataNode; - if (node == NULL) { -diff --git a/src/plugin/collect/system/system_collector.cpp b/src/plugin/collect/system/system_collector.cpp -index e321ed7..4d2c078 100644 ---- a/src/plugin/collect/system/system_collector.cpp -+++ b/src/plugin/collect/system/system_collector.cpp -@@ -9,7 +9,6 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ --#include "interface.h" - #include "thread_collector.h" - #include "kernel_config.h" - #include "command/command_collector.h" -diff --git a/src/plugin/collect/system/thread_collector.cpp b/src/plugin/collect/system/thread_collector.cpp -index 67b8432..91db97c 100644 ---- a/src/plugin/collect/system/thread_collector.cpp -+++ b/src/plugin/collect/system/thread_collector.cpp -@@ -23,7 +23,7 @@ - - ThreadCollector::ThreadCollector() - { -- name = "thread_collector"; -+ name = OE_THREAD_COLLECTOR; - description = "collect information of thread"; - version = "1.0.0"; - period = 500; -diff --git a/src/plugin/collect/system/thread_collector.h b/src/plugin/collect/system/thread_collector.h -index 2f16fa2..7ee0ed3 100644 ---- a/src/plugin/collect/system/thread_collector.h -+++ b/src/plugin/collect/system/thread_collector.h -@@ -14,8 +14,8 @@ - #include - #include - #include --#include "interface.h" --#include "thread_info.h" -+#include "oeaware/interface.h" -+#include "oeaware/data/thread_info.h" - - class ThreadCollector: public oeaware::Interface { - public: -diff --git a/src/plugin/scenario/analysis/CMakeLists.txt b/src/plugin/scenario/analysis/CMakeLists.txt -index 85d34dd..068f1ef 100644 ---- a/src/plugin/scenario/analysis/CMakeLists.txt -+++ b/src/plugin/scenario/analysis/CMakeLists.txt -@@ -23,9 +23,6 @@ target_include_directories(analysis_base PUBLIC - target_link_libraries(analysis_base numa boundscheck) - - add_library(analysis_oeaware SHARED ${oeaware_src}) --target_include_directories(analysis_oeaware PUBLIC -- ${CMAKE_CURRENT_SOURCE_DIR}/../include --) - - target_link_libraries(analysis_oeaware analysis_base) - set_target_properties(analysis_oeaware PROPERTIES -diff --git a/src/plugin/scenario/analysis/adapt/analysis_aware.cpp b/src/plugin/scenario/analysis/adapt/analysis_aware.cpp -index 3c4c65f..a04ee30 100644 ---- a/src/plugin/scenario/analysis/adapt/analysis_aware.cpp -+++ b/src/plugin/scenario/analysis/adapt/analysis_aware.cpp -@@ -12,14 +12,12 @@ - #include "analysis_aware.h" - #include - #include --#include "adapt_data.h" -- /* oeaware manager interface */ --#include "interface.h" -+#include "oeaware/data/adapt_data.h" - /* dependent external plugin interfaces */ --#include "pmu_plugin.h" --#include "pmu_counting_data.h" --#include "pmu_sampling_data.h" --#include "pmu_spe_data.h" -+#include "oeaware/data/pmu_plugin.h" -+#include "oeaware/data/pmu_counting_data.h" -+#include "oeaware/data/pmu_sampling_data.h" -+#include "oeaware/data/pmu_spe_data.h" - /* external plugin dependent interfaces */ - - /* internal data processing interface */ -diff --git a/src/plugin/scenario/analysis/adapt/analysis_aware.h b/src/plugin/scenario/analysis/adapt/analysis_aware.h -index 511566f..e029e31 100644 ---- a/src/plugin/scenario/analysis/adapt/analysis_aware.h -+++ b/src/plugin/scenario/analysis/adapt/analysis_aware.h -@@ -11,9 +11,9 @@ - ******************************************************************************/ - #ifndef ANALYSIS_AWARE_H - #define ANALYSIS_AWARE_H --#include "interface.h" -+#include "oeaware/interface.h" - #include "analysis.h" --#include "pmu.h" -+#include "libkperf/pmu.h" - - namespace oeaware { - class AnalysisAware : public Interface { -diff --git a/src/plugin/scenario/analysis/analysis/analysis.cpp b/src/plugin/scenario/analysis/analysis/analysis.cpp -index eef6209..6abe44b 100644 ---- a/src/plugin/scenario/analysis/analysis/analysis.cpp -+++ b/src/plugin/scenario/analysis/analysis/analysis.cpp -@@ -16,7 +16,7 @@ - #include - #include - #include --#include "pmu_plugin.h" -+#include "oeaware/data/pmu_plugin.h" - - const int TUNE_PID_LOW_BOUND = 1000; - const uint64_t ACCESS_THRESHOLD = 200; -diff --git a/src/plugin/scenario/analysis/analysis/common.h b/src/plugin/scenario/analysis/analysis/common.h -index 797d53e..4e9546d 100644 ---- a/src/plugin/scenario/analysis/analysis/common.h -+++ b/src/plugin/scenario/analysis/analysis/common.h -@@ -12,7 +12,7 @@ - #ifndef COMMON_H - #define COMMON_H - --#include "pmu.h" -+#include "libkperf/pmu.h" - #include - #include - #include "env.h" -diff --git a/src/plugin/scenario/thread_aware/CMakeLists.txt b/src/plugin/scenario/thread_aware/CMakeLists.txt -index eeb3b72..01395e5 100644 ---- a/src/plugin/scenario/thread_aware/CMakeLists.txt -+++ b/src/plugin/scenario/thread_aware/CMakeLists.txt -@@ -1,10 +1,10 @@ - cmake_minimum_required(VERSION 3.11) --project(thread_aware) -+project(thread_scenario) - add_compile_options(-O2 -fPIC -Wall -Wextra) - add_library(thread_scenario SHARED - thread_aware.cpp - ) -- -+target_include_directories(thread_scenario PUBLIC ${CMAKE_SOURCE_DIR}/include) - set_target_properties(thread_scenario PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_LIBRARY_DIRECTORY}) - file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/thread_scenario.conf" -diff --git a/src/plugin/scenario/thread_aware/thread_aware.h b/src/plugin/scenario/thread_aware/thread_aware.h -index a07c9c1..b4fac26 100644 ---- a/src/plugin/scenario/thread_aware/thread_aware.h -+++ b/src/plugin/scenario/thread_aware/thread_aware.h -@@ -11,8 +11,8 @@ - ******************************************************************************/ - #ifndef THREAD_AWARE_H - #define THREAD_AWARE_H --#include "interface.h" --#include "thread_info.h" -+#include "oeaware/interface.h" -+#include "oeaware/data/thread_info.h" - - namespace oeaware { - class ThreadAware : public Interface { -diff --git a/src/plugin/tune/docker/CMakeLists.txt b/src/plugin/tune/docker/CMakeLists.txt -index 12dd1ea..a41465a 100644 ---- a/src/plugin/tune/docker/CMakeLists.txt -+++ b/src/plugin/tune/docker/CMakeLists.txt -@@ -18,8 +18,6 @@ add_library(docker_tune SHARED - ) - - include_directories(docker_tune PUBLIC -- ${CMAKE_CURRENT_SOURCE_DIR}/../include -- ${CMAKE_CURRENT_SOURCE_DIR}/plugin - ${LIB_KPERF_INCPATH} - ) - -diff --git a/src/plugin/tune/docker/cpu_burst.cpp b/src/plugin/tune/docker/cpu_burst.cpp -index 298228b..58b41dd 100644 ---- a/src/plugin/tune/docker/cpu_burst.cpp -+++ b/src/plugin/tune/docker/cpu_burst.cpp -@@ -13,7 +13,7 @@ - #include - #include - #include --#include "pmu_counting_data.h" -+#include "oeaware/data/pmu_counting_data.h" - - constexpr double NINETY_PERCENT = 0.9; - constexpr int MILLISECONDS_IN_SECOND = 1000; -@@ -74,7 +74,7 @@ void CpuBurst::Update(const DataList &dataList) - auto topic_name = dataList.topic.topicName; - if (instance_name == std::string("pmu_counting_collector") && topic_name == std::string("cycles")) { - UpdatePmu(dataList); -- } else if (instance_name == std::string(DOCKER_COLLECTOR) && topic_name == std::string(DOCKER_COLLECTOR)) { -+ } else if (instance_name == std::string(OE_DOCKER_COLLECTOR) && topic_name == std::string(OE_DOCKER_COLLECTOR)) { - UpdateDocker(dataList); - } - } -diff --git a/src/plugin/tune/docker/cpu_burst.h b/src/plugin/tune/docker/cpu_burst.h -index 82e5fc8..b485747 100644 ---- a/src/plugin/tune/docker/cpu_burst.h -+++ b/src/plugin/tune/docker/cpu_burst.h -@@ -16,8 +16,8 @@ - #include - #include - #include --#include "interface.h" --#include "docker_data.h" -+#include "oeaware/data_list.h" -+#include "oeaware/data/docker_data.h" - - - struct ContainerTune { -diff --git a/src/plugin/tune/docker/cpu_burst_adapt.cpp b/src/plugin/tune/docker/cpu_burst_adapt.cpp -index 63d2dcb..3fa6254 100644 ---- a/src/plugin/tune/docker/cpu_burst_adapt.cpp -+++ b/src/plugin/tune/docker/cpu_burst_adapt.cpp -@@ -22,7 +22,7 @@ constexpr int PRIORITY = 2; - - CpuBurstAdapt::CpuBurstAdapt() - { -- name = "docker_cpu_burst"; -+ name = OE_DOCKER_CPU_BURST_TUNE; - description = ""; - version = "1.0.0"; - period = PERIOD; -@@ -59,8 +59,8 @@ oeaware::Result CpuBurstAdapt::Enable(const std::string ¶m) - topic.instanceName = "pmu_counting_collector"; - topic.topicName = "cycles"; - oeaware::Result ret_pmu = Subscribe(topic); -- topic.instanceName = DOCKER_COLLECTOR; -- topic.topicName = DOCKER_COLLECTOR; -+ topic.instanceName = OE_DOCKER_COLLECTOR; -+ topic.topicName = OE_DOCKER_COLLECTOR; - oeaware::Result ret_docker = Subscribe(topic); - if (ret_pmu.code != OK || ret_docker.code != OK) - return oeaware::Result(FAILED, "Subscribe failed!"); -diff --git a/src/plugin/tune/docker/cpu_burst_adapt.h b/src/plugin/tune/docker/cpu_burst_adapt.h -index 5174d10..4c583b0 100644 ---- a/src/plugin/tune/docker/cpu_burst_adapt.h -+++ b/src/plugin/tune/docker/cpu_burst_adapt.h -@@ -12,7 +12,7 @@ - - #ifndef CPU_BURST_ADAPT_H - #define CPU_BURST_ADAPT_H --#include "interface.h" -+#include "oeaware/interface.h" - - class CpuBurstAdapt : public oeaware::Interface { - public: -diff --git a/src/plugin/tune/docker/docker_adapt.cpp b/src/plugin/tune/docker/docker_adapt.cpp -index 2f8c2b0..2691305 100644 ---- a/src/plugin/tune/docker/docker_adapt.cpp -+++ b/src/plugin/tune/docker/docker_adapt.cpp -@@ -9,8 +9,6 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- --#include "interface.h" - #include "cpu_burst_adapt.h" - using namespace oeaware; - -diff --git a/src/plugin/tune/system/cpu/stealtask_tune/CMakeLists.txt b/src/plugin/tune/system/cpu/stealtask_tune/CMakeLists.txt -index 1529b70..c311a01 100644 ---- a/src/plugin/tune/system/cpu/stealtask_tune/CMakeLists.txt -+++ b/src/plugin/tune/system/cpu/stealtask_tune/CMakeLists.txt -@@ -8,8 +8,6 @@ else() - endif() - add_compile_options(-fPIC -Wall -Wextra) - --include_directories(../include) -- - add_library(stealtask_tune STATIC - stealtask_tune.cpp - ) -diff --git a/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.cpp b/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.cpp -index ceaec77..2c6e854 100644 ---- a/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.cpp -+++ b/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.cpp -@@ -11,14 +11,13 @@ - ******************************************************************************/ - - #include "stealtask_tune.h" --#include "interface.h" - #include - - using namespace oeaware; - - StealTask::StealTask() - { -- name = "stealtask_tune"; -+ name = OE_STEALTASK_TUNE; - description = ""; - version = "1.0.0"; - period = -1; -diff --git a/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.h b/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.h -index 622d747..800c9d9 100644 ---- a/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.h -+++ b/src/plugin/tune/system/cpu/stealtask_tune/stealtask_tune.h -@@ -12,7 +12,7 @@ - #ifndef STEALTASK_TUNE_H - #define STEALTASK_TUNE_H - --#include "interface.h" -+#include "oeaware/interface.h" - - namespace oeaware { - class StealTask : public Interface{ -diff --git a/src/plugin/tune/system/network/smc_tune/smc_tune.cpp b/src/plugin/tune/system/network/smc_tune/smc_tune.cpp -index 7cd7c36..e1c7f6f 100644 ---- a/src/plugin/tune/system/network/smc_tune/smc_tune.cpp -+++ b/src/plugin/tune/system/network/smc_tune/smc_tune.cpp -@@ -9,16 +9,16 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -+#include "smc_tune.h" - #include - #include "smc_ueid.h" --#include "smc_tune.h" - - #define SMC_OP SmcOperator::getInstance() - using namespace oeaware; - int log_level = 0; - SmcTune::SmcTune() - { -- name = "smc_tune"; -+ name = OE_SMC_TUNE; - description = "collect information of key thread"; - version = "1.0.0"; - period = -1; -diff --git a/src/plugin/tune/system/network/smc_tune/smc_tune.h b/src/plugin/tune/system/network/smc_tune/smc_tune.h -index a7754b4..b779201 100644 ---- a/src/plugin/tune/system/network/smc_tune/smc_tune.h -+++ b/src/plugin/tune/system/network/smc_tune/smc_tune.h -@@ -12,7 +12,7 @@ - - #ifndef OEAWARE_MANAGER_SMC_TUNE_H - #define OEAWARE_MANAGER_SMC_TUNE_H --#include "interface.h" -+#include "oeaware/interface.h" - - namespace oeaware { - class SmcTune : public Interface { -diff --git a/src/plugin/tune/system/power/seep_tune/CMakeLists.txt b/src/plugin/tune/system/power/seep_tune/CMakeLists.txt -index 6aa451f..92fb91b 100644 ---- a/src/plugin/tune/system/power/seep_tune/CMakeLists.txt -+++ b/src/plugin/tune/system/power/seep_tune/CMakeLists.txt -@@ -8,7 +8,6 @@ else() - endif() - add_compile_options(-fPIC -Wall -Wextra) - --include_directories(../include) - add_library(seep_tune STATIC - seep_tune.cpp - ) -diff --git a/src/plugin/tune/system/power/seep_tune/seep_tune.cpp b/src/plugin/tune/system/power/seep_tune/seep_tune.cpp -index 71dc275..dbd7d20 100644 ---- a/src/plugin/tune/system/power/seep_tune/seep_tune.cpp -+++ b/src/plugin/tune/system/power/seep_tune/seep_tune.cpp -@@ -11,7 +11,6 @@ - ******************************************************************************/ - - #include "seep_tune.h" --#include "interface.h" - #include - #include - #include -@@ -21,7 +20,7 @@ using namespace oeaware; - - Seep::Seep() - { -- name = "seep_tune"; -+ name = OE_SEEP_TUNE; - description = ""; - version = "1.0.0"; - period = -1; -diff --git a/src/plugin/tune/system/power/seep_tune/seep_tune.h b/src/plugin/tune/system/power/seep_tune/seep_tune.h -index 07f23d7..645b71d 100644 ---- a/src/plugin/tune/system/power/seep_tune/seep_tune.h -+++ b/src/plugin/tune/system/power/seep_tune/seep_tune.h -@@ -12,7 +12,7 @@ - #ifndef SEEP_TUNE_H - #define SEEP_TUNE_H - --#include "interface.h" -+#include "oeaware/interface.h" - - namespace oeaware - { -diff --git a/src/plugin/tune/system/system_tune.cpp b/src/plugin/tune/system/system_tune.cpp -index 401205c..c0608be 100644 ---- a/src/plugin/tune/system/system_tune.cpp -+++ b/src/plugin/tune/system/system_tune.cpp -@@ -10,7 +10,7 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - --#include "interface.h" -+#include "oeaware/interface.h" - #include "cpu/stealtask_tune/stealtask_tune.h" - #include "network/smc_tune/smc_tune.h" - #include "xcall/xcall_tune.h" -diff --git a/src/plugin/tune/system/xcall/xcall_tune.cpp b/src/plugin/tune/system/xcall/xcall_tune.cpp -index 629022d..9dee9a7 100644 ---- a/src/plugin/tune/system/xcall/xcall_tune.cpp -+++ b/src/plugin/tune/system/xcall/xcall_tune.cpp -@@ -12,11 +12,11 @@ - #include "xcall_tune.h" - #include - #include --#include "data_list.h" -+#include "oeaware/data/thread_info.h" - - XcallTune::XcallTune() - { -- name = "xcall_tune"; -+ name = OE_XCALL_TUNE; - description = "collect information of key thread"; - version = "1.0.0"; - period = defaultPeriod; -diff --git a/src/plugin/tune/system/xcall/xcall_tune.h b/src/plugin/tune/system/xcall/xcall_tune.h -index 654cc6e..7e91a40 100644 ---- a/src/plugin/tune/system/xcall/xcall_tune.h -+++ b/src/plugin/tune/system/xcall/xcall_tune.h -@@ -11,11 +11,9 @@ - ******************************************************************************/ - #ifndef XCALL_TUNE_H - #define XCALL_TUNE_H --#include "interface.h" - #include - #include --#include "data_list.h" --#include "thread_info.h" -+#include "oeaware/interface.h" - - class XcallTune : public oeaware::Interface { - public: -diff --git a/src/plugin/tune/unixbench/ub_tune.cpp b/src/plugin/tune/unixbench/ub_tune.cpp -index 3d092c0..9f7673c 100644 ---- a/src/plugin/tune/unixbench/ub_tune.cpp -+++ b/src/plugin/tune/unixbench/ub_tune.cpp -@@ -9,12 +9,11 @@ - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - ******************************************************************************/ -- -+#include "ub_tune.h" - #include - #include --#include "interface.h" --#include "thread_info.h" --#include "ub_tune.h" -+#include "oeaware/interface.h" -+#include "oeaware/data/thread_info.h" - - using namespace oeaware; - -@@ -24,7 +23,7 @@ extern "C" void GetInstance(std::vector> &in - } - - UnixBenchTune::UnixBenchTune() { -- name = "unixbench_tune"; -+ name = OE_UNIXBENCH_TUNE; - description = ""; - version = "1.0.0"; - period = 500; -diff --git a/src/plugin/tune/unixbench/ub_tune.h b/src/plugin/tune/unixbench/ub_tune.h -index 779fedb..99ec723 100644 ---- a/src/plugin/tune/unixbench/ub_tune.h -+++ b/src/plugin/tune/unixbench/ub_tune.h -@@ -15,7 +15,7 @@ - #include - #include - #include --#include "interface.h" -+#include "oeaware/interface.h" - #define MAX_CPU 4096 - #define MAX_NODE 8 - #define DEFAULT_BIND_NODE 0 -diff --git a/src/plugin_mgr/config.cpp b/src/plugin_mgr/config.cpp -index aee3243..0ac1fb0 100644 ---- a/src/plugin_mgr/config.cpp -+++ b/src/plugin_mgr/config.cpp -@@ -12,7 +12,7 @@ - #include "config.h" - #include - #include --#include "default_path.h" -+#include "oeaware/default_path.h" - - namespace oeaware { - bool CheckPluginList(YAML::Node pluginListItem) -diff --git a/src/plugin_mgr/event/event_handler.h b/src/plugin_mgr/event/event_handler.h -index db05706..fa636fd 100644 ---- a/src/plugin_mgr/event/event_handler.h -+++ b/src/plugin_mgr/event/event_handler.h -@@ -13,7 +13,7 @@ - #define PLUGIN_MGR_EVENT_EVENT_HANDLER_H - #include "event.h" - #include "memory_store.h" --#include "logger.h" -+#include "oeaware/logger.h" - #include "error_code.h" - - namespace oeaware { -diff --git a/src/plugin_mgr/event/list_handler.cpp b/src/plugin_mgr/event/list_handler.cpp -index 13e4532..0184753 100644 ---- a/src/plugin_mgr/event/list_handler.cpp -+++ b/src/plugin_mgr/event/list_handler.cpp -@@ -12,8 +12,8 @@ - #include "list_handler.h" - #include - #include --#include "utils.h" --#include "default_path.h" -+#include "oeaware/utils.h" -+#include "oeaware/default_path.h" - - namespace oeaware { - std::string ListHandler::GetPluginInDir(const std::string &path) -diff --git a/src/plugin_mgr/event/load_handler.cpp b/src/plugin_mgr/event/load_handler.cpp -index dc862e5..09b7b31 100644 ---- a/src/plugin_mgr/event/load_handler.cpp -+++ b/src/plugin_mgr/event/load_handler.cpp -@@ -11,8 +11,7 @@ - ******************************************************************************/ - #include "load_handler.h" - #include --#include "utils.h" --#include "default_path.h" -+#include "oeaware/utils.h" - - namespace oeaware { - ErrorCode LoadHandler::LoadPlugin(const std::string &name) -diff --git a/src/plugin_mgr/instance_run_handler.h b/src/plugin_mgr/instance_run_handler.h -index 285b350..4020dea 100644 ---- a/src/plugin_mgr/instance_run_handler.h -+++ b/src/plugin_mgr/instance_run_handler.h -@@ -14,11 +14,10 @@ - #include - #include - #include "event.h" --#include "safe_queue.h" --#include "logger.h" -+#include "oeaware/logger.h" - #include "memory_store.h" - #include "data_register.h" --#include "instance_run_message.h" -+#include "oeaware/instance_run_message.h" - - namespace oeaware { - class ScheduleInstance { -diff --git a/src/plugin_mgr/main.cpp b/src/plugin_mgr/main.cpp -index 8e410f7..197fe9d 100644 ---- a/src/plugin_mgr/main.cpp -+++ b/src/plugin_mgr/main.cpp -@@ -11,8 +11,8 @@ - ******************************************************************************/ - #include - #include "plugin_manager.h" --#include "data_register.h" --#include "utils.h" -+#include "message_manager.h" -+#include "oeaware/utils.h" - - int main(int argc, char **argv) - { -diff --git a/src/plugin_mgr/memory_store.h b/src/plugin_mgr/memory_store.h -index bf5e59c..3c81cb3 100644 ---- a/src/plugin_mgr/memory_store.h -+++ b/src/plugin_mgr/memory_store.h -@@ -12,7 +12,6 @@ - #ifndef PLUGIN_MGR_MEMORY_STORE_H - #define PLUGIN_MGR_MEMORY_STORE_H - #include --#include "logger.h" - #include "plugin.h" - - namespace oeaware { -diff --git a/src/plugin_mgr/message_manager.cpp b/src/plugin_mgr/message_manager.cpp -index bfa5b0c..e68f801 100644 ---- a/src/plugin_mgr/message_manager.cpp -+++ b/src/plugin_mgr/message_manager.cpp -@@ -13,8 +13,8 @@ - #include - #include - #include --#include "default_path.h" --#include "utils.h" -+#include "oeaware/default_path.h" -+#include "oeaware/utils.h" - - namespace oeaware { - static const int CMD_CONN = 1; -diff --git a/src/plugin_mgr/message_manager.h b/src/plugin_mgr/message_manager.h -index 3c67096..ab692e8 100644 ---- a/src/plugin_mgr/message_manager.h -+++ b/src/plugin_mgr/message_manager.h -@@ -16,8 +16,7 @@ - #include - #include - #include --#include "message_protocol.h" --#include "logger.h" -+#include "oeaware/logger.h" - #include "config.h" - #include "event.h" - #include "domain_socket.h" -diff --git a/src/plugin_mgr/plugin.h b/src/plugin_mgr/plugin.h -index bf63852..b3ea5af 100644 ---- a/src/plugin_mgr/plugin.h -+++ b/src/plugin_mgr/plugin.h -@@ -15,7 +15,7 @@ - #include - #include - #include --#include "interface.h" -+#include "oeaware/interface.h" - - namespace oeaware { - struct Instance { -diff --git a/src/plugin_mgr/plugin_manager.cpp b/src/plugin_mgr/plugin_manager.cpp -index 6d87edd..99c5adf 100644 ---- a/src/plugin_mgr/plugin_manager.cpp -+++ b/src/plugin_mgr/plugin_manager.cpp -@@ -12,7 +12,7 @@ - #include "plugin_manager.h" - #include - #include --#include "utils.h" -+#include "oeaware/utils.h" - #include "event/load_handler.h" - #include "event/remove_handler.h" - #include "event/query_handler.h" -diff --git a/src/plugin_mgr/plugin_manager.h b/src/plugin_mgr/plugin_manager.h -index c742280..9e65ac0 100644 ---- a/src/plugin_mgr/plugin_manager.h -+++ b/src/plugin_mgr/plugin_manager.h -@@ -12,7 +12,7 @@ - #ifndef PLUGIN_MGR_PLUGIN_MANAGER_H - #define PLUGIN_MGR_PLUGIN_MANAGER_H - #include "instance_run_handler.h" --#include "message_manager.h" -+#include "config.h" - #include "event/event_handler.h" - - namespace oeaware { -diff --git a/src/sdk/CMakeLists.txt b/src/sdk/CMakeLists.txt -index e16fd43..5ff5dea 100644 ---- a/src/sdk/CMakeLists.txt -+++ b/src/sdk/CMakeLists.txt -@@ -4,16 +4,14 @@ project(oeaware-sdk) - aux_source_directory(. SOURCE) - SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++14 -g -Wl,-z,relro,-z,now -Wall -Wextra -fPIC -O2") - --include_directories(../common --) -- - add_library(${PROJECT_NAME} SHARED - oe_client.cpp - ) -+target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) -+target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/common) - target_link_libraries(${PROJECT_NAME} common) -- - file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/oe_client.h" --DESTINATION "${CMAKE_BINARY_DIR}/output/include") -+DESTINATION "${CMAKE_BINARY_DIR}/output/include/oeaware") - - set(SDK_OUTPUT_LIBRARY_DIRECTORY ${CMAKE_BINARY_DIR}/output/sdk) - file(MAKE_DIRECTORY ${SDK_OUTPUT_LIBRARY_DIRECTORY}) -diff --git a/src/sdk/oe_client.cpp b/src/sdk/oe_client.cpp -index a9f82ef..68b9d4a 100644 ---- a/src/sdk/oe_client.cpp -+++ b/src/sdk/oe_client.cpp -@@ -13,10 +13,10 @@ - #include - #include - #include "domain_socket.h" --#include "utils.h" -+#include "oeaware/utils.h" - #include "message_protocol.h" --#include "safe_queue.h" --#include "default_path.h" -+#include "oeaware/safe_queue.h" -+#include "oeaware/default_path.h" - #include "data_register.h" - - namespace oeaware { -diff --git a/src/sdk/oe_client.h b/src/sdk/oe_client.h -index 267462c..991feb1 100644 ---- a/src/sdk/oe_client.h -+++ b/src/sdk/oe_client.h -@@ -11,7 +11,7 @@ - ******************************************************************************/ - #ifndef SDK_OE_CLIENT_H - #define SDK_OE_CLIENT_H --#include "data_list.h" -+#include "oeaware/data_list.h" - #ifdef __cplusplus - extern "C" { - #endif -diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt -index 11079f2..dae250b 100644 ---- a/tests/CMakeLists.txt -+++ b/tests/CMakeLists.txt -@@ -6,7 +6,7 @@ SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++14 -g -Wl,-z,relro,-z,now") - find_package(GTest CONFIG REQUIRED) - - include_directories(../src/common) -- -+include_directories(../include) - add_executable(serialize_test - ${SRC_DIR}/common/utils.cpp - serialize_test.cpp -diff --git a/tests/logger_test.cpp b/tests/logger_test.cpp -index 2d1f058..107bc1b 100644 ---- a/tests/logger_test.cpp -+++ b/tests/logger_test.cpp -@@ -10,7 +10,7 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - #include --#include "logger.h" -+#include "oeaware/logger.h" - - TEST(Serialize, Logger) - { -diff --git a/tests/safe_queue_test.cpp b/tests/safe_queue_test.cpp -index a0d6aa7..2cc9ba5 100644 ---- a/tests/safe_queue_test.cpp -+++ b/tests/safe_queue_test.cpp -@@ -12,7 +12,7 @@ - #include - #include - #include --#include "safe_queue.h" -+#include "oeaware/safe_queue.h" - - TEST(SafeQueue, TryPop) - { -diff --git a/tests/serialize_test.cpp b/tests/serialize_test.cpp -index e9f444b..13a1d7e 100644 ---- a/tests/serialize_test.cpp -+++ b/tests/serialize_test.cpp -@@ -11,7 +11,7 @@ - ******************************************************************************/ - #include - #include "data_register.h" --#include "utils.h" -+#include "oeaware/utils.h" - - struct TestData { - int a; -diff --git a/tests/utils_test.cpp b/tests/utils_test.cpp -index 03c3bee..1130a7d 100644 ---- a/tests/utils_test.cpp -+++ b/tests/utils_test.cpp -@@ -10,7 +10,7 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - #include --#include "utils.h" -+#include "oeaware/utils.h" - - TEST(SplitString, SplitString) - { -diff --git a/tests/xcall_tune_test.cpp b/tests/xcall_tune_test.cpp -index 0c5333a..fe628a8 100644 ---- a/tests/xcall_tune_test.cpp -+++ b/tests/xcall_tune_test.cpp -@@ -10,7 +10,6 @@ - * See the Mulan PSL v2 for more details. - ******************************************************************************/ - #include --#include "utils.h" - - TEST(XcallTune, ReadConfig) - { --- -2.33.0 - diff --git a/0009-cycles-sample-add-elf-resolve-to-support-d-fot.patch b/0009-cycles-sample-add-elf-resolve-to-support-d-fot.patch deleted file mode 100644 index 18a6c4a..0000000 --- a/0009-cycles-sample-add-elf-resolve-to-support-d-fot.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 5315e7712951014a238e98ab1613e41edc0e8cb9 Mon Sep 17 00:00:00 2001 -From: LHesperus <2639350497@qq.com> -Date: Wed, 4 Dec 2024 19:46:04 +0800 -Subject: [PATCH 4/4] cycles sample add elf resolve to support d-fot - ---- - src/plugin/collect/pmu/pmu_sampling_collector.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/plugin/collect/pmu/pmu_sampling_collector.cpp b/src/plugin/collect/pmu/pmu_sampling_collector.cpp -index 8f8576f..59ba800 100644 ---- a/src/plugin/collect/pmu/pmu_sampling_collector.cpp -+++ b/src/plugin/collect/pmu/pmu_sampling_collector.cpp -@@ -67,6 +67,7 @@ int PmuSamplingCollector::OpenSampling(const oeaware::Topic &topic) - if (topic.topicName == "cycles") { - attr.freq = CYCLES_FREQ; - attr.useFreq = 1; -+ attr.symbolMode = RESOLVE_ELF; - } else { - attr.period = NET_RECEIVE_TRACE_SAMPLE_PERIOD; - } --- -2.33.0 - diff --git a/oeAware-manager-v2.0.0.tar.gz b/oeAware-manager-v2.0.0.tar.gz deleted file mode 100644 index b09136685a2a062ad693ab4b8791cdda0ec468dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187196 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%0AP!=fo*Z5SdH}3JEP7)A_97n2+x&tZ- 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 literal 0 HcmV?d00001 diff --git a/oeAware-manager.spec b/oeAware-manager.spec index 5dd9ae2..32c67d1 100644 --- a/oeAware-manager.spec +++ b/oeAware-manager.spec @@ -1,35 +1,28 @@ Name: oeAware-manager -Version: v2.0.0 -Release: 3 +Version: v2.0.1 +Release: 1 Summary: OeAware is a framework for implementing low-load collection, sensing, and tuning on openEuler. License: MulanPSL2 URL: https://gitee.com/openeuler/%{name} Source0: %{name}-%{version}.tar.gz -Patch1: 0001-remove-old-code.patch -Patch2: 0002-add-data-free-and-fix-unsubscribe-error.patch -Patch3: 0003-fix-failed-to-connect-to-the-sdk-and-command-executi.patch -Patch4: 0004-add-command-verification.patch -Patch5: 0005-modify-C-interface-name-add-enable-count-and-fix-bug.patch -Patch6: 0006-add-one-time-command-collection.patch -Patch7: 0007-fix-bug-free-spe-mem-after-use-data.patch -Patch8: 0008-Adjust-the-header-file-structure.patch -Patch9: 0009-cycles-sample-add-elf-resolve-to-support-d-fot.patch +Patch1: 0001-change-the-folder-permission-to-755-add-oeaware-grou.patch BuildRequires: cmake make gcc-c++ BuildRequires: boost-devel BuildRequires: curl-devel BuildRequires: log4cplus-devel BuildRequires: yaml-cpp-devel -BuildRequires: gtest-devel gmock-devel BuildRequires: libboundscheck %ifarch aarch64 BuildRequires: libkperf libkperf-devel +Requires: libkperf %endif BuildRequires: libnl3 libnl3-devel BuildRequires: numactl-devel BuildRequires: kernel-devel Requires: graphviz yaml-cpp curl log4cplus boost systemd libboundscheck Requires: libnl3 acl +Requires: sysstat Obsoletes: oeAware-collector < v2.0.0 Obsoletes: oeAware-scenario < v2.0.0 @@ -64,17 +57,22 @@ mkdir -p %{buildroot}%{_includedir}/oeaware/data install -dm 0755 %{buildroot}%{_prefix}/lib/smc install -b -m740 ./build/output/plugin/lib/*.so %{buildroot}%{_libdir}/oeAware-plugin/ -install -b -m740 ./build/output/include/oeaware/*.h %{buildroot}%{_includedir}/oeaware -install -b -m740 ./build/output/include/oeaware/data/*.h %{buildroot}%{_includedir}/oeaware/data +install -b -m740 ./build/output/include/oeaware/*.h %{buildroot}%{_includedir}/oeaware +install -b -m740 ./build/output/include/oeaware/data/*.h %{buildroot}%{_includedir}/oeaware/data install -b -m740 ./build/output/sdk/liboeaware-sdk.so %{buildroot}%{_libdir} install -D -m 0640 ./build/output/plugin/lib/thread_scenario.conf %{buildroot}%{_libdir}/oeAware-plugin/ install -D -m 0640 ./build/output/plugin/lib/ub_tune.conf %{buildroot}%{_libdir}/oeAware-plugin/ +install -D -m 0640 ./build/output/plugin/lib/xcall.yaml %{buildroot}%{_libdir}/oeAware-plugin/ install -D -m 0400 ./build/output/plugin/ko/smc_acc.ko %{buildroot}%{_prefix}/lib/smc %preun %systemd_preun oeaware.service %post +if ! grep -q "oeaware:" /etc/group; then + groupadd oeaware + setfacl -m g:oeaware:r /usr/lib64/liboeaware-sdk.so +fi systemctl start oeaware.service chcon -t modules_object_t %{_prefix}/lib/smc/smc_acc.ko >/dev/null 2>&1 exit 0 @@ -85,10 +83,6 @@ if [ "${VERSION}" == "22.03 (LTS-SP4)" ]; then systemctl enable oeaware.service fi -if ! grep -q "oeaware:" /etc/group; then - groupadd oeaware -fi - %files %attr(0750, root, root) %{_bindir}/oeaware %attr(0750, root, root) %{_bindir}/oeawarectl @@ -96,6 +90,7 @@ fi %attr(0644, root, root) %{_unitdir}/oeaware.service %attr(0640, root, root) %{_libdir}/oeAware-plugin/ub_tune.conf %attr(0640, root, root) %{_libdir}/oeAware-plugin/thread_scenario.conf +%attr(0640, root, root) %{_libdir}/oeAware-plugin/xcall.yaml %attr(0400, root, root) %{_prefix}/lib/smc/smc_acc.ko %attr(0440, root, root) %{_libdir}/oeAware-plugin/*.so %attr(0440, root, root) %{_libdir}/liboeaware-sdk.so @@ -105,8 +100,15 @@ fi %attr(0644, root, root) %{_includedir}/oeaware/data/*.h %changelog +* Wed Dec 11 2024 LHesperus -v2.0.1-1 +- add some document +- fix bug : spe period dynamic changes +- fix bug : analysis client not work +- fix bug : cpuburst exit error +- adapt : seep tune , steal task tune, xcall tune + * Fri Dec 6 2024 fly_1997 -v2.0.0-3 -- adjust the header file structure +- adjust the header file structure - fix cycles sample, spe memory free - add one time command collection