TestEngineering/Performance/Talos/Profiling: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(Created page with "= How to Run Talos in Profiling Mode = When profiling is enabled, we use the [https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profile...")
 
(It seems that this page was copied without removing the original. Based on recent history, the original page is now the most up-to-date.)
Line 1: Line 1:
= How to Run Talos in Profiling Mode =
#REDIRECT [[Buildbot/Talos/Profiling]]
 
When profiling is enabled, we use the [https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler Gecko Profiler] to capture profiles during each Talos run that can then be displayed by Cleopatra. The captured profiles are grouped into zip files, one per Talos test, which are then copied to the upload directory.
 
== On [https://wiki.mozilla.org/Build:TryServer TryServer] ==
 
1. When you push to try, add "mozharness: --spsProfile" after "try: ..." to your commit message. Example:
 
try: -b o -p macosx64,win32,win64 -u none -t all[10.6,10.8,Windows XP,Windows 7,Windows 8] mozharness: --spsProfile
 
2. When the tests finishes and you select the run in treeherder, you'll see links to open the collect profiles in cleopatra. Click those links.
 
[[File:Treeherder_talos_profiling_cleopatra_links.png|845x358px]]
 
== When running Talos locally ==
 
You need to set an upload directory and use the --spsProfile command line parameter with Talos to capture profiles and have them copied into the upload folder. And if you're on Windows and running a build you've compiled yourself, you'll need to produce a crash reporter symbols zip file first. Step by step:
 
1. If you're on Windows and want to profile a Firefox build that you compiled yourself, make sure it contains profiling information and you have a symbols zip for it, by following the [https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler_and_Local_Symbols_on_Windows#Profiling_local_talos_runs directions on MDN].
 
2. Set the upload folder (make sure it exists):
 
export MOZ_UPLOAD_DIR=/home/username/talos/upload
 
3. Run talos with --spsProfile
 
talos -n -d --develop --executablePath ~/work/gecko-dev/obj-x86_64-unknown-linux-gnu/dist/bin/firefox --activeTests ts --spsProfile
# or, for local builds on Windows, add the --symbolsPath:
talos -n -d --develop --executablePath ~/path/to/objdir/dist/bin/firefox --activeTests ts \
  --spsProfile --symbolsPath ~/path/to/objdir/dist/firefox-40.0a1.en-US-win32.crashreporter-symbols.zip
 
4. You will have one zip file per test in your upload folder. See [https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler#Upload_and_Share_the_Profile_to_Cleopatra this page] for info about how to open profiles in cleopatra.
 
= FAQ =
 
== The Talos results with profiling are always higher, so how can I even use this? ==
 
Yes, profiling usually has non-trivial overhead. This is why you might want to try one of these approaches:
 
* Use Talos profiling only when you already know that there is a problem.
* Do a Talos run with profiling on before and after your change and compare those numbers.
* Do a Talos run with profiling off to check if the issue still exists and at the same time do a run with profiling on to get the data from it.
 
== Why are the Windows tests sometimes hanging with profiling on? ==
 
There's a known issue with Talos profiling on Windows. See [https://bugzilla.mozilla.org/show_bug.cgi?id=978585 this bug].
 
== I need to download all the profiles! Help! ==
 
Try this python script:
 
<pre>
import urllib2
import json
from pprint import pprint
import re
from StringIO import StringIO
import gzip
import os
import sys
 
if len(sys.argv) < 2:
  print "usage:" , sys.argv[0] , "<try revision>"
  exit(1)
 
builds = json.loads(urllib2.urlopen('https://tbpl.mozilla.org/php/getRevisionBuilds.php?branch=try&rev='+ sys.argv[1]).read())
 
if len(builds) == 0:
  print "No bulids found for this revision"
  exit(1)
 
i = 0
for build in builds:
  name = build['buildername']
  print i, '/', len(builds), name
  i += 1
  name = name.replace(' ', '_')
  log = gzip.GzipFile(fileobj=StringIO(urllib2.urlopen(build['log']).read())).read()
  zips = re.findall("TinderboxPrint: Uploaded (profile_[a-zA-Z0-9-_]+\.zip) to ([^\n]+)", log)
  for zipp in zips:
    print ' ', zipp[0]
    try:
      os.mkdir(name)
    except OSError:
      pass
    with open(os.path.join(name, zipp[0]), 'w') as out:
      out.write(urllib2.urlopen(zipp[1]).read())
  print
</pre>
* [https://wiki.mozilla.org/Buildbot/Talos/Profiling duplicated & updated from old page]

Revision as of 12:34, 25 May 2018