Skip to content

Commit

Permalink
Merge "trace_processor: Expose cpu identifier in Cpu table" into main
Browse files Browse the repository at this point in the history
  • Loading branch information
LalitMaganti authored and Gerrit Code Review committed Sep 26, 2024
2 parents 49db23c + 7c74226 commit 089efac
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/trace_processor/importers/common/args_tracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ class ArgsTracker {
id);
}

BoundInserter AddArgsTo(tables::CpuTable::Id id) {
return AddArgsTo(context_->storage->mutable_cpu_table(), id);
}

// Returns a CompactArgSet which contains the args inserted into this
// ArgsTracker. Requires that every arg in this tracker was inserted for the
// "arg_set_id" column given by |column| at the given |row_number|.
Expand Down
44 changes: 43 additions & 1 deletion src/trace_processor/importers/proto/system_probes_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,21 @@ std::optional<int> FingerprintToSdkVersion(const std::string& fingerprint) {
return VersionStringToSdkVersion(version);
}

struct ArmCpuIdentifier {
uint32_t implementer;
uint32_t architecture;
uint32_t variant;
uint32_t part;
uint32_t revision;
};

struct CpuInfo {
uint32_t cpu = 0;
std::optional<uint32_t> capacity;
std::vector<uint32_t> frequencies;
protozero::ConstChars processor;
// Extend the variant to support additional identifiers
std::variant<std::nullopt_t, ArmCpuIdentifier> identifier = std::nullopt;
};

struct CpuMaxFrequency {
Expand All @@ -136,7 +146,14 @@ SystemProbesParser::SystemProbesParser(TraceProcessorContext* context)
oom_score_adj_id_(context->storage->InternString("oom_score_adj")),
thermal_unit_id_(context->storage->InternString("C")),
gpufreq_id(context->storage->InternString("gpufreq")),
gpufreq_unit_id(context->storage->InternString("MHz")) {
gpufreq_unit_id(context->storage->InternString("MHz")),
arm_cpu_implementer(
context->storage->InternString("arm_cpu_implementer")),
arm_cpu_architecture(
context->storage->InternString("arm_cpu_architecture")),
arm_cpu_variant(context->storage->InternString("arm_cpu_variant")),
arm_cpu_part(context->storage->InternString("arm_cpu_part")),
arm_cpu_revision(context->storage->InternString("arm_cpu_revision")) {
for (const auto& name : BuildMeminfoCounterNames()) {
meminfo_strs_id_.emplace_back(context->storage->InternString(name));
}
Expand Down Expand Up @@ -821,16 +838,30 @@ void SystemProbesParser::ParseCpuInfo(ConstBytes blob) {
uint32_t cpu_id = 0;
for (auto it = packet.cpus(); it; it++, cpu_id++) {
protos::pbzero::CpuInfo::Cpu::Decoder cpu(*it);

CpuInfo current_cpu_info;
current_cpu_info.cpu = cpu_id;
current_cpu_info.processor = cpu.processor();

for (auto freq_it = cpu.frequencies(); freq_it; freq_it++) {
uint32_t current_cpu_frequency = *freq_it;
current_cpu_info.frequencies.push_back(current_cpu_frequency);
}
if (cpu.has_capacity()) {
current_cpu_info.capacity = cpu.capacity();
}

if (cpu.has_arm_identifier()) {
protos::pbzero::CpuInfo::ArmCpuIdentifier::Decoder identifier(
cpu.arm_identifier());

current_cpu_info.identifier = ArmCpuIdentifier{
identifier.implementer(), identifier.architecture(),
identifier.variant(), identifier.part(),
identifier.revision(),
};
}

cpu_infos.push_back(current_cpu_info);
}

Expand Down Expand Up @@ -900,6 +931,17 @@ void SystemProbesParser::ParseCpuInfo(ConstBytes blob) {
cpu_freq_row.freq = frequency;
context_->storage->mutable_cpu_freq_table()->Insert(cpu_freq_row);
}

if (auto* id = std::get_if<ArmCpuIdentifier>(&cpu_info.identifier)) {
context_->args_tracker->AddArgsTo(ucpu)
.AddArg(arm_cpu_implementer,
Variadic::UnsignedInteger(id->implementer))
.AddArg(arm_cpu_architecture,
Variadic::UnsignedInteger(id->architecture))
.AddArg(arm_cpu_variant, Variadic::UnsignedInteger(id->variant))
.AddArg(arm_cpu_part, Variadic::UnsignedInteger(id->part))
.AddArg(arm_cpu_revision, Variadic::UnsignedInteger(id->revision));
}
}
}

Expand Down
8 changes: 8 additions & 0 deletions src/trace_processor/importers/proto/system_probes_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ class SystemProbesParser {
const StringId thermal_unit_id_;
const StringId gpufreq_id;
const StringId gpufreq_unit_id;

// Arm CPU identifier string IDs
const StringId arm_cpu_implementer;
const StringId arm_cpu_architecture;
const StringId arm_cpu_variant;
const StringId arm_cpu_part;
const StringId arm_cpu_revision;

std::vector<StringId> meminfo_strs_id_;
std::vector<StringId> vmstat_strs_id_;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ CREATE PERFETTO VIEW cpu (
-- relative performance of a CPU on a device
-- For details see:
-- https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpu-capacity.txt
capacity UINT
capacity UINT,
-- Extra key/value pairs associated with this cpu.
arg_set_id UINT
) AS
SELECT
id,
Expand All @@ -80,7 +82,8 @@ SELECT
cluster_id,
processor,
machine_id,
capacity
capacity,
arg_set_id
FROM
__intrinsic_cpu
WHERE
Expand Down
5 changes: 4 additions & 1 deletion src/trace_processor/tables/metadata_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@
C('processor', CppString()),
C('machine_id', CppOptional(CppTableId(MACHINE_TABLE))),
C('capacity', CppOptional(CppUint32())),
C('arg_set_id', CppOptional(CppUint32())),
],
tabledoc=TableDoc(
doc='''
Expand All @@ -223,9 +224,11 @@
'''
Capacity of a CPU of a device, a metric which indicates the
relative performance of a CPU on a device
For details see:
For details see:
https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpu-capacity.txt
''',
'arg_set_id':
'''Extra args associated with the CPU''',
}))

RAW_TABLE = Table(
Expand Down

0 comments on commit 089efac

Please sign in to comment.