385 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
| llvm-profdata - Profile data tool
 | |
| =================================
 | |
| 
 | |
| .. program:: llvm-profdata
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| 
 | |
| :program:`llvm-profdata` *command* [*args...*]
 | |
| 
 | |
| DESCRIPTION
 | |
| -----------
 | |
| 
 | |
| The :program:`llvm-profdata` tool is a small utility for working with profile
 | |
| data files.
 | |
| 
 | |
| COMMANDS
 | |
| --------
 | |
| 
 | |
| * :ref:`merge <profdata-merge>`
 | |
| * :ref:`show <profdata-show>`
 | |
| * :ref:`overlap <profdata-overlap>`
 | |
| 
 | |
| .. program:: llvm-profdata merge
 | |
| 
 | |
| .. _profdata-merge:
 | |
| 
 | |
| MERGE
 | |
| -----
 | |
| 
 | |
| SYNOPSIS
 | |
| ^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata merge` [*options*] [*filename...*]
 | |
| 
 | |
| DESCRIPTION
 | |
| ^^^^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata merge` takes several profile data files
 | |
| generated by PGO instrumentation and merges them together into a single
 | |
| indexed profile data file.
 | |
| 
 | |
| By default profile data is merged without modification. This means that the
 | |
| relative importance of each input file is proportional to the number of samples
 | |
| or counts it contains. In general, the input from a longer training run will be
 | |
| interpreted as relatively more important than a shorter run. Depending on the
 | |
| nature of the training runs it may be useful to adjust the weight given to each
 | |
| input file by using the ``-weighted-input`` option.
 | |
| 
 | |
| Profiles passed in via ``-weighted-input``, ``-input-files``, or via positional
 | |
| arguments are processed once for each time they are seen.
 | |
| 
 | |
| 
 | |
| OPTIONS
 | |
| ^^^^^^^
 | |
| 
 | |
| .. option:: --help
 | |
| 
 | |
|  Print a summary of command line options.
 | |
| 
 | |
| .. option:: --output=<output>, -o
 | |
| 
 | |
|  Specify the output file name.  *Output* cannot be ``-`` as the resulting
 | |
|  indexed profile data can't be written to standard output.
 | |
| 
 | |
| .. option:: --weighted-input=<weight,filename>
 | |
| 
 | |
|  Specify an input file name along with a weight. The profile counts of the
 | |
|  supplied ``filename`` will be scaled (multiplied) by the supplied
 | |
|  ``weight``, where ``weight`` is a decimal integer >= 1.
 | |
|  Input files specified without using this option are assigned a default
 | |
|  weight of 1. Examples are shown below.
 | |
| 
 | |
| .. option:: --input-files=<path>, -f
 | |
| 
 | |
|   Specify a file which contains a list of files to merge. The entries in this
 | |
|   file are newline-separated. Lines starting with '#' are skipped. Entries may
 | |
|   be of the form <filename> or <weight>,<filename>.
 | |
| 
 | |
| .. option:: --remapping-file=<path>, -r
 | |
| 
 | |
|   Specify a file which contains a remapping from symbol names in the input
 | |
|   profile to the symbol names that should be used in the output profile. The
 | |
|   file should consist of lines of the form ``<input-symbol> <output-symbol>``.
 | |
|   Blank lines and lines starting with ``#`` are skipped.
 | |
| 
 | |
|   The :doc:`llvm-cxxmap <llvm-cxxmap>` tool can be used to generate the symbol
 | |
|   remapping file.
 | |
| 
 | |
| .. option:: --instr (default)
 | |
| 
 | |
|  Specify that the input profile is an instrumentation-based profile.
 | |
| 
 | |
| .. option:: --sample
 | |
| 
 | |
|  Specify that the input profile is a sample-based profile.
 | |
| 
 | |
|  The format of the generated file can be generated in one of three ways:
 | |
| 
 | |
|  .. option:: --binary (default)
 | |
| 
 | |
|  Emit the profile using a binary encoding. For instrumentation-based profile
 | |
|  the output format is the indexed binary format.
 | |
| 
 | |
|  .. option:: --extbinary
 | |
| 
 | |
|  Emit the profile using an extensible binary encoding. This option can only
 | |
|  be used with sample-based profile. The extensible binary encoding can be
 | |
|  more compact with compression enabled and can be loaded faster than the
 | |
|  default binary encoding.
 | |
| 
 | |
|  .. option:: --text
 | |
| 
 | |
|  Emit the profile in text mode. This option can also be used with both
 | |
|  sample-based and instrumentation-based profile. When this option is used
 | |
|  the profile will be dumped in the text format that is parsable by the profile
 | |
|  reader.
 | |
| 
 | |
|  .. option:: --gcc
 | |
| 
 | |
|  Emit the profile using GCC's gcov format (Not yet supported).
 | |
| 
 | |
| .. option:: --sparse[=true|false]
 | |
| 
 | |
|  Do not emit function records with 0 execution count. Can only be used in
 | |
|  conjunction with -instr. Defaults to false, since it can inhibit compiler
 | |
|  optimization during PGO.
 | |
| 
 | |
| .. option:: --num-threads=<N>, -j
 | |
| 
 | |
|  Use N threads to perform profile merging. When N=0, llvm-profdata auto-detects
 | |
|  an appropriate number of threads to use. This is the default.
 | |
| 
 | |
| .. option:: --failure-mode=[any|all]
 | |
| 
 | |
|  Set the failure mode. There are two options: 'any' causes the merge command to
 | |
|  fail if any profiles are invalid, and 'all' causes the merge command to fail
 | |
|  only if all profiles are invalid. If 'all' is set, information from any
 | |
|  invalid profiles is excluded from the final merged product. The default
 | |
|  failure mode is 'any'.
 | |
| 
 | |
| .. option:: --prof-sym-list=<path>
 | |
| 
 | |
|  Specify a file which contains a list of symbols to generate profile symbol
 | |
|  list in the profile. This option can only be used with sample-based profile
 | |
|  in extbinary format. The entries in this file are newline-separated.
 | |
| 
 | |
| .. option:: --compress-all-sections=[true|false]
 | |
| 
 | |
|  Compress all sections when writing the profile. This option can only be used
 | |
|  with sample-based profile in extbinary format.
 | |
| 
 | |
| .. option:: --use-md5=[true|false]
 | |
| 
 | |
|  Use MD5 to represent string in name table when writing the profile.
 | |
|  This option can only be used with sample-based profile in extbinary format.
 | |
| 
 | |
| .. option:: --gen-partial-profile=[true|false]
 | |
| 
 | |
|  Mark the profile to be a partial profile which only provides partial profile
 | |
|  coverage for the optimized target. This option can only be used with
 | |
|  sample-based profile in extbinary format.
 | |
| 
 | |
| .. option:: --supplement-instr-with-sample=<file>
 | |
| 
 | |
|  Supplement an instrumentation profile with sample profile. The sample profile
 | |
|  is the input of the flag. Output will be in instrumentation format (only works
 | |
|  with -instr).
 | |
| 
 | |
| .. option:: --zero-counter-threshold=<float>
 | |
| 
 | |
|  For the function which is cold in instr profile but hot in sample profile, if
 | |
|  the ratio of the number of zero counters divided by the the total number of
 | |
|  counters is above the threshold, the profile of the function will be regarded
 | |
|  as being harmful for performance and will be dropped.
 | |
| 
 | |
| .. option:: --instr-prof-cold-threshold=<int>
 | |
| 
 | |
|  User specified cold threshold for instr profile which will override the cold
 | |
|  threshold got from profile summary.
 | |
| 
 | |
| .. option:: --suppl-min-size-threshold=<int>
 | |
| 
 | |
|  If the size of a function is smaller than the threshold, assume it can be
 | |
|  inlined by PGO early inliner and it will not be adjusted based on sample
 | |
|  profile.
 | |
| 
 | |
| .. option:: --debug-info=<path>
 | |
| 
 | |
|  Specify the executable or ``.dSYM`` that contains debug info for the raw profile.
 | |
