Skip to content

Instantly share code, notes, and snippets.

@georgf
Created April 25, 2016 16:10
Show Gist options
  • Save georgf/a97f774c2e2fec40edb16657e872032c to your computer and use it in GitHub Desktop.
Save georgf/a97f774c2e2fec40edb16657e872032c to your computer and use it in GitHub Desktop.
Missing child payloads
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Missing child payloads"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Unable to parse whitelist (/home/hadoop/anaconda2/lib/python2.7/site-packages/moztelemetry/bucket-whitelist.json). Assuming all histograms are acceptable.\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: pylab import has clobbered these variables: ['Annotation', 'Figure']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n"
]
}
],
"source": [
"import ujson as json\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np\n",
"import plotly.plotly as py\n",
"from plotly.graph_objs import *\n",
"\n",
"from moztelemetry import get_pings, get_pings_properties, get_one_ping_per_client, get_clients_history, get_records\n",
"\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get pings"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"submission_dates = (\"20160410\", \"20160420\")\n",
"fraction = 0.1\n",
"channel = \"aurora\"\n",
"ss_pings = get_pings(sc,\n",
" app=\"Firefox\",\n",
" channel=channel,\n",
" doc_type=\"saved_session\",\n",
" schema=\"v4\",\n",
" submission_date=submission_dates,\n",
" fraction=fraction)\n",
"main_pings = get_pings(sc,\n",
" app=\"Firefox\",\n",
" channel=channel,\n",
" doc_type=\"main\",\n",
" schema=\"v4\",\n",
" submission_date=submission_dates,\n",
" fraction=fraction)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(275014, 390481)"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"properties = [\"clientId\",\n",
" \"environment/settings/e10sEnabled\",\n",
" \"meta/reason\",\n",
" \"payload/childPayloads\",\n",
" \"payload/keyedHistograms/SUBPROCESS_ABNORMAL_ABORT/content\",\n",
" \"payload/info/sessionLength\"]\n",
"ss_props = get_pings_properties(ss_pings, properties)\n",
"main_props = get_pings_properties(main_pings, properties)\n",
"\n",
"(ss_props.count(), main_props.count())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We only want to look at pings with e10s enabled."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def e10s_enabled(ping):\n",
" return ping.get(\"environment/settings/e10sEnabled\", False)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(225365, 233906)"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ss = ss_props.filter(e10s_enabled)\n",
"main = main_props.filter(e10s_enabled)\\\n",
" .filter(lambda p: p.get(\"meta/reason\") == \"shutdown\")\n",
"\n",
"counts = (ss.count(), main.count())\n",
"counts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now look for pings with missing child payloads."
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(8471, 8955)"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def missing_childPayloads(ping):\n",
" return None == ping.get(\"payload/childPayloads\", None)\n",
"\n",
"ss_missing = ss.filter(missing_childPayloads)\n",
"main_missing = main.filter(missing_childPayloads)\n",
"\n",
"missing_counts = (ss_missing.count(), main_missing.count())\n",
"missing_counts"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.0376, 0.0383)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def relative(sub, full):\n",
" return (round(float(sub[0]) / full[0], 4), round(float(sub[1]) / full[1], 4))\n",
"relative(missing_counts, counts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Does it correlate with crashes?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Maybe missing child payloads correlate with content crashes?"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.6578, 0.6365)"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def has_content_crash(p):\n",
" return 0 < p.get(\"payload/keyedHistograms/SUBPROCESS_ABNORMAL_ABORT/content\", 0)\n",
"\n",
"ss_missing_crash = ss_missing.filter(has_content_crash)\n",
"main_missing_crash = main_missing.filter(has_content_crash)\n",
"\n",
"missing_crash_counts = (ss_missing_crash.count(), main_missing_crash.count())\n",
"relative(missing_crash_counts, missing_counts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, yes, the bulk of the missing child payloads can be blamed on content crashes.\n",
"If the content process crashes, it won't send its Telemetry data to the parent process on shutdown.\n",
"This still leaves >30% of the pings unexplained though."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Correlation to session lengths?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another reason for missing child payloads could simply be short session lengths.\n",
"If a session is too short we might not have spawned child processes or not have finished the Telemetry initialization in the child process etc.\n",
"Let's check that."
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def mapper(p):\n",
" return p.get(\"payload/info/sessionLength\", -1)\n",
"\n",
"ss_other = ss_missing.filter(lambda p: not has_content_crash(p))\\\n",
" .map(mapper)\n",
"main_other = main_missing.filter(lambda p: not has_content_crash(p))\\\n",
" .map(mapper)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ss_series = pd.Series(ss_other.collect())\n",
"main_series = pd.Series(main_other.collect())"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 2132.000000\n",
"mean 13740.070826\n",
"std 60583.189482\n",
"min 0.000000\n",
"25% 21.000000\n",
"50% 113.000000\n",
"75% 2510.000000\n",
"95% 68086.450000\n",
"99% 266094.550000\n",
"max 1102165.000000\n",
"dtype: float64"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ss_series.describe(percentiles=[.25, .5, .75, .95, .99])"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 2499.000000\n",
"mean 15880.789916\n",
"std 81374.056969\n",
"min 0.000000\n",
"25% 21.500000\n",
"50% 140.000000\n",
"75% 3058.500000\n",
"95% 77599.000000\n",
"99% 299766.860000\n",
"max 2925789.000000\n",
"dtype: float64"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"main_series.describe(percentiles=[.25, .5, .75, .95, .99])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, most of the remaining missing child payloads are correlating with short session lengths.\n",
"We can investigate that in more detail for improved data quality, but this doesn't seem to be a big problem right now."
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f74ec320810>"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ngMzMrIj/AR98bXcl1oyHAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f74ec2f4bd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ss_series.plot(kind='hist', bins=10, title=\"Histogram of session length distributions in saved-session\")"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f74d9184890>"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f74d929fad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"main_series.plot(kind='hist', bins=10, title=\"Histogram of session length distributions in shutdown\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
# coding: utf-8
# ### Missing child payloads
# In[2]:
import ujson as json
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import plotly.plotly as py
from plotly.graph_objs import *
from moztelemetry import get_pings, get_pings_properties, get_one_ping_per_client, get_clients_history, get_records
get_ipython().magic(u'pylab inline')
# ### Get pings
# In[44]:
submission_dates = ("20160410", "20160420")
fraction = 0.1
channel = "aurora"
ss_pings = get_pings(sc,
app="Firefox",
channel=channel,
doc_type="saved_session",
schema="v4",
submission_date=submission_dates,
fraction=fraction)
main_pings = get_pings(sc,
app="Firefox",
channel=channel,
doc_type="main",
schema="v4",
submission_date=submission_dates,
fraction=fraction)
# In[45]:
properties = ["clientId",
"environment/settings/e10sEnabled",
"meta/reason",
"payload/childPayloads",
"payload/keyedHistograms/SUBPROCESS_ABNORMAL_ABORT/content",
"payload/info/sessionLength"]
ss_props = get_pings_properties(ss_pings, properties)
main_props = get_pings_properties(main_pings, properties)
(ss_props.count(), main_props.count())
# We only want to look at pings with e10s enabled.
# In[46]:
def e10s_enabled(ping):
return ping.get("environment/settings/e10sEnabled", False)
# In[47]:
ss = ss_props.filter(e10s_enabled)
main = main_props.filter(e10s_enabled) .filter(lambda p: p.get("meta/reason") == "shutdown")
counts = (ss.count(), main.count())
counts
# Now look for pings with missing child payloads.
# In[48]:
def missing_childPayloads(ping):
return None == ping.get("payload/childPayloads", None)
ss_missing = ss.filter(missing_childPayloads)
main_missing = main.filter(missing_childPayloads)
missing_counts = (ss_missing.count(), main_missing.count())
missing_counts
# In[49]:
def relative(sub, full):
return (round(float(sub[0]) / full[0], 4), round(float(sub[1]) / full[1], 4))
relative(missing_counts, counts)
# ### Does it correlate with crashes?
# Maybe missing child payloads correlate with content crashes?
# In[50]:
def has_content_crash(p):
return 0 < p.get("payload/keyedHistograms/SUBPROCESS_ABNORMAL_ABORT/content", 0)
ss_missing_crash = ss_missing.filter(has_content_crash)
main_missing_crash = main_missing.filter(has_content_crash)
missing_crash_counts = (ss_missing_crash.count(), main_missing_crash.count())
relative(missing_crash_counts, missing_counts)
# So, yes, the bulk of the missing child payloads can be blamed on content crashes.
# If the content process crashes, it won't send its Telemetry data to the parent process on shutdown.
# This still leaves >30% of the pings unexplained though.
# ### Correlation to session lengths?
# Another reason for missing child payloads could simply be short session lengths.
# If a session is too short we might not have spawned child processes or not have finished the Telemetry initialization in the child process etc.
# Let's check that.
# In[51]:
def mapper(p):
return p.get("payload/info/sessionLength", -1)
ss_other = ss_missing.filter(lambda p: not has_content_crash(p)) .map(mapper)
main_other = main_missing.filter(lambda p: not has_content_crash(p)) .map(mapper)
# In[52]:
ss_series = pd.Series(ss_other.collect())
main_series = pd.Series(main_other.collect())
# In[53]:
ss_series.describe(percentiles=[.25, .5, .75, .95, .99])
# In[54]:
main_series.describe(percentiles=[.25, .5, .75, .95, .99])
# So, most of the remaining missing child payloads are correlating with short session lengths.
# We can investigate that in more detail for improved data quality, but this doesn't seem to be a big problem right now.
# In[55]:
ss_series.plot(kind='hist', bins=10, title="Histogram of session length distributions in saved-session")
# In[56]:
main_series.plot(kind='hist', bins=10, title="Histogram of session length distributions in shutdown")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment