Add sum aggregation feature for cycles event.
This commit is contained in:
parent
7a8650c386
commit
da28554137
96
0003-Add-sum-aggregation-feature-for-cycles-event.patch
Normal file
96
0003-Add-sum-aggregation-feature-for-cycles-event.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
From 4a60eb0b1b90825e874c5fb60bd4b2e8f8285dea Mon Sep 17 00:00:00 2001
|
||||||
|
From: l00822163 <liufeiyang6@huawei.com>
|
||||||
|
Date: Mon, 11 Mar 2024 16:37:14 +0800
|
||||||
|
Subject: [PATCH] Add sum aggregation feature for cycles event. Previously, PMU
|
||||||
|
event counts per line/function are aggregated by MAX operation since some PMU
|
||||||
|
events such as cache miss count requires an estimation of operand count for
|
||||||
|
memory access while SUM operation without the number of operands on that line
|
||||||
|
cannot render an average expression for operand count. However, when we use
|
||||||
|
the number of cycles to evaluate the importance of a function, we can
|
||||||
|
directly add up cycles within the function.
|
||||||
|
|
||||||
|
---
|
||||||
|
instruction_map.cc | 19 +++++++++++++++----
|
||||||
|
profile.cc | 10 +++++++++-
|
||||||
|
symbol_map.cc | 3 +++
|
||||||
|
3 files changed, 27 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/instruction_map.cc b/instruction_map.cc
|
||||||
|
index f460d67..768ab35 100644
|
||||||
|
--- a/instruction_map.cc
|
||||||
|
+++ b/instruction_map.cc
|
||||||
|
@@ -38,11 +38,22 @@ void InstructionMap::BuildPerFunctionInstructionMap(
|
||||||
|
addr2line_->GetInlineStack(addr, &info->source_stack);
|
||||||
|
inst_map_.insert(InstMap::value_type(addr, info));
|
||||||
|
if (info->source_stack.size() > 0) {
|
||||||
|
- symbol_map_->AddSourceCount(name, info->source_stack, 0, 1,
|
||||||
|
- SymbolMap::MAX, std::string(), is_repeat);
|
||||||
|
- for (const auto& event_name : symbol_map_->GetProcessingEventName()) {
|
||||||
|
+ if (symbol_map_->GetProcessingEventName().empty()) {
|
||||||
|
+ // For perf sampling with single PMU event, even if we collect "cycles"
|
||||||
|
+ // info, we will not change operation from "MAX" to "SUM".
|
||||||
|
symbol_map_->AddSourceCount(name, info->source_stack, 0, 1,
|
||||||
|
- SymbolMap::MAX, event_name, is_repeat);
|
||||||
|
+ SymbolMap::MAX, std::string(), is_repeat);
|
||||||
|
+ } else {
|
||||||
|
+ for (const auto& event_name : symbol_map_->GetProcessingEventName()) {
|
||||||
|
+ SymbolMap::Operation op = SymbolMap::MAX;
|
||||||
|
+ if (event_name.find("cycles") == 0) {
|
||||||
|
+ // When we collect "cycles" info by perf, switch aggregation
|
||||||
|
+ // operation from "MAX" to "SUM".
|
||||||
|
+ op = SymbolMap::SUM;
|
||||||
|
+ }
|
||||||
|
+ symbol_map_->AddSourceCount(name, info->source_stack, 0, 1,
|
||||||
|
+ op, event_name, is_repeat);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/profile.cc b/profile.cc
|
||||||
|
index a306562..e563c5e 100644
|
||||||
|
--- a/profile.cc
|
||||||
|
+++ b/profile.cc
|
||||||
|
@@ -146,10 +146,16 @@ void Profile::ProcessPerFunctionProfile(string func_name,
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (info->source_stack.size() > 0) {
|
||||||
|
+ SymbolMap::Operation op = SymbolMap::MAX;
|
||||||
|
+ if (event_address.first.find("cycles") == 0) {
|
||||||
|
+ // When we collect "cycles" info by perf, switch aggregation
|
||||||
|
+ // operation from "MAX" to "SUM".
|
||||||
|
+ op = SymbolMap::SUM;
|
||||||
|
+ }
|
||||||
|
symbol_map_->AddSourceCount(
|
||||||
|
func_name, info->source_stack,
|
||||||
|
address_count.second * info->source_stack[0].DuplicationFactor(), 0,
|
||||||
|
- SymbolMap::MAX, event_address.first, is_repeat);
|
||||||
|
+ op, event_address.first, is_repeat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -165,6 +171,8 @@ void Profile::ProcessPerFunctionProfile(string func_name,
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (info->source_stack.size() > 0) {
|
||||||
|
+ // For perf sampling with single PMU event, even if we collect "cycles"
|
||||||
|
+ // info, we will not change operation from "MAX" to "SUM".
|
||||||
|
symbol_map_->AddSourceCount(
|
||||||
|
func_name, info->source_stack,
|
||||||
|
address_count.second * info->source_stack[0].DuplicationFactor(), 0,
|
||||||
|
diff --git a/symbol_map.cc b/symbol_map.cc
|
||||||
|
index 233bbb2..322439f 100644
|
||||||
|
--- a/symbol_map.cc
|
||||||
|
+++ b/symbol_map.cc
|
||||||
|
@@ -398,6 +398,9 @@ void SymbolMap::AddSourceCount(const string &symbol_name,
|
||||||
|
}
|
||||||
|
} else if (op == SUM) {
|
||||||
|
symbol->pos_counts[offset].count += count;
|
||||||
|
+ if (!event_name.empty()) {
|
||||||
|
+ symbol->event_pos_counts[event_name][offset].count += count;
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
LOG(FATAL) << "op not supported.";
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: autofdo
|
Name: autofdo
|
||||||
Version: 0.19
|
Version: 0.19
|
||||||
Release: 2
|
Release: 3
|
||||||
Summary: A tool to convert perf.data profile to AutoFDO profile
|
Summary: A tool to convert perf.data profile to AutoFDO profile
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
URL: https://github.com/google/autofdo
|
URL: https://github.com/google/autofdo
|
||||||
@ -10,6 +10,7 @@ URL: https://github.com/google/autofdo
|
|||||||
Source: %{name}-%{version}.tar.xz
|
Source: %{name}-%{version}.tar.xz
|
||||||
Patch0: 0001-Multi-event-processing-support.patch
|
Patch0: 0001-Multi-event-processing-support.patch
|
||||||
Patch1: 0002-Arm-spe-parser-support.patch
|
Patch1: 0002-Arm-spe-parser-support.patch
|
||||||
|
Patch2: 0003-Add-sum-aggregation-feature-for-cycles-event.patch
|
||||||
|
|
||||||
BuildRequires: gcc gcc-c++ libtool autoconf automake git elfutils-libelf-devel openssl-devel pkg-config
|
BuildRequires: gcc gcc-c++ libtool autoconf automake git elfutils-libelf-devel openssl-devel pkg-config
|
||||||
Requires: glibc openssl-libs elfutils libgcc libstdc++ zlib
|
Requires: glibc openssl-libs elfutils libgcc libstdc++ zlib
|
||||||
@ -42,6 +43,12 @@ make -j 1
|
|||||||
%exclude %{_bindir}/create_llvm_prof
|
%exclude %{_bindir}/create_llvm_prof
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed May 29 2024 yuzeyang <yuzeyang4@huawei.com> - 0.19-3
|
||||||
|
- Type:enhancement
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Add sum aggregation feature for cycles event
|
||||||
|
|
||||||
* Sun Feb 13 2022 liyancheng <412998149@qq.com> - 0.19-2
|
* Sun Feb 13 2022 liyancheng <412998149@qq.com> - 0.19-2
|
||||||
- Type:enhancement
|
- Type:enhancement
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user