From 0889c188e17c000d9429fff20e970a2a5de08598 Mon Sep 17 00:00:00 2001 From: "Claudio Maggioni (maggicl)" Date: Tue, 23 Feb 2021 14:27:26 +0000 Subject: [PATCH] Modified status diagream and added graphs to machine time waste --- machine_time_waste/statuses.dio | 2 +- machine_time_waste/statuses_total_time.ipynb | 304 +++++++++++++++++++ 2 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 machine_time_waste/statuses_total_time.ipynb diff --git a/machine_time_waste/statuses.dio b/machine_time_waste/statuses.dio index 34b78615..63fcc39e 100644 --- a/machine_time_waste/statuses.dio +++ b/machine_time_waste/statuses.dio @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/machine_time_waste/statuses_total_time.ipynb b/machine_time_waste/statuses_total_time.ipynb new file mode 100644 index 00000000..a0c053ad --- /dev/null +++ b/machine_time_waste/statuses_total_time.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "german-marathon", + "metadata": {}, + "source": [ + "# Statuses total time\n", + "Sums the times instances spend in one of each states in the diagram saved as\n", + "\"statuses.drawio\". Unknown times are summed as \"unknown\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "boolean-microwave", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import sys\n", + "import pandas\n", + "import seaborn as sns\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "activated-messenger", + "metadata": {}, + "outputs": [], + "source": [ + "# QUEUE = set([\"0-2\", \"1-2\", \"assumptions:\", \"1-1\", \"1-0\"])\n", + "# RESUB = set([\"4-1\", \"4-0\", \"5-1\", \"6-1\", \"7-1\", \"8-1\", \"assumptions:\", \"5-0\", \"6-0\", \"7-0\", \\\n", + "# \"8-0\"])\n", + "# READY = set([\"0-3\", \"2-3\", \"0-9\", \"2-9\", \"9-3\", \"2-7\", \"2-8\", \"9-7\", \"9-8\", \\\n", + "# \"9-9\", \"0-7\", \"0-8\", \"assumptions:\", \"2-0\", \"2-4\", \"9-4\", \"9-1\"])\n", + "# RUN = set([\"3-1\", \"3-10\", \"3-4\", \"3-5\", \"3-6\", \"3-7\", \"3-8\", \"10-5\", \"10-6\", \\\n", + "# \"10-7\", \"10-8\", \"10-4\", \"10-10\", \"10-1\", \"assumptions:\", \"3-0\", \"10-0\", \"3-3\"])\n", + "\n", + "QUEUE = set([\"0-2\", \"1-2\"])\n", + "ENDED = set([\"5-1\", \"6-1\", \"7-1\", \"8-1\"])\n", + "READY = set([\"0-3\", \"0-9\", \"2-3\", \"2-9\", \"9-3\", \"9-9\"])\n", + "RUN = set([\"3-1\", \"3-4\", \"3-5\", \"3-6\", \"3-7\", \"3-8\", \"3-10\", \"10-1\", \"10-4\", \"10-5\", \"10-6\", \"10-7\", \"10-8\", \"10-10\"])\n", + "EVICT = set([\"4-1\", \"4-0\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "novel-commercial", + "metadata": {}, + "outputs": [], + "source": [ + "obj = {}\n", + "\n", + "filename=\"/home/claudio/google_2019/thesis_queries/machine_time_waste/a_state_changes.json\"\n", + "\n", + "with open(filename, 'r') as f:\n", + " obj = json.loads(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "casual-oasis", + "metadata": {}, + "outputs": [], + "source": [ + "data = {'Last termination': [], 'time_type': [], 'time_ms': []}\n", + "totals = {}\n", + "\n", + "def to_name(et):\n", + " if et == 4: \n", + " return 'EVICT'\n", + " elif et == 5: \n", + " return 'FAIL'\n", + " elif et == 6:\n", + " return 'FINISH'\n", + " elif et == 7:\n", + " return 'KILL'\n", + " elif et == 8:\n", + " return 'LOST'\n", + " else:\n", + " return 'NO_TERM'\n", + "\n", + "def add_record(et, tt, time):\n", + " data['Last termination'].append(to_name(et))\n", + " data['time_type'].append(tt)\n", + " data['time_ms'].append(time)\n", + " \n", + " \n", + "for pair in obj[\"data\"]:\n", + " s = set()\n", + " qt = et = rt = xt = vt = ut = 0\n", + " \n", + " # print(\"End type \" + str(pair[0])) \n", + " \n", + " pair[0] = 0 if pair[0] is None else pair[0]\n", + " \n", + " x = pair[1]\n", + " for k in x.keys():\n", + " if k in QUEUE:\n", + " qt += x[k]\n", + " elif k in ENDED:\n", + " et += x[k]\n", + " elif k in READY:\n", + " rt += x[k]\n", + " elif k in RUN:\n", + " xt += x[k]\n", + " elif k in EVICT:\n", + " vt += x[k]\n", + " else:\n", + " s.add(k)\n", + " ut += x[k]\n", + " \n", + " add_record(pair[0], 'queued', qt)\n", + " add_record(pair[0], 'ended', et)\n", + " add_record(pair[0], 'ready', rt)\n", + " add_record(pair[0], 'running', xt)\n", + " add_record(pair[0], 'evicted', vt)\n", + " add_record(pair[0], 'unknown', ut)\n", + " totals[pair[0]] = qt + et + rt + xt + vt + ut\n", + " # print(s) \n", + " \n", + "df = pandas.DataFrame(data, columns=['Last termination', 'time_type', 'time_ms'])" + ] + }, + { + "cell_type": "markdown", + "id": "encouraging-acoustic", + "metadata": {}, + "source": [ + "## Graph 1: Absolute total time spent per status per \"last termination\" type" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "romance-complex", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Last termination time_type time_ms\n", + "0 NO_TERM queued 1.515995e-02\n", + "1 NO_TERM ended 0.000000e+00\n", + "2 NO_TERM ready 3.365563e-02\n", + "3 NO_TERM running 9.511017e-01\n", + "4 NO_TERM evicted 0.000000e+00\n", + "5 NO_TERM unknown 8.273546e-05\n", + "6 EVICT queued 2.199883e-02\n", + "7 EVICT ended 7.361000e-08\n", + "8 EVICT ready 6.672357e-03\n", + "9 EVICT running 8.789100e-01\n", + "10 EVICT evicted 1.503149e-05\n", + "11 EVICT unknown 9.240368e-02\n", + "12 FAIL queued 8.517812e-02\n", + "13 FAIL ended 0.000000e+00\n", + "14 FAIL ready 9.300481e-04\n", + "15 FAIL running 6.596810e-01\n", + "16 FAIL evicted 6.492666e-12\n", + "17 FAIL unknown 2.542109e-01\n", + "18 FINISH queued 3.237908e-01\n", + "19 FINISH ended 1.907057e-07\n", + "20 FINISH ready 2.215952e-02\n", + "21 FINISH running 3.951182e-01\n", + "22 FINISH evicted 3.313964e-11\n", + "23 FINISH unknown 2.589313e-01\n", + "24 KILL queued 3.455137e-02\n", + "25 KILL ended 3.509624e-05\n", + "26 KILL ready 4.547064e-03\n", + "27 KILL running 3.297613e-01\n", + "28 KILL evicted 2.820098e-05\n", + "29 KILL unknown 6.310770e-01\n", + "30 LOST queued 3.119403e-05\n", + "31 LOST ended 1.203386e-01\n", + "32 LOST ready 8.201877e-04\n", + "33 LOST running 2.690978e-04\n", + "34 LOST evicted 1.693104e-13\n", + "35 LOST unknown 8.785409e-01\n" + ] + }, + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Total microseconds')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_theme(style=\"ticks\")\n", + "\n", + "print(df)\n", + "\n", + "g = sns.histplot(df, x=\"Last termination\", weights=\"time_ms\", shrink=.5,\n", + " hue=\"time_type\", multiple=\"dodge\", discrete=True)\n", + "g.set_yscale(\"log\")\n", + "g.set_ylabel(\"Total microseconds\") " + ] + }, + { + "cell_type": "markdown", + "id": "temporal-alabama", + "metadata": {}, + "source": [ + "## Graph 2: Relative total time spent per status per \"last termination\" type\n", + "\n", + "Values are proportions on total for each \"last termination\" type" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "actual-penetration", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/claudio/python-venv/lib/python3.6/site-packages/pandas/core/indexing.py:670: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " iloc._setitem_with_indexer(indexer, value)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for i in [0,4,5,6,7,8]:\n", + " df[\"time_ms\"].loc[df[\"Last termination\"] == to_name(i)] = df[\"time_ms\"].loc[df[\"Last termination\"] == to_name(i)] / totals[i]\n", + "\n", + "h = sns.histplot(df, x=\"Last termination\", weights=\"time_ms\", shrink=.5, common_bins=True,\n", + " hue=\"time_type\", multiple=\"stack\", discrete=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "disabled-relative", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "successful-guidance", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}