blob: f921779d1892df578f0749064fa6b8320089e05a [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto2";
package perfetto.protos;
// Per-CPU kernel buffer stats for the ftrace data source gathered from
// /sys/kernel/tracing/per_cpu/cpuX/stats.
message FtraceCpuStats {
// CPU index.
optional uint64 cpu = 1;
// Number of entries currently in the kernel buffer.
optional uint64 entries = 2;
// Number of events lost in kernel buffers due to overwriting of old events
// before userspace had a chance to drain them. Valid if the buffer is in
// "overwrite" mode, otherwise see |dropped_events|.
optional uint64 overrun = 3;
// This should always be zero. If not the buffer size is way too small or
// something went wrong with the tracer. Quoting the kernel: "number of
// commits failing due to the buffer wrapping around while there are
// uncommitted events, such as during an interrupt storm".
optional uint64 commit_overrun = 4;
// Size of entries currently in the kernel buffer (see |entries|) in bytes.
// The field should be named "bytes", but is misnamed for historical reasons.
// This value has known inaccuracies before Linux v6.6:
// https://github.com/torvalds/linux/commit/45d99ea
optional uint64 bytes_read = 5;
// The timestamp for the oldest event still in the ring buffer.
// Unit: seconds for typical trace clocks (i.e. not tsc/counter).
optional double oldest_event_ts = 6;
// The current timestamp.
// Unit: seconds for typical trace clocks (i.e. not tsc/counter).
optional double now_ts = 7;
// If the kernel buffer has overwrite mode disabled, this will show the number
// of new events that were lost because the buffer was full. This is similar
// to |overrun| but only for the overwrite=false case.
optional uint64 dropped_events = 8;
// The number of events read (consumed) from the buffer by userspace.
optional uint64 read_events = 9;
}
// Errors and kernel buffer stats for the ftrace data source.
message FtraceStats {
enum Phase {
UNSPECIFIED = 0;
START_OF_TRACE = 1;
END_OF_TRACE = 2;
}
// A pair of FtraceStats is written on every trace flush:
// * START_OF_TRACE - stats recorded at the beginning of the trace.
// * END_OF_TRACE - stats recorded during the flush. In other words shortly
// before this packet was written. For simple traces this
// will be once at the end of the trace.
optional Phase phase = 1;
// Per-CPU stats (one entry for each CPU).
repeated FtraceCpuStats cpu_stats = 2;
// When FtraceConfig.symbolize_ksyms = true, this records the number of
// symbols parsed from /proc/kallsyms, whether they have been seen in the
// trace or not. It can be used to debug kptr_restrict or security-related
// errors.
// Note: this will be valid only when phase = END_OF_TRACE. The symbolizer is
// initialized. When START_OF_TRACE is emitted it is not ready yet.
optional uint32 kernel_symbols_parsed = 3;
// The memory used by the kernel symbolizer (KernelSymbolMap.size_bytes()).
optional uint32 kernel_symbols_mem_kb = 4;
// Atrace errors (even non-fatal ones) are reported here. A typical example is
// one or more atrace categories not available on the device.
optional string atrace_errors = 5;
// Ftrace events requested by the config but not present on device.
repeated string unknown_ftrace_events = 6;
// Ftrace events requested by the config and present on device, but which we
// failed to enable due to permissions, or due to a conflicting option
// (currently FtraceConfig.disable_generic_events).
repeated string failed_ftrace_events = 7;
// The data source was configured to preserve existing events in the ftrace
// buffer before the start of the trace.
optional bool preserve_ftrace_buffer = 8;
// Unique errors encountered during reading and parsing of the raw ftrace
// data. Ring buffer ABI related errors will also be recorded in the
// affected FtraceEventBundles with a timestamp.
// Any traces with entries in this field should be investigated, as they
// indicate a bug in perfetto or the kernel.
repeated FtraceParseStatus ftrace_parse_errors = 9;
}
enum FtraceParseStatus {
FTRACE_STATUS_UNSPECIFIED = 0;
// Not written, used for convenience of implementation:
FTRACE_STATUS_OK = 1;
// Issues with reading data out of the ftrace ring buffer:
FTRACE_STATUS_UNEXPECTED_READ_ERROR = 2;
FTRACE_STATUS_PARTIAL_PAGE_READ = 3;
// Ring buffer binary data not matching our understanding of the layout:
FTRACE_STATUS_ABI_INVALID_PAGE_HEADER = 4;
FTRACE_STATUS_ABI_SHORT_EVENT_HEADER = 5;
FTRACE_STATUS_ABI_NULL_PADDING = 6;
FTRACE_STATUS_ABI_SHORT_PADDING_LENGTH = 7;
FTRACE_STATUS_ABI_INVALID_PADDING_LENGTH = 8;
FTRACE_STATUS_ABI_SHORT_TIME_EXTEND = 9;
FTRACE_STATUS_ABI_SHORT_TIME_STAMP = 10;
FTRACE_STATUS_ABI_SHORT_DATA_LENGTH = 11;
FTRACE_STATUS_ABI_ZERO_DATA_LENGTH = 12;
FTRACE_STATUS_ABI_INVALID_DATA_LENGTH = 13;
FTRACE_STATUS_ABI_SHORT_EVENT_ID = 14;
FTRACE_STATUS_ABI_END_OVERFLOW = 15;
// Issues with parsing the event payload:
FTRACE_STATUS_SHORT_COMPACT_EVENT = 16;
FTRACE_STATUS_INVALID_EVENT = 17;
}