|  When ``-debug-info-correlate`` was used for instrumentation, use this option
 | |
|  to correlate the raw profile.
 | |
| 
 | |
| 
 | |
| EXAMPLES
 | |
| ^^^^^^^^
 | |
| Basic Usage
 | |
| +++++++++++
 | |
| Merge three profiles:
 | |
| 
 | |
| ::
 | |
| 
 | |
|     llvm-profdata merge foo.profdata bar.profdata baz.profdata -output merged.profdata
 | |
| 
 | |
| Weighted Input
 | |
| ++++++++++++++
 | |
| The input file ``foo.profdata`` is especially important, multiply its counts by 10:
 | |
| 
 | |
| ::
 | |
| 
 | |
|     llvm-profdata merge --weighted-input=10,foo.profdata bar.profdata baz.profdata --output merged.profdata
 | |
| 
 | |
| Exactly equivalent to the previous invocation (explicit form; useful for programmatic invocation):
 | |
| 
 | |
| ::
 | |
| 
 | |
|     llvm-profdata merge --weighted-input=10,foo.profdata --weighted-input=1,bar.profdata --weighted-input=1,baz.profdata --output merged.profdata
 | |
| 
 | |
| .. program:: llvm-profdata show
 | |
| 
 | |
| .. _profdata-show:
 | |
| 
 | |
| SHOW
 | |
| ----
 | |
| 
 | |
| SYNOPSIS
 | |
| ^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata show` [*options*] [*filename*]
 | |
| 
 | |
| DESCRIPTION
 | |
| ^^^^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata show` takes a profile data file and displays the
 | |
| information about the profile counters for this file and
 | |
| for any of the specified function(s).
 | |
| 
 | |
| If *filename* is omitted or is ``-``, then **llvm-profdata show** reads its
 | |
| input from standard input.
 | |
| 
 | |
| OPTIONS
 | |
| ^^^^^^^
 | |
| 
 | |
| .. option:: --all-functions
 | |
| 
 | |
|  Print details for every function.
 | |
| 
 | |
| .. option:: --counts
 | |
| 
 | |
|  Print the counter values for the displayed functions.
 | |
| 
 | |
| .. option:: --function=<string>
 | |
| 
 | |
|  Print details for a function if the function's name contains the given string.
 | |
| 
 | |
| .. option:: --help
 | |
| 
 | |
|  Print a summary of command line options.
 | |
| 
 | |
| .. option:: --output=<output>, -o
 | |
| 
 | |
|  Specify the output file name.  If *output* is ``-`` or it isn't specified,
 | |
|  then the output is sent to standard output.
 | |
| 
 | |
| .. option:: --instr (default)
 | |
| 
 | |
|  Specify that the input profile is an instrumentation-based profile.
 | |
| 
 | |
| .. option:: --text
 | |
| 
 | |
|  Instruct the profile dumper to show profile counts in the text format of the
 | |
|  instrumentation-based profile data representation. By default, the profile
 | |
|  information is dumped in a more human readable form (also in text) with
 | |
|  annotations.
 | |
| 
 | |
| .. option:: --topn=<n>
 | |
| 
 | |
|  Instruct the profile dumper to show the top ``n`` functions with the
 | |
|  hottest basic blocks in the summary section. By default, the topn functions
 | |
|  are not dumped.
 | |
| 
 | |
| .. option:: --sample
 | |
| 
 | |
|  Specify that the input profile is a sample-based profile.
 | |
| 
 | |
| .. option:: --memop-sizes
 | |
| 
 | |
|  Show the profiled sizes of the memory intrinsic calls for shown functions.
 | |
| 
 | |
| .. option:: --value-cutoff=<n>
 | |
| 
 | |
|  Show only those functions whose max count values are greater or equal to ``n``.
 | |
|  By default, the value-cutoff is set to 0.
 | |
| 
 | |
| .. option:: --list-below-cutoff
 | |
| 
 | |
|  Only output names of functions whose max count value are below the cutoff
 | |
|  value.
 | |
| 
 | |
| .. option:: --showcs
 | |
| 
 | |
