Skip to content

Instantly share code, notes, and snippets.

@vitillo
Created December 2, 2015 10:29
Show Gist options
  • Save vitillo/9be6fe6d449defcb960a to your computer and use it in GitHub Desktop.
Save vitillo/9be6fe6d449defcb960a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat_minor": 0, "cells": [{"source": "### E10S Experiment Aurora: Top hang stacks", "cell_type": "markdown", "metadata": {}}, {"source": "[Bug 1222972](https://bugzilla.mozilla.org/show_bug.cgi?id=1222972)\n\nThis analysis compares e10s and non-e10s hang stacks and their frequencies.", "cell_type": "markdown", "metadata": {}}, {"execution_count": 41, "cell_type": "code", "source": "import ujson as json\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport numpy as np\nimport plotly.plotly as py\nimport IPython\nimport functools\n\nfrom __future__ import division\nfrom moztelemetry.spark import get_pings, get_one_ping_per_client, get_pings_properties\nfrom montecarlino import grouped_permutation_test\n\n%pylab inline\nIPython.core.pylabtools.figsize(16, 7)", "outputs": [{"output_type": "stream", "name": "stdout", "text": "Populating the interactive namespace from numpy and matplotlib\n"}, {"output_type": "stream", "name": "stderr", "text": "WARNING: pylab import has clobbered these variables: ['histogram']\n`%matplotlib` prevents importing * from pylab and numpy\n"}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 2, "cell_type": "code", "source": "sc.defaultParallelism", "outputs": [{"execution_count": 2, "output_type": "execute_result", "data": {"text/plain": "16"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "#### Get e10s and non-e10s partitions", "cell_type": "markdown", "metadata": {}}, {"execution_count": 5, "cell_type": "code", "source": "dataset = sqlContext.load(\"s3://telemetry-parquet/e10s-experiment/generationDate=20151117\", \"parquet\")", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "How many pings do we have in each branch?", "cell_type": "markdown", "metadata": {}}, {"execution_count": 6, "cell_type": "code", "source": "dataset.filter(dataset[\"experimentBranch\"] == \"experiment\").count()", "outputs": [{"execution_count": 6, "output_type": "execute_result", "data": {"text/plain": "46749L"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 7, "cell_type": "code", "source": "dataset.filter(dataset[\"experimentBranch\"] == \"control\").count()", "outputs": [{"execution_count": 7, "output_type": "execute_result", "data": {"text/plain": "46716L"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Transform Dataframe to RDD of pings", "cell_type": "markdown", "metadata": {}}, {"execution_count": 8, "cell_type": "code", "source": "def row_2_ping(row):\n ping = {\"payload\": {\"threadHangStats\": json.loads(row.threadHangStats)},\n \"e10s\": True if row.experimentBranch == \"experiment\" else False}\n return ping", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"execution_count": 9, "cell_type": "code", "source": "subset = dataset.rdd.map(row_2_ping)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "### Thread activity", "cell_type": "markdown", "metadata": {}}, {"execution_count": 136, "cell_type": "code", "source": "def chi2_distance(xs, ys, eps = 1e-10, normalize = True):\n histA = xs.sum(axis=0)\n histB = ys.sum(axis=0)\n \n if normalize:\n histA = histA/histA.sum()\n histB = histB/histB.sum()\n \n d = 0.5 * np.sum([((a - b) ** 2) / (a + b + eps)\n for (a, b) in zip(histA, histB)])\n\n return d\n\ndef normalize_(ignore_below, histogram):\n histogram = histogram.ix[65:].set_value(0, histogram.ix[0: 64].sum()).sort_index()\n histogram = histogram.ix[ignore_below:]\n histogram = histogram/max(histogram.sum(), 1)\n return histogram\n\ndef normalize(histograms, ignore_below=0):\n histograms = histograms.map(functools.partial(normalize_, ignore_below))\n return histograms\n\ndef compare_histogram(histogram, e10s, none10s, ignore_below):\n e10s = normalize(e10s, ignore_below)\n none10s = normalize(none10s, ignore_below)\n \n pvalue = grouped_permutation_test(chi2_distance, [e10s, none10s], num_samples=100)\n \n eTotal = e10s.sum()\n nTotal = none10s.sum()\n \n eTotal = 100*eTotal/eTotal.sum()\n nTotal = 100*nTotal/nTotal.sum()\n \n fig = plt.figure()\n fig.subplots_adjust(hspace=0.3)\n \n ax = fig.add_subplot(1, 1, 1)\n ax2 = ax.twinx()\n width = 0.4\n ylim = max(eTotal.max(), nTotal.max())\n \n eTotal.plot(kind=\"bar\", alpha=0.5, color=\"green\", label=\"e10s\", ax=ax, width=width, position=0, ylim=(0, ylim + 1))\n nTotal.plot(kind=\"bar\", alpha=0.5, color=\"blue\", label=\"non e10s\", ax=ax2, width=width, position=1, grid=False, ylim=ax.get_ylim())\n \n ax.legend(ax.get_legend_handles_labels()[0] + ax2.get_legend_handles_labels()[0],\n [\"e10s ({} samples\".format(len(e10s)), \"non e10s ({} samples)\".format(len(none10s))])\n\n plt.title(histogram)\n plt.xlabel(histogram)\n plt.ylabel(\"Frequency %\")\n plt.show()\n \n print \"The probability that the distributions for {} are differing by chance is {:.2f}.\".format(histogram, pvalue)", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"execution_count": 134, "cell_type": "code", "source": "# Manually massage the thread activity histogram into payload/histograms so that\n# get_pings_properties will treat is a histogram.\ndef get_activity(ping):\n for thread in ping[\"payload\"][\"threadHangStats\"]:\n if thread[\"name\"] != \"Gecko\":\n continue\n\n values = {str(int(k) + 1): v for k, v in thread[\"activity\"][\"values\"].iteritems()} \n yield {\"e10s\": ping[\"e10s\"], \"payload\": {\"histograms\": {\"GECKO_THREAD_ACTIVITY_MS\": {\"values\": values}}}}\n\ndef compare_thread_activity(pings, name, ignore_below=0):\n histograms = json.loads(\"\"\"\n {\n \"GECKO_THREAD_ACTIVITY_MS\": {\n \"expires_in_version\": \"default\",\n \"kind\": \"exponential\",\n \"high\": \"2**24\",\n \"n_buckets\": 26,\n \"description\": \"\"\n }\n }\n \"\"\")\n \n histogram = \"payload/histograms/GECKO_THREAD_ACTIVITY_MS\"\n props = get_pings_properties(pings.flatMap(add_activity), [\"e10s\", histogram], additional_histograms=histograms)\n frame = pd.DataFrame(props.collect())\n \n e10s = frame[frame[\"e10s\"] == True]\n none10s = frame[frame[\"e10s\"] == False]\n \n return compare_histogram(histogram, e10s[histogram].dropna(), none10s[histogram].dropna(), ignore_below)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Parent main thread activity with 64ms and below buckets merged into the 0 bucket", "cell_type": "markdown", "metadata": {}}, {"execution_count": 137, "cell_type": "code", "source": "compare_thread_activity(subset, \"Gecko\", 0)", "outputs": [{"output_type": "display_data", "data": {"image/png": "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\n", "text/plain": "<matplotlib.figure.Figure at 0x7f7b51e5e590>"}, "metadata": {}}, {"output_type": "stream", "name": "stdout", "text": "The probability that the distributions for payload/histograms/GECKO_THREAD_ACTIVITY_MS are differing by chance is 0.00.\n"}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Parent main thread activity with sub-128ms buckets ignored completely", "cell_type": "markdown", "metadata": {}}, {"execution_count": 138, "cell_type": "code", "source": "compare_thread_activity(subset, \"Gecko\", 128)", "outputs": [{"output_type": "display_data", "data": {"image/png": "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\ngg==\n", "text/plain": "<matplotlib.figure.Figure at 0x7f7b5a5898d0>"}, "metadata": {}}, {"output_type": "stream", "name": "stdout", "text": "The probability that the distributions for payload/histograms/GECKO_THREAD_ACTIVITY_MS are differing by chance is 0.00.\n"}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "#### Get top stacks", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "def get_stacks(subset):\n def yield_ping_stacks(ping):\n for thread in ping[\"payload\"][\"threadHangStats\"]:\n if thread[\"name\"] != \"Gecko\":\n continue\n for hang in thread[\"hangs\"]:\n if not hang[\"stack\"]:\n continue\n values = hang[\"histogram\"][\"values\"]\n histogram = pd.Series(values.values(), index=map(int, values.keys())).sort_index()\n min_ms = 100\n over_min_ms_count = histogram[histogram.index > min_ms].sum()\n yield (tuple(hang[\"stack\"]), over_min_ms_count)\n return subset.flatMap(yield_ping_stacks).reduceByKey(lambda a, b: a + b).collectAsMap()", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "we10s_stacks = get_stacks(subset.filter(lambda p: p[\"e10s\"]))", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "ne10s_stacks = get_stacks(subset.filter(lambda p: not p[\"e10s\"]))", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "def group_by_top_frame(stacks):\n total_hits = 0\n top_frames = {}\n for stack, hits in stacks.iteritems():\n stack_top_frame = stack[-1]\n if not stack_top_frame in top_frames:\n top_frames[stack_top_frame] = { \"frame\": stack_top_frame, \"stacks\": [], \"hits\": 0 }\n\n top_frame = top_frames[stack_top_frame]\n\n # Keep stacks sorted by hits.\n top_frame[\"stacks\"].append((stack, hits))\n top_frame[\"stacks\"].sort(key=lambda d: d[1], reverse=True)\n\n top_frame[\"hits\"] += hits\n total_hits += hits\n\n return top_frames, total_hits\n\ndef get_stack_hits(stacks, stack):\n for s, h in stacks:\n if s == stack:\n return h\n return 0", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "we10s_groups, we10s_total_hits = group_by_top_frame(we10s_stacks)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "ne10s_groups, ne10s_total_hits = group_by_top_frame(ne10s_stacks)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "### Top stacks grouped by top frame", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "we10s_sorted_groups = sorted(we10s_groups.values(), key=lambda d: d[\"hits\"], reverse=True)\n\ndef print_e10s_groups(group_count, stack_count):\n for we10s_group in we10s_sorted_groups[0:group_count]:\n ne10s_group = ne10s_groups.get(we10s_group[\"frame\"], {})\n ne10s_stacks = ne10s_group.get(\"stacks\", [])\n ne10s_hits = ne10s_group.get(\"hits\", 0)\n\n print \"{:.2f}% ({:.2f}%): {} ({})\".format(\n 100.0 * we10s_group[\"hits\"] / we10s_total_hits,\n 100.0 * ne10s_hits / ne10s_total_hits,\n we10s_group[\"frame\"],\n we10s_group[\"hits\"])\n for we10s_stack, we10s_stack_hits in we10s_group[\"stacks\"][0:stack_count]:\n ne10s_stack_hits = get_stack_hits(ne10s_stacks, we10s_stack)\n print \" - {:.4f}% ({:.4f}%):\".format(\n 100.0 * we10s_stack_hits / we10s_total_hits,\n 100.0 * ne10s_stack_hits / ne10s_total_hits)\n print \" {}\\n\".format(\"\\n \".join(reversed(we10s_stack)))", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "#### e10s top frames", "cell_type": "markdown", "metadata": {}}, {"source": "The results are in the form: `e10s% (non-e10s%): top frame (total e10s hits)`", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "print_e10s_groups(25, 0)", "outputs": [], "metadata": {"scrolled": false, "collapsed": false, "trusted": true}}, {"source": "#### e10s top stacks of top frames", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "print_e10s_groups(25, 3)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "### Top stacks", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "def print_top_stacks(a_stacks, b_stacks, count):\n from collections import Counter\n a_total_count = sum(a_stacks.values())\n b_total_count = sum(b_stacks.values())\n for a_stack, a_stack_count in Counter(a_stacks).most_common(count):\n b_stack_count = b_stacks.get(a_stack, 0)\n print \"- {:.4f}% ({:.4f}%):\".format(\n 100.0 * a_stack_count / a_total_count,\n 100.0 * b_stack_count / b_total_count)\n print \" {}\\n\".format(\"\\n \".join(reversed(a_stack)))", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"source": "#### e10s stacks", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "print_top_stacks(we10s_stacks, ne10s_stacks, 25)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "#### non-e10s stacks", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "print_top_stacks(ne10s_stacks, we10s_stacks, 25)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}], "nbformat": 4, "metadata": {"kernelspec": {"display_name": "Python 2", "name": "python2", "language": "python"}, "language_info": {"mimetype": "text/x-python", "nbconvert_exporter": "python", "version": "2.7.9", "name": "python", "file_extension": ".py", "pygments_lexer": "ipython2", "codemirror_mode": {"version": 2, "name": "ipython"}}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment