diff --git a/pmu/sampler.cpp b/pmu/sampler.cpp index 10bd5bfccd93b4ba7dafa0dc13acb00d0f9b99ff..a2d483ac1c4a97b03847754424148403f9703dea 100644 --- a/pmu/sampler.cpp +++ b/pmu/sampler.cpp @@ -187,11 +187,15 @@ void KUNPENG_PMU::PerfSampler::ReadRingBuffer(vector &data, vectormmap.tid, event->mmap.filename, event->mmap.addr); + if (symMode != NO_SYMBOL_RESOLVE) { + SymResolverUpdateModule(event->mmap.tid, event->mmap.filename, event->mmap.addr); + } break; } case PERF_RECORD_MMAP2: { - SymResolverUpdateModule(event->mmap2.tid, event->mmap2.filename, event->mmap2.addr); + if (symMode != NO_SYMBOL_RESOLVE) { + SymResolverUpdateModule(event->mmap2.tid, event->mmap2.filename, event->mmap2.addr); + } break; } case PERF_RECORD_FORK: { diff --git a/pmu/spe.cpp b/pmu/spe.cpp index 650d9a4529c6a28b974b8837c7b69d7a3bd91b0a..677c2da68b30b0c69f2dc5e6952657b84452cd88 100644 --- a/pmu/spe.cpp +++ b/pmu/spe.cpp @@ -359,7 +359,7 @@ void Spe::CoreDummyData(struct SpeCoreContext *context, struct ContextSwitchData uint64_t off = dataTail % mpage->data_size; struct perf_event_header *header = (struct perf_event_header *)(ringBuf + off); - if (header->type == PERF_RECORD_MMAP) { + if (header->type == PERF_RECORD_MMAP && symbolMode != NO_SYMBOL_RESOLVE) { struct PerfRecordMmap *sample = (struct PerfRecordMmap *)header; SymResolverUpdateModule(sample->tid, sample->filename, sample->addr); dataTail += header->size; diff --git a/pmu/spe.h b/pmu/spe.h index 71b2d7b2a28484043f0ee4bba73e90d2779aa894..fc937d1ea8b633c19faa64c9cb4663a2dfc428d9 100644 --- a/pmu/spe.h +++ b/pmu/spe.h @@ -128,8 +128,8 @@ struct SampleId { */ class Spe { public: - explicit Spe(int cpu, std::unordered_map> &procMap) - : cpu(cpu), procMap(procMap) + explicit Spe(int cpu, std::unordered_map> &procMap, SymbolMode symMode) + : cpu(cpu), procMap(procMap), symbolMode(symMode) {} ~Spe() @@ -209,6 +209,7 @@ private: const unsigned short READ = 1 << 3; int cpu = 0; + SymbolMode symbolMode = NO_SYMBOL_RESOLVE; SpeContext *ctx = nullptr; unsigned short status = NONE; int dummyFd = 0; diff --git a/pmu/spe_sampler.cpp b/pmu/spe_sampler.cpp index 62c6d7f09c7d5dc54c14b6bb2994d90d071032e2..cfa433de87a6d292855d62a93106e370a38383ac 100644 --- a/pmu/spe_sampler.cpp +++ b/pmu/spe_sampler.cpp @@ -55,7 +55,7 @@ namespace KUNPENG_PMU { return SUCCESS; } - findSpe = speSet.emplace(this->cpu, Spe(this->cpu, procMap)).first; + findSpe = speSet.emplace(this->cpu, Spe(this->cpu, procMap, symMode)).first; auto err = findSpe->second.Open(evt); if (err != SUCCESS) { speSet.erase(this->cpu); @@ -191,4 +191,4 @@ namespace KUNPENG_PMU { } -} // namespace KUNPENG_PMU \ No newline at end of file +} // namespace KUNPENG_PMU