diff options
author | Evelina Dumitrescu <evelinad@google.com> | 2016-09-20 00:35:47 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-02-01 18:13:45 -0800 |
commit | 058aae85dcfb12049ef90137915ec7e981288569 (patch) | |
tree | 87b3a32b13c392939d66fa93105896f5df0736a6 | |
parent | 215fd6f8720cd3f6c691e256e59fcdef4a8ac17b (diff) | |
download | toolchain-utils-058aae85dcfb12049ef90137915ec7e981288569.tar.gz |
user_activity: Added tools for the benchmark profile collection.
The scripts run the Telemetry benchmarks, collects their perf profiles, use
local_cwp to do the profile symbolization and collect the hot
functions and callchains with pprof.
BUG=None
TEST=None
Change-Id: I2170e53d95924f1a3ba134bd62b1eead9e7a3077
Reviewed-on: https://chrome-internal-review.googlesource.com/288517
Reviewed-by: Luis Lozano <llozano@chromium.org>
Reviewed-by: Evelina Dumitrescu <evelinad@google.com>
Commit-Queue: Evelina Dumitrescu <evelinad@google.com>
Tested-by: Evelina Dumitrescu <evelinad@google.com>
Reviewed-on: https://chromium-review.googlesource.com/435923
Commit-Ready: Luis Lozano <llozano@chromium.org>
Tested-by: Luis Lozano <llozano@chromium.org>
-rwxr-xr-x | user_activity_benchmarks/collect_pprof_data.sh | 41 | ||||
-rwxr-xr-x | user_activity_benchmarks/collect_telemetry_profiles.sh | 90 | ||||
-rwxr-xr-x | user_activity_benchmarks/symbolize_profiles.sh | 32 | ||||
-rw-r--r-- | user_activity_benchmarks/telemetry_benchmarks_R52_8350.68 | 113 |
4 files changed, 276 insertions, 0 deletions
diff --git a/user_activity_benchmarks/collect_pprof_data.sh b/user_activity_benchmarks/collect_pprof_data.sh new file mode 100755 index 00000000..5b89f185 --- /dev/null +++ b/user_activity_benchmarks/collect_pprof_data.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Copyright 2016 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# Collects the pprof tree and top outputs. +# All the local_cwp symbolized profiles are taken from the +# local_cwp_results_path. +# The pprof top output is stored in the pprof_top_results_path and the pprof +# tree output is stored in the pprof_tree_results_path. + +set -e + +if [ "$#" -ne 3 ]; then + echo "USAGE: collect_pprof_data.sh local_cwp_results_path " \ + "pprof_top_results_path pprof_tree_results_path" + exit 1 +fi + +readonly LOCAL_CWP_RESULTS_PATH=$1 +readonly PPROF_TOP_RESULTS_PATH=$2 +readonly PPROF_TREE_RESULTS_PATH=$3 +readonly SYMBOLIZED_PROFILES=`ls $LOCAL_CWP_RESULTS_PATH` + +for symbolized_profile in "${SYMBOLIZED_PROFILES[@]}" +do + pprof --top "$LOCAL_CWP_RESULTS_PATH/${symbolized_profile}" > \ + "$PPROF_TOP_RESULTS_PATH/${symbolized_profile}.pprof" + if [ $? -ne 0 ]; then + echo "Failed to extract the pprof top output for the $symbolized_profile." + continue + fi + + pprof --tree "$LOCAL_CWP_RESULTS_PATH/${symbolized_profile}" > \ + "$PPROF_TREE_RESULTS_PATH/${symbolized_profile}.pprof" + if [ $? -ne 0 ]; then + echo "Failed to extract the pprof tree output for the " \ + "$symbolized_profile." + continue + fi +done diff --git a/user_activity_benchmarks/collect_telemetry_profiles.sh b/user_activity_benchmarks/collect_telemetry_profiles.sh new file mode 100755 index 00000000..0583adca --- /dev/null +++ b/user_activity_benchmarks/collect_telemetry_profiles.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +# Copyright 2016 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# Runs the Telemetry benchmarks with AutoTest and collects their perf profiles. +# Reads the benchmark names from the telemetry_benchmark_file. Each benchmark +# should be placed on a separate line. +# The profile results are placed in the results_path. + +set -e + +if [ "$#" -ne 5 ]; then + echo "USAGE: collect_telemetry_profiles.sh board chrome_root_path " \ + "machine_ip results_path telemetry_benchmarks_file" + exit 1 +fi + +# CHROME_ROOT should contain the path with the source of Chrome. This is used by +# AutoTest. +export CHROME_ROOT=$2 + +readonly BOARD=$1 +readonly IP=$3 +readonly RESULTS_PATH=$4 +readonly TELEMETRY_BENCHMARKS_FILE=$5 + +# The following Telemetry benchmarks failed for the R52-8350.68.0 Chrome OS +# version: page_cycler_v2.top_10_mobile, +# page_cycler_v2.basic_oopif, smoothness.tough_filters_cases, +# page_cycler_v2.intl_hi_ru, +# image_decoding.image_decoding_measurement, system_health.memory_mobile, +# memory.top_7_stress, smoothness.tough_path_rendering_cases, +# page_cycler_v2.tough_layout_cases, +# memory.long_running_idle_gmail_background_tbmv2, smoothness.tough_webgl_cases, +# smoothness.tough_canvas_cases, smoothness.tough_texture_upload_cases, +# top_10_mobile_memory_ignition, startup.large_profile.cold.blank_page, +# page_cycler_v2.intl_ar_fa_he, start_with_ext.cold.blank_page, +# start_with_ext.warm.blank_page, page_cycler_v2.intl_ko_th_vi, +# smoothness.scrolling_tough_ad_case, page_cycler_v2_site_isolation.basic_oopif, +# smoothness.tough_scrolling_cases, startup.large_profile.warm.blank_page, +# page_cycler_v2.intl_es_fr_pt-BR, page_cycler_v2.intl_ja_zh, +# memory.long_running_idle_gmail_tbmv2, smoothness.scrolling_tough_ad_cases, +# page_cycler_v2.typical_25, smoothness.tough_webgl_ad_cases, +# smoothness.tough_image_decode_cases. +# +# However, we did not manage to collect the profiles only from the following +# benchmarks: smoothness.tough_filters_cases, +# smoothness.tough_path_rendering_cases, page_cycler_v2.tough_layout_cases, +# smoothness.tough_webgl_cases, smoothness.tough_canvas_cases, +# smoothness.tough_texture_upload_cases, smoothness.tough_scrolling_cases, +# smoothness.tough_webgl_ad_cases, smoothness.tough_image_decode_cases. +# +# Use ./run_benchmark --browser=cros-chrome --remote=$IP list to get the list of +# Telemetry benchmarks. +readonly LATEST_PERF_PROFILE=/tmp/test_that_latest/results-1-telemetry_Crosperf/telemetry_Crosperf/profiling/perf.data + +while read benchmark +do + # TODO(evelinad): We should add -F 4000000 to the list of profiler_args + # arguments because we need to use the same sampling period as the one used + # to collect the CWP user data (4M number of cycles for cycles.callgraph). + test_that --debug --board=${BOARD} --args=" profiler=custom_perf \ + profiler_args='record -g -a -e cycles,instructions' \ + run_local=False test=$benchmark " $IP telemetry_Crosperf + if [ $? -ne 0 ]; then + echo "Failed to run the $benchmark telemetry benchmark with Autotest." + continue + fi + echo "Warning: Sampling period is too high. It should be set to 4M samples." + + cp "$LATEST_PERF_PROFILE" "$RESULTS_PATH/${benchmark}.data" + if [ $? -ne 0 ]; then + echo "Failed to move the perf profile file from $LATEST_PERF_PROFILE to " \ + "$PERF_DATA_RESULTS_PATH/${benchmark}.data for the $benchmark " \ + "telemetry benchmark." + continue + fi + + # The ssh connection should be configured without password. We need to do + # this step because we might run out of disk space if we run multiple + # benchmarks. + ssh root@$IP "rm -rf /usr/local/profilers/*" + if [ $? -ne 0 ]; then + echo "Failed to remove the output files from /usr/local/profilers/ for " \ + "the $benchmark telemetry benchmark." + continue + fi +done < $TELEMETRY_BENCHMARKS_FILE + diff --git a/user_activity_benchmarks/symbolize_profiles.sh b/user_activity_benchmarks/symbolize_profiles.sh new file mode 100755 index 00000000..904cc1ba --- /dev/null +++ b/user_activity_benchmarks/symbolize_profiles.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Copyright 2016 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# Uses local_cwp to do the profile symbolization. +# The profiles that need to be symbolized are placed in the profiles_path. +# The results are placed in the local_cwp_results_path. + +set -e + +if [ "$#" -ne 3 ]; then + echo "USAGE: symbolize_profiles.sh profiles_path local_cwp_binary_path " \ + "local_cwp_results_path" + exit 1 +fi + +readonly PROFILES_PATH=$1 +readonly LOCAL_CWP_BINARY_PATH=$2 +readonly LOCAL_CWP_RESULTS_PATH=$3 +readonly PROFILES=$(ls $PROFILES_PATH) + +for profile in "${PROFILES[@]}" +do + $LOCAL_CWP_BINARY_PATH --output="$LOCAL_CWP_RESULTS_PATH/${profile}.pb.gz" \ + "$PROFILES_PATH/$profile" + if [ $? -ne 0 ]; then + echo "Failed to symbolize the perf profile output with local_cwp for " \ + "$profile." + continue + fi +done diff --git a/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68 b/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68 new file mode 100644 index 00000000..0177dabf --- /dev/null +++ b/user_activity_benchmarks/telemetry_benchmarks_R52_8350.68 @@ -0,0 +1,113 @@ +blink_perf.bindings +blink_perf.canvas +blink_perf.css +blink_perf.dom +blink_perf.events +blink_perf.layout +blink_perf.paint +blink_perf.parser +blink_perf.shadow_dom +blink_perf.svg +blink_style.top_25 +blob_storage.blob_storage +dromaeo.cssqueryjquery +dromaeo.domcoreattr +dromaeo.domcoremodify +dromaeo.domcorequery +dromaeo.domcoretraverse +dromaeo.jslibattrjquery +dromaeo.jslibattrprototype +dromaeo.jslibeventjquery +dromaeo.jslibeventprototype +dromaeo.jslibmodifyjquery +dromaeo.jslibmodifyprototype +dromaeo.jslibstylejquery +dromaeo.jslibstyleprototype +dromaeo.jslibtraversejquery +dromaeo.jslibtraverseprototype +dummy_benchmark.noisy_benchmark_1 +dummy_benchmark.stable_benchmark_1 +image_decoding.image_decoding_measurement +indexeddb_perf +jetstream +jitter +kraken +media.chromeOS4kOnly.tough_video_cases +media.chromeOS.tough_video_cases +media.media_cns_cases +media.mse_cases +media.tough_video_cases_extra +media.tough_video_cases +memory.long_running_idle_gmail_background_tbmv2 +memory.long_running_idle_gmail_tbmv2 +memory.top_7_stress +octane +oilpan_gc_times.tough_animation_cases +oortonline +page_cycler.basic_oopif +page_cycler.intl_hi_ru +page_cycler.intl_ko_th_vi +page_cycler_site_isolation.basic_oopif +page_cycler.typical_25 +page_cycler_v2.basic_oopif +page_cycler_v2.intl_ar_fa_he +page_cycler_v2.intl_es_fr_pt-BR +page_cycler_v2.intl_hi_ru +page_cycler_v2.intl_ja_zh +page_cycler_v2.intl_ko_th_vi +page_cycler_v2_site_isolation.basic_oopif +page_cycler_v2.top_10_mobile +page_cycler_v2.typical_25 +rasterize_and_record_micro.key_mobile_sites_smooth +rasterize_and_record_micro.key_silk_cases +rasterize_and_record_micro.top_25_smooth +robohornet_pro +scheduler.tough_scheduling_cases +service_worker.service_worker_micro_benchmark +service_worker.service_worker +smoothness.gpu_rasterization_and_decoding.image_decoding_cases +smoothness.gpu_rasterization.tough_filters_cases +smoothness.gpu_rasterization.tough_path_rendering_cases +smoothness.image_decoding_cases +smoothness.key_desktop_move_cases +smoothness.scrolling_tough_ad_case +smoothness.scrolling_tough_ad_cases +smoothness.top_25_smooth +smoothness.tough_ad_cases +spaceport +speedometer-ignition +speedometer +startup.cold.blank_page +startup.large_profile.cold.blank_page +startup.large_profile.warm.blank_page +startup.large_profile.warm.blank +startup.warm.blank_page +start_with_ext.cold.blank_page +start_with_ext.warm.blank_page +storage.indexeddb_endure +storage.indexeddb_endure_tracing +sunspider +system_health.memory_mobile +tab_switching.five_blank_pages +tab_switching.top_10 +tab_switching.tough_energy_cases +tab_switching.tough_image_cases +tab_switching.typical_25 +thread_times.tough_compositor_cases +thread_times.tough_scrolling_cases +top_10_mobile_memory_ignition +top_10_mobile_memory +tracing.tracing_with_background_memory_infra +tracing.tracing_with_debug_overhead +v8.browsing_mobile +v8.detached_context_age_in_gc +v8.google +v8.infinite_scroll-ignition_tbmv2 +v8.infinite_scroll_tbmv2 +v8.todomvc-ignition +v8.todomvc +v8.top_25_smooth +webrtc.datachannel +webrtc.getusermedia +webrtc.peerconnection +webrtc.webrtc_smoothness |