aboutsummaryrefslogtreecommitdiff
path: root/afdo_tools
diff options
context:
space:
mode:
authorEmma Vukelj <emmavukelj@google.com>2019-07-25 09:45:40 -0700
committerEmma Vukelj <emmavukelj@google.com>2019-07-29 17:15:04 +0000
commite15a4c05e24684592a13ff1f08866be079467228 (patch)
treeab5c0507c90b32f03c45a7402e18e461e3a94d08 /afdo_tools
parent3affd6950df36519d86dee66d049e079665477ec (diff)
downloadtoolchain-utils-e15a4c05e24684592a13ff1f08866be079467228.tar.gz
AFDO-Bisect: Add user documentation
This CL adds a README containing some information about what the script does, what the arguments are, and how to invoke it, for user benefit. BUG=None TEST=None Change-Id: I909c75e35545c7049b030fde2d080f6466addabe Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1718885 Reviewed-by: Caroline Tice <cmtice@chromium.org> Tested-by: Emma Vukelj <emmavukelj@google.com>
Diffstat (limited to 'afdo_tools')
-rw-r--r--afdo_tools/bisection/README.md71
1 files changed, 71 insertions, 0 deletions
diff --git a/afdo_tools/bisection/README.md b/afdo_tools/bisection/README.md
new file mode 100644
index 00000000..558b2ef0
--- /dev/null
+++ b/afdo_tools/bisection/README.md
@@ -0,0 +1,71 @@
+# `afdo_prof_analysis.py`
+
+`afdo_prof_analysis.py` is the main script and entrypoint for this AFDO profile
+analysis tool. This tool attempts to determine which part of a "bad" profile is
+bad. It does this using several analysis techniques which iterate over provided
+good and bad profiles to isolate the problematic portion of the bad profile.
+Goodness and badness are determined by the user, by passing a user-provided
+bash script. If the program runs successfully to completion, results will be
+output to the path specified by `analysis_output_file` as a JSON with the
+following keys:
+
+* `seed`: Float, the seed to randomness for this analysis
+* `bisect_results`: a sub-JSON with the following keys:
+ + `ranges`: 2d list, where each element is a list of functions that are
+ problematic in conjunction with one another.
+ + `individuals`: individual functions with a bad profile
+* `good_only_functions`: Boolean: is the bad profile just missing some
+ function profiles (that only the good profile has?)
+* `bad_only_functions`: Boolean: does the bad profile have extra function
+ profiles (i.e. the good profile doesn't have these functions) causing
+ bad-ness?
+
+## Resuming
+
+`afdo_prof_analysis.py` offers the ability to resume profile analysis in case
+it was interrupted and the user does not want to restart analysis from the
+beginning. On every iteration of the analysis, it saves state to disk (as
+specified by the `state_file` flag). By default the tool will resume from this
+state file, and this behavior can be disabled by providing the `no_resume` flag
+when running the script.
+
+## Usage
+
+### Example Invocation
+ `python afdo_prof_analysis.py --good_prof good.txt --bad_prof bad.txt
+ --external_decider profile_test.sh --analysis_output_file afdo_results.json`
+
+### Required flags:
+
+ * `good_prof`: A "good" text-based AFDO profile as outputted by
+ bin/llvm-profdata (within an LLVM build).
+ * `bad_prof`: A "bad" text-based AFDO profile as outputted by
+ bin/llvm-profdata (within an LLVM build).
+ * `external_decider`: A user-provided bash script that, given a text-based
+ AFDO profile as above, has one of the following exit codes:
+ + 0: The given profile is GOOD.
+ + 1: The given profile is BAD.
+ + 125: The goodness of the given profile cannot be accurately determined by
+ the benchmarking script.
+ + 127: Something went wrong while running the benchmarking script, no
+ information about the profile (and this result will cause analysis to abort).
+ * `analysis_output_file`: The path of a file to which to write the output.
+ analysis results.
+
+### Optional flags:
+
+Note that these are all related to the state-saving feature which is
+described above in "Resuming", so feel free to return to this later.
+ * `state_file`: An explicit path for saving/restoring intermediate state.
+ Defaults to `$(pwd)/afdo_analysis_state.json`.
+ * `no_resume`: If enabled, the analysis will not attempt to resume from
+ previous state; instead, it will start from the beginning. Defaults to
+ False, i.e. by default will always try to resume from previous state if
+ possible.
+ * `remove_state_on_completion`: If enabled, the state file will be removed
+ upon the completion of profile analysis. If disabled, the state file will
+ be renamed to `<state_file_name>.completed.<date>` to prevent reusing this
+ as intermediate state. Defaults to False.
+ * `seed`: A float specifying the seed for randomness. Defaults to seconds
+ since epoch. Note that this can only be passed when --no_resume is True,
+ since otherwise there is ambiguity in which seed to use.