Increase kprobes maxactives To handle the case where the pair kprobe/kretprobe is attached to a functions that can be executed concurrently, for example because called at the same time on different CPUs or because the calling process can be preempted and a different process can call the same function, the kernel needs to keep a pool of instances to track the execution stages of every kprobe. The pool size is defined, per kretprobe, by the maxactive parameter. If the maxactive number is too small, the pool may overflow and kretprobe events may not find their matching kprobes, being missed. To solve this issue, increase the default number of maxactives from the default value (from the kernel documentation, if CONFIG_PREEMPT is enabled, the default is max(10, 2*NR_CPUS)) to 1024. This number has been found empirically, to reduce the number of misses for the Android functions binder_ioctl_write_read and binder_ioctl, identified as being problematic for their preemptability and popularity in Android. Test: Visual inspection of /sys/kernel/tracing/kprobe_profile Bug: 359542775 Change-Id: I2cd527174d8a37608f7702d20c244a75371299b4 Signed-off-by: Alessio Balsini <balsini@google.com>
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.