| /* |
| * 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: 26. |
| message FtraceConfig { |
| repeated string ftrace_events = 1; |
| repeated string atrace_categories = 2; |
| repeated string atrace_apps = 3; |
| // *Per-CPU* buffer size. |
| optional uint32 buffer_size_kb = 10; |
| optional uint32 drain_period_ms = 11; |
| |
| // 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. |
| 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: |
| // <type>|pid|<prefix>... |
| 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 list of syscalls that should be recorded by sys_{enter,exit} ftrace |
| // events. When empty, all syscalls are recorded. If neither sys_{enter,exit} |
| // are enabled, this setting has no effect. 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; |
| |
| // Caution: under development as of 2023/03/01. |
| // 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 |
| // TODO(b/249050813): reword comment once instance support is stable. |
| optional string instance_name = 25; |
| } |