/* * Copyright (C) 2017 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; // Next id: 30 message FtraceConfig { // Ftrace events to record, example: "sched/sched_switch". repeated string ftrace_events = 1; // Android-specific event categories: repeated string atrace_categories = 2; repeated string atrace_apps = 3; // Some processes can emit data through atrace or through the perfetto SDK via // the "track_event" data source. For these categories, the SDK will be // preferred, if possible, for this config. repeated string atrace_categories_prefer_sdk = 28; // Size of each per-cpu kernel ftrace ring buffer. // Not guaranteed if there are multiple concurrent tracing sessions, as the // buffers cannot be resized without pausing recording in the kernel. optional uint32 buffer_size_kb = 10; // If set, specifies how often the tracing daemon reads from the kernel ring // buffer. Not guaranteed if there are multiple concurrent tracing sessions. // Leave unset unless you're fine-tuning a local config. optional uint32 drain_period_ms = 11; // If set, the tracing daemon will read kernel ring buffers as soon as // they're filled past this percentage of occupancy. In other words, a value // of 50 means that a read pass is triggered as soon as any per-cpu buffer is // half-full. Not guaranteed if there are multiple concurrent tracing // sessions. // Currently does nothing on Linux kernels below v6.9. // Introduced in: perfetto v48. optional uint32 drain_buffer_percent = 29; // Configuration for compact encoding of scheduler events. When enabled (and // recording the relevant ftrace events), specific high-volume events are // encoded in a denser format than normal. message CompactSchedConfig { // If true, and sched_switch or sched_waking ftrace events are enabled, // record those events in the compact format. // // If the field is unset, the default is: // * perfetto v42.0+: enabled // * before: disabled optional bool enabled = 1; } optional CompactSchedConfig compact_sched = 12; // Optional filter for "ftrace/print" events. // // The filter consists of multiple rules. As soon as a rule matches (the rules // are processed in order), its `allow` field will be used as the outcome: if // `allow` is true, the event will be included in the trace, otherwise it will // be discarded. If an event does not match any rule, it will be allowed by // default (a rule with an empty prefix and allow=false, disallows everything // by default). message PrintFilter { message Rule { // Matches an atrace message of the form: // |pid|... message AtraceMessage { optional string type = 1; optional string prefix = 2; } oneof match { // This rule matches if `prefix` matches exactly with the beginning of // the "ftrace/print" "buf" field. string prefix = 1; // This rule matches if the "buf" field contains an atrace-style print // message as specified in `atrace_msg`. AtraceMessage atrace_msg = 3; } optional bool allow = 2; } repeated Rule rules = 1; } optional PrintFilter print_filter = 22; // Enables symbol name resolution against /proc/kallsyms. // It requires that either traced_probes is running as root or that // kptr_restrict has been manually lowered. // It does not disclose KASLR, symbol addresses are mangled. optional bool symbolize_ksyms = 13; // When symbolize_ksyms=true, determines whether the traced_probes daemon // should keep the symbol map in memory (and reuse it for future tracing // sessions) or clear it (saving memory) and re-create it on each tracing // session (wasting cpu and wall time). // The tradeoff is roughly: // KSYMS_RETAIN: pay a fixed ~1.2 MB cost after the first trace. // KSYMS_CLEANUP_ON_STOP: pay a ~300-500ms cost when starting each trace. // Default behavior: KSYMS_CLEANUP_ON_STOP. enum KsymsMemPolicy { KSYMS_UNSPECIFIED = 0; KSYMS_CLEANUP_ON_STOP = 1; KSYMS_RETAIN = 2; } optional KsymsMemPolicy ksyms_mem_policy = 17; // By default the kernel symbolizer is lazily initialized on a deferred task // to reduce ftrace's time-to-start-recording. Unfortunately that makes // ksyms integration tests hard. This flag forces the kernel symbolizer to be // initialized synchronously on the data source start and hence avoiding // timing races in tests. // DEPRECATED in v28 / Android U. This is now the default behavior, setting it // to true is a no-op. optional bool initialize_ksyms_synchronously_for_testing = 14 [deprecated = true]; // When this boolean is true AND the ftrace_events contains "kmem/rss_stat", // this option causes traced_probes to enable the "kmem/rss_stat_throttled" // event instead if present, and fall back to "kmem/rss_stat" if not present. // The historical context for this is the following: // - Up to Android S (12), the rss_stat was internally throttled in its // kernel implementation. // - A change introduced in the kernels after S has introduced a new // "rss_stat_throttled" making the original "rss_stat" event unthrottled // (hence very spammy). // - Not all Android T/13 devices will receive a new kernel though, hence we // need to deal with both cases. // For more context: go/rss-stat-throttled. optional bool throttle_rss_stat = 15; // If true, avoid enabling events that aren't statically known by // traced_probes. Otherwise, the default is to emit such events as // GenericFtraceEvent protos. // Prefer to keep this flag at its default. This was added for Android // tracing, where atrace categories and/or atrace HAL requested events can // expand to events that aren't of interest to the tracing user. // Introduced in: Android T. optional bool disable_generic_events = 16; // The subset of syscalls to record. To record all syscalls, leave this unset // and add "ftrace_events: raw_syscalls/sys_{enter,exit}" to the config. // * before perfetto v43, requires the config to also enable // raw_syscalls/sys_{enter,exit}. // * perfetto v43+ does the right thing if you set only this field. // Example: ["sys_read", "sys_open"]. // Introduced in: Android U. repeated string syscall_events = 18; // If true, enable the "function_graph" kernel tracer that emits events // whenever a kernel function is entered and exited // (funcgraph_entry/funcgraph_exit). // Notes on use: // * Requires |symbolize_ksyms| for function name resolution. // * Use |function_filters| or |function_graph_roots| to constrain the traced // set of functions, otherwise the event bandwidth will be too high for // practical use. // * The data source might be rejected if there is already a concurrent // ftrace data source that does not use function graph itself, as we do not // support switching kernel tracers mid-trace. // * Requires a kernel compiled with CONFIG_FUNCTION_GRAPH_TRACER. This is // enabled if "cat /sys/kernel/tracing/available_tracers" includes // "function_graph". // Android: // * Available only on debuggable builds. // * Introduced in: Android U. optional bool enable_function_graph = 19; // Constrains the set of functions traced when |enable_function_graph| is // true. Supports globs, e.g. "sched*". You can specify multiple filters, // in which case all matching functions will be traced. See kernel // documentation on ftrace "set_ftrace_filter" file for more details. // Android: // * Available only on debuggable builds. // * Introduced in: Android U. repeated string function_filters = 20; // If |enable_function_graph| is true, trace this set of functions *and* all // of its callees. Supports globs. Can be set together with // |function_filters|, in which case only callees matching the filter will be // traced. If setting both, you most likely want all roots to also be // included in |function_filters|. // Android: // * Available only on debuggable builds. // * Introduced in: Android U. repeated string function_graph_roots = 21; // If true, does not clear ftrace buffers before the start of the program. // This makes sense only if this is the first ftrace data source instance // created after the daemon has been started. Can be useful for gathering boot // traces, if ftrace has been separately configured (e.g. via kernel // commandline). optional bool preserve_ftrace_buffer = 23; // If true, overrides the default timestamp clock and uses a raw hardware // based monotonic clock for getting timestamps. // * Introduced in: Android U. optional bool use_monotonic_raw_clock = 24; // If |instance_name| is not empty, then attempt to use that tracefs instance // for event recording. Normally, this means // `/sys/kernel/tracing/instances/$instance_name`. // // The name "hyp" is reserved. // // The instance must already exist, the tracing daemon *will not* create it // for you as it typically doesn't have such permissions. // Only a subset of features is guaranteed to work with non-default instances, // at the time of writing: // * ftrace_events // * buffer_size_kb optional string instance_name = 25; // If true, |buffer_size_kb| is interpreted as a lower bound, allowing the // implementation to choose a bigger buffer size. // // Most configs for perfetto v43+ should simply leave both fields unset. // // If you need a config compatible with a range of perfetto builds and you // used to set a non-default buffer_size_kb, consider setting both fields. // Example: // buffer_size_kb: 4096 // buffer_size_lower_bound: true // On older builds, the per-cpu buffers will be exactly 4 MB. // On v43+, buffers will be at least 4 MB. // In both cases, neither is guaranteed if there are other concurrent // perfetto ftrace sessions, as the buffers cannot be resized without pausing // the recording in the kernel. // Introduced in: perfetto v43. optional bool buffer_size_lower_bound = 27; // Previously drain_buffer_percent, perfetto v43-v47. reserved 26; }