1
0
mirror of https://github.com/DataDog/go-profiler-notes.git synced 2025-07-15 23:54:16 +02:00
Files
go-profiler-notes/bench/analysis.ipynb

144 lines
139 KiB
Plaintext
Raw Permalink Normal View History

2021-02-03 11:16:38 +01:00
{
"cells": [
{
"cell_type": "code",
2021-02-05 10:44:43 +01:00
"execution_count": 1,
2021-02-03 11:16:38 +01:00
"id": "wound-burns",
"metadata": {},
"outputs": [],
"source": [
"from plotnine import *\n",
"import plotnine as plotnine\n",
"import pandas as pd\n",
"import math"
]
},
{
"cell_type": "code",
2021-02-03 15:06:19 +01:00
"execution_count": 194,
"id": "separated-foundation",
"metadata": {},
"outputs": [],
"source": [
"df = pd.concat([\n",
" pd.read_csv('block_linux_x86_64.csv'),\n",
" pd.read_csv('block_bufchan_linux_x86_64.csv'),\n",
"])\n",
"df['workload'] = [\n",
" r['workload'] if r['workload'] != 'chan' else 'chan(cap={})'.format(r['bufsize'])\n",
" for _, r in df.iterrows()\n",
"]\n",
"df['blockprofilerate'] = [('10$^{'+str(int(math.log10(x)))+'}$') if x > 1 else str(x) for x in df['blockprofilerate']]\n",
"\n",
"compare = df.groupby(['blockprofilerate', 'workload']).median()\n",
"# calculate overhead compared to blockprofilerate=0 for same workload\n",
"compare['overhead'] = [\n",
" (x['ms'] / compare.loc['0'].loc[x['workload']]['ms'] - 1) * 100\n",
" for _, x in compare.reset_index().iterrows()\n",
"]\n",
"compare = compare.reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 201,
2021-02-03 11:16:38 +01:00
"id": "viral-baking",
"metadata": {},
"outputs": [
{
"data": {
2021-02-03 15:06:19 +01:00
"image/png": "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
2021-02-03 11:16:38 +01:00
"text/plain": [
2021-02-03 15:06:19 +01:00
"<Figure size 1200x1000 with 3 Axes>"
2021-02-03 11:16:38 +01:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
2021-02-03 15:06:19 +01:00
"<ggplot: (335455735)>"
2021-02-03 11:16:38 +01:00
]
},
2021-02-03 15:06:19 +01:00
"execution_count": 201,
2021-02-03 11:16:38 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2021-02-03 15:06:19 +01:00
"plotnine.options.figure_size = (12, 10)\n",
2021-02-03 11:16:38 +01:00
"\n",
"def plot_title(df):\n",
" return (\n",
" 'median runtime.SetBlockProfileRate() overhead on artificial pathological workloads\\n\\n' +\n",
2021-02-03 11:22:16 +01:00
" 'os={} cpu={} go={} goroutines={} stackdepth={} ops={}'.format(\n",
" # TODO(fg) don't hard code environment\n",
" 'linux (docker for mac)',\n",
2021-02-03 11:16:38 +01:00
" 'i7-9750H',\n",
2021-02-03 11:22:16 +01:00
" '1.15.7',\n",
2021-02-03 11:16:38 +01:00
" val_range(df, 'goroutines'),\n",
" val_range(df, 'depth'),\n",
2021-02-03 15:06:19 +01:00
"# val_range(df, 'bufsize'),\n",
2021-02-03 11:16:38 +01:00
" val_range(df, 'ops'),\n",
" )\n",
" )\n",
"\n",
"def val_range(df, col):\n",
" min = int(df[col].min())\n",
" max = int(df[col].max())\n",
" return '{}-{}'.format(min, max) if min != max else min\n",
"\n",
"(\n",
"ggplot(df)\n",
"+ aes(x='blockprofilerate',y='ms',ymin=0)\n",
"+ ggtitle(plot_title(compare))\n",
"+ ylab('time (ms)')\n",
"+ xlab('blockprofilerate (ns)')\n",
"+ geom_label(\n",
" aes(label='overhead',color='overhead'),\n",
" data=compare,\n",
" y=0,\n",
" size=9,\n",
" format_string='{:.1f}%'\n",
")\n",
2021-02-03 11:22:16 +01:00
"+ scale_color_gradient(low=\"green\",high=\"red\",name='overhead (%)')\n",
2021-02-03 11:16:38 +01:00
"+ geom_boxplot(outlier_shape='')\n",
2021-02-03 15:06:19 +01:00
"+ facet_wrap('workload', scales='free', ncol=2)\n",
"+ theme(subplots_adjust={'wspace': 0.05, 'hspace': 0.2})\n",
2021-02-03 11:16:38 +01:00
"+ geom_point(color='blue',shape='o',alpha=0.3, size=1)\n",
")"
]
2021-02-03 15:06:19 +01:00
},
{
"cell_type": "code",
"execution_count": null,
"id": "orange-degree",
"metadata": {},
"outputs": [],
"source": []
2021-02-03 11:16:38 +01:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}