[llvm] [llvm-profgen] Add support for Linux kenrel profile (PR #92831)
Lei Wang via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 5 19:52:32 PDT 2024
================
@@ -355,57 +355,69 @@ PerfReaderBase::create(ProfiledBinary *Binary, PerfInputFile &PerfInput,
PerfInputFile
PerfScriptReader::convertPerfDataToTrace(ProfiledBinary *Binary,
PerfInputFile &File,
- std::optional<uint32_t> PIDFilter) {
+ std::optional<int32_t> PIDFilter) {
StringRef PerfData = File.InputFile;
// Run perf script to retrieve PIDs matching binary we're interested in.
auto PerfExecutable = sys::Process::FindInEnvPath("PATH", "perf");
if (!PerfExecutable) {
exitWithError("Perf not found.");
}
std::string PerfPath = *PerfExecutable;
-
SmallString<128> PerfTraceFile;
sys::fs::createUniquePath("perf-script-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.tmp",
PerfTraceFile, /*MakeAbsolute=*/true);
std::string ErrorFile = std::string(PerfTraceFile) + ".err";
- StringRef ScriptMMapArgs[] = {PerfPath, "script", "--show-mmap-events",
- "-F", "comm,pid", "-i",
- PerfData};
std::optional<StringRef> Redirects[] = {std::nullopt, // Stdin
StringRef(PerfTraceFile), // Stdout
StringRef(ErrorFile)}; // Stderr
- sys::ExecuteAndWait(PerfPath, ScriptMMapArgs, std::nullopt, Redirects);
-
PerfScriptReader::TempFileCleanups.emplace_back(PerfTraceFile);
PerfScriptReader::TempFileCleanups.emplace_back(ErrorFile);
- // Collect the PIDs
- TraceStream TraceIt(PerfTraceFile);
+ // For a kernel perf file, we assume --branch_filter=k is used. So there is
+ // no need for PIDs.
std::string PIDs;
- std::unordered_set<uint32_t> PIDSet;
- while (!TraceIt.isAtEoF()) {
- MMapEvent MMap;
- if (isMMap2Event(TraceIt.getCurrentLine()) &&
- extractMMap2EventForBinary(Binary, TraceIt.getCurrentLine(), MMap)) {
- auto It = PIDSet.emplace(MMap.PID);
- if (It.second && (!PIDFilter || MMap.PID == *PIDFilter)) {
- if (!PIDs.empty()) {
- PIDs.append(",");
+ if (!Binary->isKernel()) {
----------------
wlei-llvm wrote:
How about making this a function parameter and pass it from the caller? thinking this may be useful for other binary to skip the PID passing.
https://github.com/llvm/llvm-project/pull/92831
More information about the llvm-commits
mailing list