commit | 247110bb9e52876f0412ece815c81ca055a3a898 | [log] [tgz] |
---|---|---|
author | Sami Kyostila <skyostil@google.com> | Wed Feb 14 10:18:45 2018 +0000 |
committer | Sami Kyostila <skyostil@google.com> | Wed Feb 14 10:18:45 2018 +0000 |
tree | 8bdcedb55b942f98adac2ffd03468d68f879756c | |
parent | 6eb0ee5b8c77305ea8da796f76a5199cfdd0c0e6 [diff] |
Improve ftrace scheduling This patch implements the following ftrace scheduling algorithm: main thread [drain] [unblock] /: | post .-----' : | / : v worker #0 [splice ...] [wakeup] [block ............] [splice] : worker #1 [splice ...] [wakeup] [block ........] [splice] : worker #2 [splice ..........................................] : : drain period (100ms) In other words, the splice(2) system call is used to move data from the raw kernel ftrace pipe into an intermediate pipe at a page granularity. This call allows every per-cpu worker to sleep until there is at least one page of data available. When a worker wakes up, it will attempt to move as many pages as possible to its staging pipe (up to 64K, depending on the system's pipe buffer size) in a non-blocking way. After this, it will notify the main thread that data is available. This notification will block the calling worker until the main thread has drained the data. When at least one worker has woken up, we schedule a drain operation on the main thread for the next drain period (every 100ms by default). The drain operation parses ftrace data from the staging pipes of every worker having pending data. After this, each waiting worker is allowed to issue another call to splice(), restarting the cycle. Change-Id: I9657a5d50cd936f190bc57f2c9778019cb7419ab
This project is meant to be built both as part of the Android tree and from a standalone checkout
For internal docs see this page
Android is the platform targeted in the first milestones. Right now Linux desktop and OSX are maintained best-effort.
This project uses Android AOSP Gerrit for code reviews and uses the Google C++ style. Currently targets -std=c++11
.
You can use both git cl upload
from Chromium depot tools or Android repo to upload patches.
git cl
is quite convenient as it supports code auto-formatting via git cl format
.
See https://source.android.com/source/contributing for more details about external contributions and CLA signing.
See docs/build_instructions.md
Continuous build and test coverage is available at perfetto-ci.appspot.com. Trybots: CLs uploaded to gerrit are automatically submitted to TravisCI within one minute and made available on the CI page above. The relevant code lives in the infra/ directory.
$ tools/ninja -C out/default (tracing_unittests | tracing_benchmarks) $ out/default/tracing_unittests --gtest_help
Either connect a device in ADB mode or use the bundled emulator.
To start the emulator:$ tools/run_android_emulator (arm | arm64) &
To run the tests (either on the emulator or physical device):$ tools/run_android_test out/default tracing_unittests