|  Only show context sensitive profile counts. The default is to filter all
 | |
|  context sensitive profile counts.
 | |
| 
 | |
| .. option:: --show-prof-sym-list=[true|false]
 | |
| 
 | |
|  Show profile symbol list if it exists in the profile. This option is only
 | |
|  meaningful for sample-based profile in extbinary format.
 | |
| 
 | |
| .. option:: --show-sec-info-only=[true|false]
 | |
| 
 | |
|  Show basic information about each section in the profile. This option is
 | |
|  only meaningful for sample-based profile in extbinary format.
 | |
| 
 | |
| .. program:: llvm-profdata overlap
 | |
| 
 | |
| .. _profdata-overlap:
 | |
| 
 | |
| OVERLAP
 | |
| -------
 | |
| 
 | |
| SYNOPSIS
 | |
| ^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata overlap` [*options*] [*base profile file*] [*test profile file*]
 | |
| 
 | |
| DESCRIPTION
 | |
| ^^^^^^^^^^^
 | |
| 
 | |
| :program:`llvm-profdata overlap` takes two profile data files and displays the
 | |
| *overlap* of counter distribution between the whole files and between any of the
 | |
| specified functions.
 | |
| 
 | |
| In this command, *overlap* is defined as follows:
 | |
| Suppose *base profile file* has the following counts:
 | |
| {c1_1, c1_2, ..., c1_n, c1_u_1, c2_u_2, ..., c2_u_s},
 | |
| and *test profile file* has
 | |
| {c2_1, c2_2, ..., c2_n, c2_v_1, c2_v_2, ..., c2_v_t}.
 | |
| Here c{1|2}_i (i = 1 .. n) are matched counters and c1_u_i (i = 1 .. s) and
 | |
| c2_v_i (i = 1 .. v) are unmatched counters (or counters only existing in)
 | |
| *base profile file* and *test profile file*, respectively.
 | |
| Let sum_1 = c1_1 + c1_2 +  ... + c1_n +  c1_u_1 + c2_u_2 + ... + c2_u_s, and
 | |
| sum_2 = c2_1 + c2_2 + ... + c2_n + c2_v_1 + c2_v_2 + ... + c2_v_t.
 | |
| *overlap* = min(c1_1/sum_1, c2_1/sum_2) + min(c1_2/sum_1, c2_2/sum_2) + ...
 | |
| + min(c1_n/sum_1, c2_n/sum_2).
 | |
| 
 | |
| The result overlap distribution is a percentage number, ranging from 0.0% to
 | |
| 100.0%, where 0.0% means there is no overlap and 100.0% means a perfect
 | |
| overlap.
 | |
| 
 | |
| Here is an example, if *base profile file* has counts of {400, 600}, and
 | |
| *test profile file* has matched counts of {60000, 40000}. The *overlap* is 80%.
 | |
| 
 | |
| OPTIONS
 | |
| ^^^^^^^
 | |
| 
 | |
| .. option:: --function=<string>
 | |
| 
 | |
|  Print details for a function if the function's name contains the given string.
 | |
| 
 | |
| .. option:: --help
 | |
| 
 | |
|  Print a summary of command line options.
 | |
| 
 | |
| .. option:: --output=<output>, -o
 | |
| 
 | |
|  Specify the output file name.  If *output* is ``-`` or it isn't specified,
 | |
|  then the output is sent to standard output.
 | |
| 
 | |
| .. option:: --value-cutoff=<n>
 | |
| 
 | |
|  Show only those functions whose max count values are greater or equal to ``n``.
 | |
|  By default, the value-cutoff is set to max of unsigned long long.
 | |
| 
 | |
| .. option:: --cs
 | |
| 
 | |
|  Only show overlap for the context sensitive profile counts. The default is to show
 | |
|  non-context sensitive profile counts.
 | |
| 
 | |
| EXIT STATUS
 | |
| -----------
 | |
| 
 | |
| :program:`llvm-profdata` returns 1 if the command is omitted or is invalid,
 | |
| if it cannot read input files, or if there is a mismatch between their data.
 |