!6 filter so address pmudata
From: @rfwang07 Reviewed-by: @li-yancheng Signed-off-by: @li-yancheng
This commit is contained in:
commit
6f05a263d5
127
0001-filter-so-address-pmudata.patch
Normal file
127
0001-filter-so-address-pmudata.patch
Normal file
@ -0,0 +1,127 @@
|
||||
From bfbec494a98f6b872b7449c4f641d2a94942d84b Mon Sep 17 00:00:00 2001
|
||||
From: rfwang07 <wangrufeng5@huawei.com>
|
||||
Date: Tue, 10 Dec 2024 16:06:31 +0800
|
||||
Subject: [PATCH] filter so address pmudata
|
||||
|
||||
---
|
||||
include/records.h | 1 +
|
||||
src/configs.cc | 4 +++-
|
||||
src/oeaware_plugins/tuner_sysboost.cc | 1 +
|
||||
src/records.cc | 1 +
|
||||
src/startup_opt.cc | 28 +++++++++++++++++++++------
|
||||
5 files changed, 28 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/include/records.h b/include/records.h
|
||||
index c86ce62..df7d39d 100644
|
||||
--- a/include/records.h
|
||||
+++ b/include/records.h
|
||||
@@ -23,6 +23,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
uint64_t processed_samples;
|
||||
std::map<pid_t, Pidinfo*> pids;
|
||||
+ std::map<const char*, bool> modules;
|
||||
} global_records;
|
||||
|
||||
extern global_records records;
|
||||
diff --git a/src/configs.cc b/src/configs.cc
|
||||
index 9aa6d36..ab96d2a 100644
|
||||
--- a/src/configs.cc
|
||||
+++ b/src/configs.cc
|
||||
@@ -128,12 +128,14 @@ std::string get_app_collected_profile_path(AppConfig *app)
|
||||
int parse_app(boost::property_tree::ptree pt, std::string app_name)
|
||||
{
|
||||
std::string full_path;
|
||||
+ char rlpath[1024] = {0};
|
||||
try {
|
||||
full_path = pt.get<std::string>(app_name + ".FULL_PATH");
|
||||
- if (!boost::filesystem::exists(full_path)) {
|
||||
+ if (!get_real_path(full_path.c_str(), rlpath)) {
|
||||
ERROR("Error: File does not exist: " << full_path);
|
||||
return DFOT_ERROR;
|
||||
}
|
||||
+ full_path = std::string(rlpath);
|
||||
} catch (const boost::property_tree::ptree_bad_path &e) {
|
||||
ERROR("FULL_PATH is needed.");
|
||||
return DFOT_ERROR;
|
||||
diff --git a/src/oeaware_plugins/tuner_sysboost.cc b/src/oeaware_plugins/tuner_sysboost.cc
|
||||
index b471ccf..14025fd 100644
|
||||
--- a/src/oeaware_plugins/tuner_sysboost.cc
|
||||
+++ b/src/oeaware_plugins/tuner_sysboost.cc
|
||||
@@ -81,6 +81,7 @@ void SysboostTuner::UpdateData(const DataList &dataList)
|
||||
processing = true;
|
||||
|
||||
int64_t start_ts = get_current_timestamp();
|
||||
+ records.modules.clear();
|
||||
uint64_t total_samples = 0;
|
||||
for (unsigned long long i = 0; i < dataList.len; i++) {
|
||||
PmuSamplingData *data = (PmuSamplingData *)(dataList.data[i]);
|
||||
diff --git a/src/records.cc b/src/records.cc
|
||||
index 1f2cbe3..9b212a6 100644
|
||||
--- a/src/records.cc
|
||||
+++ b/src/records.cc
|
||||
@@ -8,6 +8,7 @@ void reset_records()
|
||||
{
|
||||
records.processed_samples = 0;
|
||||
records.pids.clear();
|
||||
+ records.modules.clear();
|
||||
}
|
||||
|
||||
void debug_print_records()
|
||||
diff --git a/src/startup_opt.cc b/src/startup_opt.cc
|
||||
index 14b4aa4..78cae70 100644
|
||||
--- a/src/startup_opt.cc
|
||||
+++ b/src/startup_opt.cc
|
||||
@@ -92,9 +92,25 @@ void update_app_profile_data(AppConfig *app, struct PmuData &data)
|
||||
// {函数名func: {内存地址addr: 计数count, ...}, ...}
|
||||
auto &funcs = app->profile.funcs;
|
||||
|
||||
+ // 刷新modules记录,避免直接匹配modules字符串,此处的module是relapath路径
|
||||
+ auto symbol = data.stack->symbol;
|
||||
+ if (records.modules.find(symbol->module) == records.modules.end()) {
|
||||
+ records.modules[symbol->module] = false;
|
||||
+ if (strcmp(symbol->module, app->full_path.c_str()) == 0) {
|
||||
+ records.modules[symbol->module] = true;
|
||||
+ } else if (strstr(symbol->module, ".rto") != nullptr &&
|
||||
+ strncmp(symbol->module, app->full_path.c_str(), strlen(app->full_path.c_str())) == 0) {
|
||||
+ records.modules[symbol->module] = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!records.modules[symbol->module]) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
// symbol->codeMapAddr symbol->offset
|
||||
// 如果是BOLT优化过后的二进制的采样数据则只需记录地址和计数
|
||||
- unsigned long addr = data.stack->symbol->codeMapAddr;
|
||||
+ unsigned long addr = symbol->codeMapAddr;
|
||||
|
||||
if (records.pids[data.pid]->instance->version > 0) {
|
||||
if (addrs.find(addr) != addrs.end()) {
|
||||
@@ -108,18 +124,18 @@ void update_app_profile_data(AppConfig *app, struct PmuData &data)
|
||||
// 原始二进制的采样数据,读取地址+符号+偏移
|
||||
if (addrs.find(addr) != addrs.end()) {
|
||||
addrs[addr].count++;
|
||||
- funcs[addrs[addr].name][data.stack->symbol->offset]++;
|
||||
+ funcs[addrs[addr].name][symbol->offset]++;
|
||||
} else {
|
||||
addrs[addr] = AddrInfo();
|
||||
- if (data.stack->symbol->mangleName != nullptr) {
|
||||
- addrs[addr].name = data.stack->symbol->mangleName;
|
||||
+ if (symbol->mangleName != nullptr) {
|
||||
+ addrs[addr].name = symbol->mangleName;
|
||||
} else {
|
||||
auto sym = SymResolverMapAddr(data.pid, addr);
|
||||
addrs[addr].name = sym->mangleName;
|
||||
}
|
||||
- addrs[addr].offset = data.stack->symbol->offset;
|
||||
+ addrs[addr].offset = symbol->offset;
|
||||
addrs[addr].count = 1;
|
||||
- funcs[addrs[addr].name][data.stack->symbol->offset] = 1;
|
||||
+ funcs[addrs[addr].name][symbol->offset] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.39.5 (Apple Git-154)
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
Name: D-FOT
|
||||
Version: v1.0.2
|
||||
Release: 1
|
||||
Release: 2
|
||||
Summary: %{name} is a dynamic feedback-directed optimization tool for openEuler.
|
||||
License: Mulan PSL v2
|
||||
URL: https://gitee.com/openeuler/%{name}
|
||||
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
|
||||
Patch1: 0001-filter-so-address-pmudata.patch
|
||||
|
||||
BuildRequires: cmake make gcc-c++
|
||||
BuildRequires: boost-devel log4cplus-devel numactl-devel libkperf-devel oeAware-manager-devel
|
||||
Requires: log4cplus boost libboundscheck oeAware-manager libkperf llvm-bolt
|
||||
@ -36,6 +38,11 @@ install -D -m 0640 ./configs/dfot.ini ${RPM_BUILD_ROOT}/etc/dfot/
|
||||
%attr(0440,root,root) %{_libdir}/oeAware-plugin/libdfot.so
|
||||
|
||||
%changelog
|
||||
* Wed Dec 11 2024 rfwang07 <wangrufeng5@huawei.com> - v1.0.2-2
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC: filter so address in pmudata
|
||||
|
||||
* Tue Dec 10 2024 rfwang07 <wangrufeng5@huawei.com> - v1.0.2-1
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user