diff --git a/evaluation.ipynb b/evaluation.ipynb index 50bdd55..dc0be5e 100644 --- a/evaluation.ipynb +++ b/evaluation.ipynb @@ -23,6 +23,11 @@ { "cell_type": "code", "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "ename": "NameError", @@ -52,17 +57,16 @@ " management_bridge='vmbr4',\n", " management_initial_ip=ipaddress.ip_address('10.21.12.2'),\n", ")" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ "g_st = SpeedTestServer([Interface(IpMethod.Auto4)])\n", @@ -91,62 +95,96 @@ "\n", "# Clean up\n", "runner.teardown()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 60, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ "from itertools import cycle\n", "import matplotlib.pyplot as plt\n", "\n", - "def plot_iperf_results(data, title, events=None, filename=None):\n", - " cycol = cycle('brg')\n", + "def plot_iperf_results(data, title, events=None, filename=None, start_at_zero=True):\n", + " cycol = cycle('brgy')\n", "\n", " fig = plt.figure()\n", " axes = fig.add_axes([0,0,1,1])\n", "\n", - " axes.set_title(title)\n", + " axes.set_title(title, pad=20.0)\n", " axes.set_xlabel('Time (s)')\n", " axes.set_ylabel('Throughput (Mbps)')\n", "\n", " for k, v in data.items():\n", - " x_axis = [(x['sum']['start'] + x['sum']['end'])/2 for x in v['intervals']]\n", - " y_axis = [x['sum']['bits_per_second']/1e6 for x in v['intervals']]\n", + " intervals = [x['sum'] for x in v['intervals'] if not x['sum']['omitted']]\n", + "\n", + " x_axis = [((x['start'] + x['end'])/2) for x in intervals]\n", + " y_axis = [x['bits_per_second']/1e6 for x in intervals]\n", " axes.plot(x_axis, y_axis, next(cycol), label=k)\n", "\n", " legend = axes.legend()\n", "\n", + " if start_at_zero:\n", + " axes.set_ylim(bottom=0)\n", + " axes.set_xlim(left=0)\n", + "\n", " if events is not None:\n", " for k, v in events.items():\n", " axes.axvline(k, linestyle='--', color='grey', ymax=0.92)\n", - " axes.annotate(v, (k, 0.95), xycoords=axes.get_xaxis_transform(), ha='center')\n", + " axes.annotate(v, (k, 1.02), xycoords=axes.get_xaxis_transform(), ha='center')\n", "\n", " if filename is not None:\n", " fig.savefig(filename, bbox_extra_artists=(legend,), bbox_inches='tight', pad_inches=0.3)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 61, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "# Manual results\n", + "# sudo iperf3 -c X.X.X.X -t 30 -O 5 -J\n", + "\n", + "import json\n", + "\n", + "def load_json_from_file(path):\n", + " with open(path, 'r') as f:\n", + " return json.loads(f.read())\n", + "\n", + "One1MBStraight = load_json_from_file('manual/One1MBStraight.json')\n", + "One2MBStraight = load_json_from_file('manual/One2MBStraight.json')\n", + "\n", + "Two1MBAggregate = load_json_from_file('manual/Two1MBAggregate.json')\n", + "Two2MBAggregate = load_json_from_file('manual/Two2MBAggregate.json')\n", + "\n", + "One1MBOne2MBAggregate = load_json_from_file('manual/One1MBOne2MBAggregate.json')\n", + "\n", + "Two2MBAggregateKillOneRecoverOne = load_json_from_file('manual/Two2MBAggregateKillOneRecoverOne.json')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAFrCAYAAAAJo1qOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA9qElEQVR4nO3dd5hU5dnH8e/NLh2kCBoNGlCB0JaliBosKKjYS0wEUVTsxqhJVPCNYjckr7E3eNXYwdiTWGJFDLFQRQQVCyiKVEGQurv3+8czszu7zO7OlpmzzP4+1zXXzJxz5pz7lDn3eZ5THnN3REREJLMaRB2AiIhIfaQELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRUAKWrGRmu5rZOjPLqQOxLDSzIeX0G2Rmi+tSDGb2kZkNqmBcL5nZqbUf5VbTcTPbo5x+k83szHTHUN1pmdn/mNl9FfQvd31Ud5qy7cmNOgDJTma2ENgRKAR+BF4CLnD3dZmYvrt/BbTIxLSyjbv3iH82s6uBPdz95IT+h0UR17bE3W9Mddhky1jqB5WAJZ2OcvcWQF+gP3BF2QHMTAeBIlIvKQFL2rn7N4QScE8orlr8jZktABbEup1lZp+Z2Soz+4eZ7Rzrfo+ZPR0fl5n92cxet2CumR2V0K+hma0wsz5m1jE2ndxYv8lmdp2ZTTWztWb2ipm1S/jtSDNbZGYrzezKSqpsjzCzWWb2g5l9HSvBJPY/JWFcfyzTr6mZPWhm35vZPGDPMv1Hm9k3sRg/MbPBEcSw0MyGmNlQ4H+AE2PV+R8kLMszY58bmNkVsWktM7OHzaxVrF98HZxqZl/F1s0fE6YzwMzeMbPVZrbEzO40s0bJ5rccu5vZ+7Fl8LyZtU0Y95Nm9p2ZrTGzKWaWWKp/0MzuMrMXYsv5PTPbPaH/wWb2cey3dwKW0G+RmfWLfR4Rm78ese9nmNlzsc9Xm9mjla2P8pZxzM/K214lOygBS9qZ2S7A4cCshM7HAnsB3c3sIOBPwK+BnYBFwKTYcH8AepnZaWa2H3AGcKqHZ6g+DCRW2x0OLHH3xOkkOgk4HdgBaARcEouvO3A3MCI2/VbATyuYpR+BkUBr4AjgPDM7NmFc9wCnADsD2wMdEn57FbB77HUoUHwu1cy6AhcAe7p7y1j/hZmMIZG7vwzcCDzh7i3cvXeSwU6LvQ4EdiNU+99ZZph9ga7AYGCsmXWLdS8Efge0A/aJ9T+/nPlNZiQwirDOCoDbE/q9BHQmrOuZwGNlfjsMuAZoA3wG3AAQS3LPEGpr2gGfAwMTfvcWMCj2+QDgC2D/hO9vlQ2yovVRyTJOur1KFnF3vfSq9RchcawDVhMS6t1A01g/Bw5KGPZ+4C8J31sAW4COse97Aati4xmeMNzOwFpgu9j3p4DLYp87xqaTG/s+Gbgi4bfnAy/HPo8FJib0awZsBoakOK+3ArckjGtSQr/mieMi7LCHJvQ/G1gc+7wHsAwYAjSs4vKulRgS1l182KuBR8tMazJwZuzz68D5Cf26xtZdbsI66JDQ/31gWDnzcDHwbMJ3J5wbTTbsZGBcwvfusXnMSTJs69i4WsW+Pwjcl9D/cODj2OeRwLsJ/QxYnDC/ZwD/iH2eD5wZX9aE7bNv2eWWwvoobxkn3V71yp6XSsCSTse6e2t3/5m7n+/uGxL6fZ3weWfCzgsADxdqrSRWCnX39whJw4C/Jwz3LTAV+KWZtQYOY+uSTqLvEj6vp+QirZ0T43H39bHpJ2Vme5nZm2a23MzWAOcSSkvJxvVjmXGV6l9mvj8jJKGrgWVmNsliVfGZiqEaSq272OdcwgV4cUmXu5l1MbN/xaqKfyCUBKtSzVp2HhoC7cwsx8zGmdnnsfEujA2TOO5UtwUvM523gP3MbCcgh7A9DjSzjoSak9lJ4qxsfZSnvBglSygBS1QSm+H6FvhZ/IuZNSdU030T+/4boHFsuMvKjOchQjX0r4B3PJxvrqolJFTRmlnT2PTL8zjwD2AXd28F3EvJecIlwC4J42pWZlyl+gO7Jo7Y3R93930Jy8OBP2c6hjIqay6t1LqLjasAWFrJ7yBUy34MdHb37QjnQq3in5RSdh62ACsIVbfHEGoSWhFK4qQ47rLLzhK/xw6S1gO/Baa4+w+ERHk28B93L0phnGXXh5qkq6eUgKUumAicbmb5ZtaYUBJ6z90XmlkX4HpCkj0FuMzM8hN++xzhKuuLCOeEq+Mp4Cgz+0XsIqCrqXhn3RJY5e4bzWwAYYefOK4jzWzf2LiupfT/7O/A5WbWxsw6EHbkQDgHbGYHxZbBRmADkGyHnrYYklgKdDSz8vYVE4HfmVknM2tByfnMggrGmTgPPwDrzOznwHkp/CbRyWbWPZbQrgWecvfC2Hg3EUqZzWIxpeoFoIeZHW/hAr4LgZ+UGeYtwrn6+PneyWW+l1XZ+qhsGUuW0gqXyLn7a8CVwNOE0sLuwLDYDvBR4M/u/oG7LyCUkh6JJSli1dpPA50IF89UZ/ofEZLQpNj01xHOxW4q5yfnA9ea2VrC+b3EavGPgN8QSqhLgO8J5xDjriFUl34JvAI8ktCvMTCOUIr7jnDxzeUZjqGsJ2PvK81sZpL+D8R+PyU2vo1UnNATXUI4cFgL/B/wRIq/i3uEcD73O6AJIVlCOBBbRKhBmQe8m+oI3X0FoTZlHCGBdyac5kj0FiHJTynne9lxVrY+KlvGkqUsnOIQ2XaZ2Vigi9fSgwxiJbnVhKrRL2tjnCIiZakELNu02L2fZwATajieo8ysWez8803Ah5R/C5CISI0pAcs2y8zOIlxd+pK7J63+q4JjCBcUfUuodhzmqh4SkTRSFbSIiEgEVAIWERGJgBKwiIhIBJSARUREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRUAIWERGJgBKwiIhIBJSARUREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRyI06gFS0a9fOO3bsGHUYIiIiVTJjxowV7t4+Wb9tIgF37NiR6dOnRx2GiIhIlZjZovL6qQpaREQkAkrAIiIiEVACFhERicA2cQ5YErjDmjWwcmV4rVpV8jnxtWkTnHceHHxw1BGLiEgSSsDbgi+/hJNOgs8/Dwm3sDD5cGbQujVsvz38+CM8+ywceyz89a+w226ZjFhERCqhBJzMv/4Ff/gDnHwyXHlltLGsWwfHHANffw3DhoXkGn+1bVv6e+vWkJMTfrdpE9xyC1x/PXTvDpdcApdfDs2bRzo7UkOffx7W6/LlpbeBZO9t2kCu/uIidZW5e9QxVKp///6ekduQvvsOLrwQnnwSWrUKVb1PPgknnJD+aSfjDr/6VSjJvvQSHHJI1cfx7bcwejQ8+ij89Kfwv/8bErlZ7ccr6fPpp3DjjWE9NmwIu+4aTjV8/z0UFZX/u1atQkLec084+mg47LCQmOsz9/Bf/+ij8FqzJpyuaZ/0Vk2RGjGzGe7eP2k/JWDCDuz+++Gyy2DDhlDqveiikPDmzIF334WePdM3/fJcf32I5aabQom8Jv7733BwMWMG7Lsv3H479OlTO3FmyubNsGwZLFkSdqCJr7VrQ2kvNzfUAsQ/l/fq3RuGDo16jio3fz7ccANMnAiNG4dEccklsNNOoX9RUUgg8WsBkr0vXQqTJ4dll5MD++8fkvHRR1f/1MSaNWFbmjYNPvkEzjwTfvGLWpvtWrNsGcydW5Js46/vvy89XLt2cOut4VSPDk6rZsuWsIynTYPp08NB3+GHw8CB0KhR7Uzjm2/gxRfhlVfCAeWgQXDAASX/gzqsogSMu6flBTwALAPmJun3B8CBdqmMq1+/fp428+e777+/O7gPGuT+yScl/b791n2nndx339191ar0xZDM88+HmE4+2b2oqHbGWVjoft997u3bu5u5n322+7JltTPu2vTxx+6XXOI+YoT74MHuPXq4b799WB7JXm3auHfs6L7LLmF9tW/v3rat+3bbuTdr5t6okXuDBlv/7rLL3AsKop7b5ObOdR82LKynZs3cL73UfenS6o+vsND9nXfcL788LM/4MujRI3R7550wTDIbNri/+677HXe4n3KK+89/HuKKj6N587CMH3+8+vHVhmXL3J94wv03v3E/4AD3du1Kr+/Wrd0HDgzb/e23u7/+uvt337l/+KH7XnuFYQ4/3H3RomjnoypWr3b/6qvMTa+wMPw/H3nE/cIL3ffe271Jk9LLuGHD8LllS/fjjw/7nG++qfp03n3X/cor3fv0KRl/hw5hvPHvXbuG9fn441WfRoYA0728PFlej5q+gP2BvmUTMLAL8G9gUaQJeNMm92uvDTuONm3c778/eaL773/DBnXooZnbWc+bFzay/v3d16+v/fF//737737nnpsb/jC33ea+eXPtT6c6Zs4MybZRI/dOndz32cf9uOPczzvP/Zpr3MePDwcn770XdpQbN6Y+7sLCMJ9r17qfc07Y/I8+OnyvKz74wP2EE0JsLVq4jxmTnoOkzz5zv+UW9wMPdM/JCdPbcUf3M85wf/pp9wcecD/3XPd+/Up2qOD+k5+4H3WU+3XXub/8svuKFe4rV5YcxF53Xe0dMFZm7Vr3F15w//3v3Xv3LomxRYuw3Zx5ZpjHV14JO+eK4ioocL/11nCw06KF+513ln9AUhds2RIOiNq0CfN88MHhf1Hb+6hly8L2MGZMOBhu1apkOTdr5r7vvmFfMnFi2KaKitx/+MH92WfdzzrL/ac/LRm+Tx/3P/7RferU5HGuWeP+5JPup57qvsMO4TcNGoRpjBsXDpSKisK8T5vm/r//637EEeFAOz6NLl1qlpCLimp9vUeSgMN06ZgkAT8F9AYWRpaAp0517949zP6JJ4aj4IpMmBCGHTOmduNI5vvv3Tt3Dhtguo9s581zP+SQMG+dO4cN/5prwtHt1KnuS5ZkbmfqHo54W7d233VX9wUL0jutoqJQCmrQwD0vz33hwvROrzIzZ7ofe2xYF9tt537FFSG5ZcKqVe6PPRb+C4k7s+22CzvdMWPCTvjrr8vfHjZuDKVjCNvRpk21H+emTe5TprhfdVXYKefmhuk1ahQOJG64IWxDW7ZUfxpfflnynxg4MNSQ1TWvv+7es2eI8aCD3K++OpQMIdQE/eUvNdt2li1zv/feMO54zVFurnvfvuHA9f773efMSW05FxWFg8o//cl9v/1KDvbatnU/6ST3hx92v/nmMK34+mzTxn348LBNpjIfiQn5yCNLb8N77OE+YIB7fn6o7enSJRzYd+gQDjjbtg2FnSZNSmK7557qL7sk6kwCBo4Bbot9rjABA2cD04Hpu+66a+0sidWr3c8/P1Sf7bqr+7/+lfpv4yWmv/+9dmJJpqDAfejQUOJ4++30TSdRUZH7c8+F6vfEo9X4q2nTsOEedVSocrr1Vvd//CMc7damt98Of4TddstsMnz55XBUv8MOobYjUzZscJ88ORzwHHBAWNatWoXkkunTHYk2bQrr4uOPq14SKCoK8xM/nVMb87FqVdhBH3ZYqOqG8P/t3z8cGLz6au3XEhUVuT/0UEgEjRq5X3993agh+uKLUBsEIYk880zJAdGWLe5PPRWWO4SEMmpUOLBLxfLloaAxZEhJIurSJRwIvvNO2F5rw6pV7pMmuY8cGU4VJZ4KGT06HGDV5ADKPexHp093v+mmsLyGDg37r+OPDweZJ5/sfvrpoaT8m9+4X3xxOMXzP/8T/n/vv18rsxpXJxIw0Ax4D2jlKSTgxFeNSsCFhe6ffhqO2nbeORzRXXxx1asdN21y/8UvQrXLnDnVj6cil10WVsn48ekZfyo2bAhH/S+8EKq4fve7UDLLywtVc4nJ+YIL3H/8sebTfO21sFy7dnVfvLjm46uq+fPDef5GjcIReTqsWxeSxRVXhJJAo0YlyaR371B1u3p1eqadaY88Euava1f3zz+v3ji+/9597NiS0kzXruHg+ZlnMneA8t137r/+dZh+Xl4oZUVh7dqQHBo3Dv+TG26oOCHOmRMKDM2ahdh/8YtQRVy2VmLFCvf/+79QfR1Pup07h2riDz5If+1XYWE4QPjyy/ROJ2J1JQH3il2UtTD2KgC+An5S2XhSTsDxCwQeeyycFzrggNLVEXl5NTu6iV+Utdtu4bxXbXr88RDjeefV7nhrU1FRqJ56991QGo4fJb/7bvXH+eKLYcfSs2flpwLSacWKktLDmDE1Pw+0Zk04iBk9OlyoEq9ey8lx33NP9z/8IdQkRFnaTae33grVe+3ahdMZqfr++1AKiZ9rPP5499mz0xRkip5/vuTg/Q9/qJ2DzlQUFbk/+miYNoSLEqtygPr996H2YPfdvfj8/VVXhYuiDj20JOnusUdI8LNmZfaUUz1RJxJwkn41KwEXFLh/9FEosVx8cShVJJbQmjQJVzaef37Y4GbNqp0LFOIXZR1ySO1d8DBjRoh3v/3Sc+4sXV5/PVTlN2gQjpqrGvuzz4Zl2adPqAKL2ubNoVoKQqm/KrUkBQWhqm7s2HDOKfHc2T77hKT+0kvhApX64pNPws69ceNQ7ViR1avDucx44j3uuPCfrStWry45DfWzn4XrB9J58d60aWG7gVDdXpWDmLIKC8OB7uGHl+wfd9stbJMzZyrppllUV0FPBJYAW4DFwBll+tcsAXfuXLIxNW0aNtYLLnD/299C9Uk6z9nEL8oaPbrm41q6NNw+s8suNbvNJCqrV7ufdlpYHvn54UrFVEyaFI7A99orHKnXFUVF4arwBg1C1XBFt6QsXRoOAIcPL7lNyiyUeK+8MlStZ6q0VFctXx4umAL3G2/ceme/enW4G6F165IDn1TPW0Zh8uSwfuPn7C+9tHYvllywIJyfNAsXCT3wQO1elfv556FGQUk3YyIrAdfWK2kCHj8+XCjx4Yc1P2lfHfGj4SeeqP44Nm0Kpd4mTUIpeFv23HPhQqZGjcJVmBXVDjz4YEhw++1Xd0uEL70UTl/suGPJxVlbtoSSyBVXhNtz4geAO+wQLip5/PHMXbm8Ldm4MVzxCuHCoM2bQxX9ddeV3EZzzDF1O/GW9c474fxwTk54nXhi9U7FFBWF0u4f/1hyf3bDhuE++DVraj9uybjsTMBRS7wo64MPqjeO884LqyDqBxjUlmXLSq7S3Hff5FdKjx8f+g8ZEi5MqsvmzQtVdY0bhwQRTxYNGoRbVK67LlxtWZfvF60riopCrQCEg5f4sjz66G374HPhwnBeOH6tyT77hHtZKyoUbNoU7k3+zW9Kbh/KyQnXINx6a2YfrCFppwScLt9+Gy6Q6NSpahdlbdrkfvfdYfFfemn64otCUVGolm3VKtw2cu+9JdVdt90W5vmII2rvtoZ0W7Ei3ALz05+GqvYnnsjeC6cy4cEHQ43PUUeFg5ds8cMPYfvebTcvPk/817+WXNn+ww/hFsaTTio5z920aThgfegh1ZxksYoSsJ4FXVPvvhueSXrAAXDXXeHZs8uWhefvJr4nfo4/h3bo0NDyUrwFo2zy9dcwahS89lqYzz33hOuug+OPD881rq1nxMq2p6Age1tpKiyEf/4Tbr4Z3n4bWraE/v1h6tTwLPN27eCoo0IzoUOGQLNmUUcsaabGGNLtvvvgrLOS92vbFnbcEXbYIbzin3feGU48EVq0yGysmVRUBPfcA5deGhq5GD4cHn44e3e+IolmzAhNR37wQWjY5dhjQ4MV2XjALeVSAs6EF18Mrc8kJtv27UPTcfXdggWhNZ5Ro7TzEZF6paIErKJIbTn88KgjqLs6dw4vEREp1iDqAEREROojJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKQtgRsZg+Y2TIzm5vQ7X/N7GMzm2Nmz5pZ63RNX0REpC5LZwn4QWBomW6vAj3dPQ/4FLg8jdMXERGps9KWgN19CrCqTLdX3L0g9vVdoEO6pi8iIlKXRXkOeBTwUnk9zexsM5tuZtOXL1+ewbBERETSL5IEbGZ/BAqAx8obxt0nuHt/d+/fvn37zAUnIiKSAbmZnqCZnQYcCQx2d8/09EVEROqCjCZgMxsKXAYc4O7rMzltERGRuiSdtyFNBN4BuprZYjM7A7gTaAm8amazzezedE1fRESkLktbCdjdhyfpfH+6piciIrIt0ZOwREREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRUAIWERGJgBKwiIhIBJSARUREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRUAIWERGJgBKwiIhIBJSARUREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRUAIWERGJgBKwiIhIBJSARUREIqAELCIiEgElYBERkQgoAYuIiERACVhERCQCSsAiIiIRSFsCNrMHzGyZmc1N6NbWzF41swWx9zbpmr6IiEhdls4S8IPA0DLdxgCvu3tn4PXYdxERkXonbQnY3acAq8p0PgZ4KPb5IeDYdE1fRESkLsv0OeAd3X1J7PN3wI4Znr6IiEidENlFWO7ugJfX38zONrPpZjZ9+fLlGYxMREQk/TKdgJea2U4Asfdl5Q3o7hPcvb+792/fvn3GAhQREcmETCfgfwCnxj6fCjyf4emLiIjUCem8DWki8A7Q1cwWm9kZwDjgYDNbAAyJfRcREal3ctM1YncfXk6vwemapoiIyLZCT8ISERGJQKUlYDNrAPQGdgY2AHPdvdyLp0RERKRy5SZgM9sdGE04V7sAWA40AbqY2XpgPPCQuxdlIlAREZFsUlEJ+HrgHuCc2D27xcxsB+Ak4BRKnmwlIiIiKSo3AVdwERWxKuhb0xGQiIhIfVDpRVhm9iszaxn7fKWZPWNmfdMfmoiISPZK5SroK919rZntS7iF6H5C1bSIiIhUUyoJuDD2fgQwwd1fABqlLyQREZHsl0oC/sbMxgMnAi+aWeMUfyciIiLlSCWR/hr4N3Cou68G2gKXpjMoERGRbFdpAnb39cBC4DAz+y2wk7u/ku7AREREslkqV0GPJdzruz3QDvibmV2R7sBERESyWSqNMYwAerv7RgAzGwfMJjyoQ0RERKohlXPA3xIeQRnXGPgmPeGIiIjUD6mUgNcAH5nZq4ADBwPvm9ntAO5+YRrjExERyUqpJOBnY6+4yekJRUREpP6oNAG7+0Nm1gj4OaEE/Im7b057ZCIiIlkslfaADyc0Pfg5YEAnMzvH3V9Kd3AiIiLZKpUq6JuBA939MyhuJ/gFQAlYRESkmlK5CnptPPnGfAGsTVM8IiIi9UK5JWAzOz72cbqZvQj8nXAO+FfAtAzEJiIikrUqqoI+KuHzUuCA2OfllL4vWERERKqo3ATs7qdnMhAREZH6pKIq6Nsr+qEewCEiIlJ9FVVBnwvMJZz7/ZZwC5KIiIjUgooS8E6EC65OBAqAJ4CnYm0Ci4iISA2UexuSu69093vd/UDgdKA1MM/MTslUcCIiItkqlSdh9QWGExpheAmYke6gREREsl1FF2FdCxwBzAcmAZe7e0GmAhMREclmFZWArwC+BHrHXjeaGYSLsdzd89IfnoiISHaqKAF3StdEzex3wJmEJ2t9CJzu7hvTNT0REZG6pqIE/JW7e0U/NjOrbJgkv/kpcCHQ3d03mNnfgWHAg1UZj4iIyLasogT8ppk9DTzv7l/FO8baBt4XOBV4k+olzlygqZltAZoR7jOukk8/hY0bwT21VyKzrV/Jum/cCD/+GF7r1pV8TvZ9/XrIzYVmzUq/mjffuluzZtC0KeTkJI+lQYPk8W3YUDLdxOkn+7xhAzRpEqYff7VoUfp74qtZszCdxGUV/5xqt4o+FxaGmNavD++Jn5O9FxQkX27lLcsmTbZefmXfEz8XFMDatWF5rV1b8irve1FRxcuy7PdGjbbeZss7VC27TFN537y5ZDmWXZ7JXonbZtOmWy+/sp9zcrb+TyT7j8Rt3Fj5fyTebcMGaNy49P8jcTss+96sWVhv8enHJcaU2K2oKCyLstMuL65Nm8J8l42h7P8j/rlp0+RxVPQ5cV9UVFTxvqqgoPz/SrL/S3zbTLbPSbYs49tmRdtX4uctW8K0yr7i+72yL7OK931lY8vNrXz/l9g9cTnGl2Xie9nPmzYl38eUt/85+2wYOpSMqCgBDwVGARPNrBOwmvAM6BzgFeBWd59V1Qm6+zdmdhPwFbABeMXdX6nqeI49FubPr+qvak9OTumdbrNmIckkbpg//hg2gExo0qQknhYtwvfEA4h4THVVkyYlO/+mTcOfMvGPsn59+QmstplBy5ZhObZsGV4NGsDixVsf5NRFOTlhGSa+Enfq69eHBJ4pDRuWPkhp2jRMP3G7zOS2WTbBNm4clk1iPHV13TZoUPp/0rRp6FY2KWYynsRE27Rp6F42nkz9d6uqUaPSB55Nm8KaNZmbvqVSg2xmDYF2wIaaPojDzNoATxMe8LEaeJLwgI9Hywx3NnA2wK677tpv0aJFpcbzyiuhZJLsSKm8F5RfOk7WPbEEmayEk3iEm0xFR4/r14eEXd5RcNmjZAgbR2KSjb8nllgqUlHJIPFPW1Epo6pH/vHPZXccie9NmpSUcCpalps2bZ2U46/E2pBkR8Vl33NySpJr/BVPuPHagFSXZ7KSX0E59wuUN97ylnN5740abZ1k48u0YcPKY0+skShbKli/Pvn2V9H3xG2z7H8mlXiKikoOGBO30cSDr6rUxFRU01PZthaPp+x/Jf49MTmnWhNUWeku8ZWbm/y/0rRp6vudxPWZGHv84Ksq21tubunll/hq2DC1eOKl0GSl6IKCyvd/id3jyzFZTVeybvHalmTLM5X9Zk2Z2Qx375+0XxVP4dZGML8Chrr7GbHvI4G93f388n7Tv39/nz59eqZCFBERqRUVJeAUjgVr3VfA3mbWzMJ9TYMJ9xqLiIjUGxlPwO7+HvAUMJNwC1IDYEKm4xAREYlSpQnYzP6cSreqcPer3P3n7t7T3U9x9001GZ+IiMi2JpUS8MFJuh1W24GIiIjUJxU9C/o84HxgNzObk9CrJTA13YGJiIhks4ruA36c0PrRn4AxCd3XuvuqtEYlIiKS5cpNwO6+BlhjZqPL9GphZi0Sn44lIiIiVVNpe8DAC4RGE4zwJKxOwCdAjzTGJSIiktUqTcDu3ivxu5n1JZwbFhERkWqq8n3A7j4T2CsNsYiIiNQblZaAzez3CV8bAH2pRutFIiIiUiKVc8AtEz4XEM4JP52ecEREROqHVM4BXwNgZtuFr7427VGJiIhkuVQeRdnfzD4E5gAfmtkHZpa0ZQcRERFJTSpV0A8A57v72wBmtm+sW146AxMREclmqVwFXRhPvgDu/h/CuWARERGpplRKwG+Z2XhgIuGBHCcCk2P3A8dvSxIREZEqSCUB9469X1Wmex9CQj6oViMSERGpB1K5CvrATAQiIiJSn6TyII7GwC+BjonDu/u16QtLREQku6VSBf08sAaYAWxKbzgiIiL1QyoJuIO7D017JCIiIvVIKrch/dfMelU+mIiIiKSq3BJw7OlXHhvmdDP7glAFbYRHUupBHCIiItVUURX0kRmLQkREpJ4pNwG7+yIAM2ubpLcaZBAREamBVM4BzwSWA58CC2KfF5rZTDPrl87gREREslUqCfhV4HB3b+fu2wOHAf8CzgfuTmdwIiIi2SqVBLy3u/87/sXdXwH2cfd3gcZpi0xERCSLpXIf8BIzGw1Min0/EVhqZjlAUdoiExERyWKplIBPAjoAz8Veu8a65QC/TldgIiIi2SyVxhhWAL8tp/dntRuOiIhI/ZBKYwxvEh7IUYq7qxlCERGRakrlHPAlCZ+bEFpGKqjJRM2sNXAf0JOQ3Ee5+zs1GaeIiMi2JJUq6BllOk01s/drON3bgJfd/QQzawQ0q+H4REREtimpVEEnPgmrAdAPaFXdCZpZK2B/4DQAd98MbK7u+ERERLZFqVRBzyBUExuh6vlL4IwaTLMT4WlafzOz3rHxX+TuP9ZgnCIiItuUSm9DcvdO7r5b7L2zux/i7v+pwTRzgb7APe7eB/gRGFN2IDM728ymm9n05cuX12ByIiIidU+lCdjMGprZhWb2VOx1gZk1rME0FwOL3f292PenCAm5FHef4O793b1/+/btazA5ERGRuieVB3HcQzjve3fs1S/WrVrc/TvgazPrGus0GJhX3fGJiIhsi1I5B7ynu/dO+P6GmX1Qw+n+FngsdgX0F8DpNRyfiIjINiWVBFxoZru7++cAZrYbUFiTibr7bKB/TcYhIiKyLUv1QRxvmtkXhCuhf4ZKrCIiIjVSYQKOtXjUG+gMxM/ZfuLum9IdmIiISDar8CIsdy8Ehrv7JnefE3sp+YqIiNRQKlXQU83sTuAJwj27ALj7zLRFJSIikuVSScD5sfdrE7o5oNaQREREqimVxhgOzEQgIiIi9UkqjTE0JjRB2DFxeHe/trzfiIiISMVSqYJ+HlhDaDRBF2CJiIjUglQScAd3H5r2SEREROqRVJ4F/V8z65X2SEREROqRckvAZjYXKIoNc3rsSVibCE/DcnfPy0yIIiIi2aeiKuifUnILkoiIiNSiihLwl+6+KGORiIiI1CMVJeAdzOz35fV095vTEI+IiEi9UFECzgFaEM75ioiISC2qKAEv0cM2RERE0qOi25BU8hUREUmTihLw4IxFISIiUs+Um4DdfVUmAxEREalPUnkSloiIiNQyJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkApElYDPLMbNZZvavqGIQERGJSpQl4IuA+RFOX0REJDKRJGAz6wAcAdwXxfRFRESiFlUJ+FbgMqCovAHM7Gwzm25m05cvX56xwERERDIh4wnYzI4Elrn7jIqGc/cJ7t7f3fu3b98+Q9GJiIhkRhQl4IHA0Wa2EJgEHGRmj0YQh4iISGQynoDd/XJ37+DuHYFhwBvufnKm4xAREYmS7gMWERGJQG6UE3f3ycDkKGMQERGJgkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIKAGLiIhEQAlYREQkAkrAIiIiEVACFhERiYASsIiISASUgEVERCKgBCwiIhIBJWAREZEIZDwBm9kuZvammc0zs4/M7KJMxyAiIhK13AimWQD8wd1nmllLYIaZveru8yKIRUREJBIZLwG7+xJ3nxn7vBaYD/w003GIiIhEKdJzwGbWEegDvBdlHCIiIpkWWQI2sxbA08DF7v5Dkv5nm9l0M5u+fPnyzAcoIiKSRlGcA8bMGhKS72Pu/kyyYdx9AjABoH///l62/5YtW1i8eDEbN25Ma6wi2aRJkyZ06NCBhg0bRh2KSL2X8QRsZgbcD8x395urO57FixfTsmVLOnbsSBiliFTE3Vm5ciWLFy+mU6dOUYcjUu9FUQU9EDgFOMjMZsdeh1d1JBs3bmT77bdX8hVJkZmx/fbbq9ZIpI7IeAnY3f8D1ErWVPIVqRr9Z0TqDj0JqwZGjRrFDjvsQM+ePVMa/s4772SPPfbAzFixYkVx9wcffBAz47XXXivu9txzz2FmPPXUUwAMGjSIrl27kp+fT7du3ZgwYULtzkwdMHnyZP773/8Wf7/33nt5+OGHa2XcS5Ys4cgjj6z272+88cZaiSNV3377LSeccEKVfnPaaacVby/Dhg1jwYIF6QhNRGqJEnANnHbaabz88sspDz9w4EBee+01fvazn23Vr1evXkyaNKn4+8SJE+ndu3epYR577DFmz57N1KlTGT16NJs3b65+8HVQ2QR87rnnMnLkyFoZ980338xZZ51V7d/XNAEXFBRUafidd965OJlWx3nnncdf/vKXav9eRNJPCbgG9t9/f9q2bVuqW0FBAXvuuSeTJ08G4PLLL+ePf/wjAH369KFjx45Jx7Xffvvx/vvvs2XLFtatW8dnn31Gfn5+0mHXrVtH8+bNycnJAaBFixb87ne/o0ePHgwePJj4bVu333473bt3Jy8vj2HDhm01nsLCQi655BJ69uxJXl4ed9xxBwCvv/46ffr0oVevXowaNYpNmzYB0LFjR6666ir69u1Lr169+PjjjwG4+uqrGTVqFIMGDWK33Xbj9ttvL57Go48+yoABA8jPz+ecc86hsLAQgJdffpm+ffvSu3dvBg8ezMKFC7n33nu55ZZbyM/P5+233+bqq6/mpptuAmD27Nnsvffe5OXlcdxxx/H9998DoWZg9OjRDBgwgC5duvD2228nXWZPP/00Q4cOBUKNw/HHH8/QoUPp3Lkzl112WfFwEydOpFevXvTs2ZPRo0cDMGbMGDZs2EB+fj4jRozYatzlLf9BgwZx8cUX079/f2677baky3XatGnk5eWxceNGfvzxR3r06MHcuXNZuHBhcc1KYWEhl156KXvuuSd5eXmMHz8eCBdVXXDBBXTt2pUhQ4awbNmy4pj2228/XnvttSonfhHJnEhuQ6ptF18Ms2fX7jjz8+HWW6v+u9zcXB588EFOOOEE7rjjDl5++WXee6/y54yYGUOGDOHf//43a9as4eijj+bLL78sNcyIESNo3LgxCxYs4NZbby1OwD/++CP9+/fnlltu4dprr+Waa67hzjvvZNy4cXz55Zc0btyY1atXbzXNCRMmsHDhQmbPnk1ubi6rVq1i48aNnHbaabz++ut06dKFkSNHcs8993DxxRcD0K5dO2bOnMndd9/NTTfdxH333QfAxx9/zJtvvsnatWvp2rUr5513Hp999hlPPPEEU6dOpWHDhpx//vk89thjHHbYYZx11llMmTKFTp06sWrVKtq2bcu5555LixYtuOSSS4BwIBA3cuRI7rjjDg444ADGjh3LNddcw62xFVRQUMD777/Piy++yDXXXFOqKh/gyy+/pE2bNjRu3Li42+zZs5k1axaNGzema9eu/Pa3vyUnJ4fRo0czY8YM2rRpwyGHHMJzzz3HuHHjuPPOO5ldzkZW3vIH2Lx5M9OnT2fjxo107tw56XI9+uijueKKK9iwYQMnn3wyPXv2ZOHChcXjv//++2nVqhXTpk1j06ZNDBw4kEMOOYRZs2bxySefMG/ePJYuXUr37t0ZNWoUAA0aNGCPPfbggw8+oF+/fhVseSISFZWA06BHjx6ccsopHHnkkTzwwAM0atQopd8NGzaMSZMmMWnSJIYPH75V/8cee4w5c+bw1VdfcdNNN7Fo0SIg7GxPPPFEAE4++WT+85//AJCXl8eIESN49NFHyc3d+ljrtdde45xzzinu17ZtWz755BM6depEly5dADj11FOZMmVK8W+OP/54APr161cqSRxxxBE0btyYdu3ascMOO7B06VJef/11ZsyYwZ577kl+fj6vv/46X3zxBe+++y77779/8a0wZWsRylqzZg2rV6/mgAMOqFJMcUuWLKF9+/alug0ePJhWrVrRpEkTunfvzqJFi5g2bRqDBg2iffv25ObmMmLEiFLTKU95yx8o7l7Rch07diyvvvoq06dPL1Uaj3vllVd4+OGHyc/PZ6+99mLlypUsWLCAKVOmMHz4cHJycth555056KCDSv1uhx124Ntvv600fhGJRlaUgKtTUk23Dz/8kNatW5eqFqzMgAED+PDDD2nWrFnxjjqZ9u3b07dvX957772k55PjV7q+8MILTJkyhX/+85/ccMMNfPjhh0kTcVXES5E5OTmlqjcTS5fxfu7Oqaeeyp/+9KdS4/jnP/9ZoxhSjSmuadOmW916kyze2pJ4pXHz5s0rHX7lypWsW7eOLVu2sHHjxq1+4+7ccccdHHrooaW6v/jiixWOd+PGjTRt2rQKkYtIJqkEnAbPPPMMq1atYsqUKfz2t79NWv1bnnHjxlV6wc/69euZNWsWu+++OwBFRUXFF+w8/vjj7LvvvhQVFfH1119z4IEH8uc//5k1a9awbt26UuM5+OCDGT9+fHHyWbVqFV27dmXhwoV89tlnADzyyCPFJc+qGjx4ME899VTxQciqVatYtGgRe++9N1OmTCmuYl+1ahUALVu2ZO3atVuNp1WrVrRp06b4/G5VY+rSpUvSknFZAwYM4K233mLFihUUFhYyceLE4uk0bNiQLVu2JP1dsuVfVkXL9ZxzzuG6665jxIgRxeedEx166KHcc889xdP/9NNP+fHHH9l///154oknKCwsZMmSJbz55pulfvfpp5+mfIW+iGSeEnANDB8+nH322YdPPvmEDh06cP/997NixQrGjBnDfffdR5cuXbjgggu46KLQ5PHtt99Ohw4dWLx4MXl5eZx55plbjfOwww7jwAMPTDq9ESNGkJ+fT79+/TjttNOKz+01b96c999/n549e/LGG28wduxYCgsLOfnkk+nVqxd9+vThwgsvpHXr1qXGd+aZZ7LrrruSl5dH7969efzxx2nSpAl/+9vf+NWvfkWvXr1o0KAB5557brWWT/fu3bn++us55JBDyMvL4+CDDy6uDp4wYQLHH388vXv3Lq6mPeqoo3j22WeLL8JK9NBDD3HppZeSl5fH7NmzGTt2bMpxNG/enN133704+ZVnp512Yty4cRx44IH07t2bfv36ccwxxwBw9tlnF1fpJxt/2eVfVnnL9eGHH6Zhw4acdNJJjBkzhmnTpvHGG2+U+u2ZZ55J9+7d6du3Lz179uScc86hoKCA4447js6dO9O9e3dGjhzJPvvsU/ybpUuX0rRpU37yk5+kvJxEJLPMfavHLNc5/fv39+nTp5fqNn/+fLp16xZRRHVLixYttirdSmnPPvssM2bM4Prrr6/1cdfF5X/LLbew3XbbccYZZ2zVT/8dkcwxsxnu3j9Zv6w4ByxSmeOOO46VK1dGHUbGtG7dmlNOOSXqMESkAkrAWaCulb7qqmRV/rWhLi7/008/PeoQRKQSOgcsIiISASVgERGRCCgBi4iIREAJWEREJAJKwNUUf8hF9+7d6dGjB7fddlulv1FzhBVLZ3OEybg7Bx10ED/88EPapjF9+nQuvPDCKv1m0KBBxG+7GzJkSHHDEyKSXZSAqyk3N5e//vWvzJs3j3fffZe77rqLefPmVfgbNUdYsXQ2R5jMiy++SO/evdluu+1S/k28NadU9e/fv1TrUFV1yimncPfdd1f79yJSdykBV9NOO+1E3759gfAIxW7duvHNN9+oOcI60hzhRx99VDzdvLy8pI3TP/bYY8VPulq4cCE///nPGTFiBN26deOEE05g/fr1xfM9evRo+vbty5NPPpm0ycJnn32WwYMH4+4sWbKELl268N133zF58mSOPPJIILSaNGrUKAYMGECfPn14/vnnAdiwYQPDhg2jW7duHHfccWzYsKE4xqOPPpqJEycm3Q5EZNuWHfcBR9we4cKFC5k1axZ77bWXmiOsI80R3nvvvVx00UWMGDGCzZs3Jy25Tp06tbhtXQgtFt1///0MHDiQUaNGcffddxfHsv322zNz5ky+/fZb9t57762aLDzuuON4+umnueuuu3j55Ze55ppr+MlPflJ8kAJwww03cNBBB/HAAw+wevVqBgwYwJAhQxg/fjzNmjVj/vz5zJkzp/jADqBNmzZs2rSJlStXsv3221e6HYnItkMl4Bpat24dv/zlL7n11luLqzLV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\n" }, "metadata": { "needs_background": "light" @@ -155,385 +193,118 @@ } ], "source": [ - "import json\n", - "iperf_results = json.loads('''{\n", - "\t\"start\":\t{\n", - "\t\t\"connected\":\t[{\n", - "\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\"local_host\":\t\"127.0.0.1\",\n", - "\t\t\t\t\"local_port\":\t33904,\n", - "\t\t\t\t\"remote_host\":\t\"127.0.0.1\",\n", - "\t\t\t\t\"remote_port\":\t5201\n", - "\t\t\t}],\n", - "\t\t\"version\":\t\"iperf 3.9\",\n", - "\t\t\"system_info\":\t\"Linux jake-arch 5.4.72-1-lts #1 SMP Sat, 17 Oct 2020 13:30:57 +0000 x86_64\",\n", - "\t\t\"timestamp\":\t{\n", - "\t\t\t\"time\":\t\"Sun, 01 Nov 2020 11:23:36 GMT\",\n", - "\t\t\t\"timesecs\":\t1604229816\n", - "\t\t},\n", - "\t\t\"connecting_to\":\t{\n", - "\t\t\t\"host\":\t\"127.0.0.1\",\n", - "\t\t\t\"port\":\t5201\n", - "\t\t},\n", - "\t\t\"cookie\":\t\"hemtxhhmqp5uq7npjpxbwn5knfxygfy6oz7i\",\n", - "\t\t\"tcp_mss_default\":\t32768,\n", - "\t\t\"sock_bufsize\":\t0,\n", - "\t\t\"sndbuf_actual\":\t16384,\n", - "\t\t\"rcvbuf_actual\":\t131072,\n", - "\t\t\"test_start\":\t{\n", - "\t\t\t\"protocol\":\t\"TCP\",\n", - "\t\t\t\"num_streams\":\t1,\n", - "\t\t\t\"blksize\":\t131072,\n", - "\t\t\t\"omit\":\t0,\n", - "\t\t\t\"duration\":\t10,\n", - "\t\t\t\"bytes\":\t0,\n", - "\t\t\t\"blocks\":\t0,\n", - "\t\t\t\"reverse\":\t0,\n", - "\t\t\t\"tos\":\t0\n", - "\t\t}\n", - "\t},\n", - "\t\"intervals\":\t[{\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t0,\n", - "\t\t\t\t\t\"end\":\t1.000167,\n", - "\t\t\t\t\t\"seconds\":\t1.0001670122146606,\n", - "\t\t\t\t\t\"bytes\":\t7229931520,\n", - "\t\t\t\t\t\"bits_per_second\":\t57829793878.051056,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1178694,\n", - "\t\t\t\t\t\"rtt\":\t20,\n", - "\t\t\t\t\t\"rttvar\":\t4,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t0,\n", - "\t\t\t\t\"end\":\t1.000167,\n", - "\t\t\t\t\"seconds\":\t1.0001670122146606,\n", - "\t\t\t\t\"bytes\":\t7229931520,\n", - "\t\t\t\t\"bits_per_second\":\t57829793878.051056,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t1.000167,\n", - "\t\t\t\t\t\"end\":\t2.000019,\n", - "\t\t\t\t\t\"seconds\":\t0.99985200166702271,\n", - "\t\t\t\t\t\"bytes\":\t7573340160,\n", - "\t\t\t\t\t\"bits_per_second\":\t60595689341.00808,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1178694,\n", - "\t\t\t\t\t\"rtt\":\t18,\n", - "\t\t\t\t\t\"rttvar\":\t0,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t1.000167,\n", - "\t\t\t\t\"end\":\t2.000019,\n", - "\t\t\t\t\"seconds\":\t0.99985200166702271,\n", - "\t\t\t\t\"bytes\":\t7573340160,\n", - "\t\t\t\t\"bits_per_second\":\t60595689341.00808,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t2.000019,\n", - "\t\t\t\t\t\"end\":\t3.000052,\n", - "\t\t\t\t\t\"seconds\":\t1.0000330209732056,\n", - "\t\t\t\t\t\"bytes\":\t7034634240,\n", - "\t\t\t\t\t\"bits_per_second\":\t56275215657.611633,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1178694,\n", - "\t\t\t\t\t\"rtt\":\t19,\n", - "\t\t\t\t\t\"rttvar\":\t5,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t2.000019,\n", - "\t\t\t\t\"end\":\t3.000052,\n", - "\t\t\t\t\"seconds\":\t1.0000330209732056,\n", - "\t\t\t\t\"bytes\":\t7034634240,\n", - "\t\t\t\t\"bits_per_second\":\t56275215657.611633,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t3.000052,\n", - "\t\t\t\t\t\"end\":\t4.000159,\n", - "\t\t\t\t\t\"seconds\":\t1.0001070499420166,\n", - "\t\t\t\t\t\"bytes\":\t7092305920,\n", - "\t\t\t\t\t\"bits_per_second\":\t56732374162.635429,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1178694,\n", - "\t\t\t\t\t\"rtt\":\t17,\n", - "\t\t\t\t\t\"rttvar\":\t1,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t3.000052,\n", - "\t\t\t\t\"end\":\t4.000159,\n", - "\t\t\t\t\"seconds\":\t1.0001070499420166,\n", - "\t\t\t\t\"bytes\":\t7092305920,\n", - "\t\t\t\t\"bits_per_second\":\t56732374162.635429,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t4.000159,\n", - "\t\t\t\t\t\"end\":\t5.00008,\n", - "\t\t\t\t\t\"seconds\":\t0.99992102384567261,\n", - "\t\t\t\t\t\"bytes\":\t7098859520,\n", - "\t\t\t\t\t\"bits_per_second\":\t56795361639.2459,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1178694,\n", - "\t\t\t\t\t\"rtt\":\t18,\n", - "\t\t\t\t\t\"rttvar\":\t2,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t4.000159,\n", - "\t\t\t\t\"end\":\t5.00008,\n", - "\t\t\t\t\"seconds\":\t0.99992102384567261,\n", - "\t\t\t\t\"bytes\":\t7098859520,\n", - "\t\t\t\t\"bits_per_second\":\t56795361639.2459,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t5.00008,\n", - "\t\t\t\t\t\"end\":\t6.000135,\n", - "\t\t\t\t\t\"seconds\":\t1.0000549554824829,\n", - "\t\t\t\t\t\"bytes\":\t7219445760,\n", - "\t\t\t\t\t\"bits_per_second\":\t57752392269.4183,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"rtt\":\t18,\n", - "\t\t\t\t\t\"rttvar\":\t1,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t5.00008,\n", - "\t\t\t\t\"end\":\t6.000135,\n", - "\t\t\t\t\"seconds\":\t1.0000549554824829,\n", - "\t\t\t\t\"bytes\":\t7219445760,\n", - "\t\t\t\t\"bits_per_second\":\t57752392269.4183,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t6.000135,\n", - "\t\t\t\t\t\"end\":\t7.000078,\n", - "\t\t\t\t\t\"seconds\":\t0.99994301795959473,\n", - "\t\t\t\t\t\"bytes\":\t7160463360,\n", - "\t\t\t\t\t\"bits_per_second\":\t57286971208.5081,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"rtt\":\t18,\n", - "\t\t\t\t\t\"rttvar\":\t2,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t6.000135,\n", - "\t\t\t\t\"end\":\t7.000078,\n", - "\t\t\t\t\"seconds\":\t0.99994301795959473,\n", - "\t\t\t\t\"bytes\":\t7160463360,\n", - "\t\t\t\t\"bits_per_second\":\t57286971208.5081,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t7.000078,\n", - "\t\t\t\t\t\"end\":\t8.000187,\n", - "\t\t\t\t\t\"seconds\":\t1.0001089572906494,\n", - "\t\t\t\t\t\"bytes\":\t7322992640,\n", - "\t\t\t\t\t\"bits_per_second\":\t58577558667.914688,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"rtt\":\t27,\n", - "\t\t\t\t\t\"rttvar\":\t5,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t7.000078,\n", - "\t\t\t\t\"end\":\t8.000187,\n", - "\t\t\t\t\"seconds\":\t1.0001089572906494,\n", - "\t\t\t\t\"bytes\":\t7322992640,\n", - "\t\t\t\t\"bits_per_second\":\t58577558667.914688,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t8.000187,\n", - "\t\t\t\t\t\"end\":\t9.000167,\n", - "\t\t\t\t\t\"seconds\":\t0.99997997283935547,\n", - "\t\t\t\t\t\"bytes\":\t7087063040,\n", - "\t\t\t\t\t\"bits_per_second\":\t56697639812.7407,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"rtt\":\t20,\n", - "\t\t\t\t\t\"rttvar\":\t3,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t8.000187,\n", - "\t\t\t\t\"end\":\t9.000167,\n", - "\t\t\t\t\"seconds\":\t0.99997997283935547,\n", - "\t\t\t\t\"bytes\":\t7087063040,\n", - "\t\t\t\t\"bits_per_second\":\t56697639812.7407,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}, {\n", - "\t\t\t\"streams\":\t[{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t9.000167,\n", - "\t\t\t\t\t\"end\":\t10.000036,\n", - "\t\t\t\t\t\"seconds\":\t0.99986898899078369,\n", - "\t\t\t\t\t\"bytes\":\t7135559680,\n", - "\t\t\t\t\t\"bits_per_second\":\t57091957114.919762,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"rtt\":\t17,\n", - "\t\t\t\t\t\"rttvar\":\t0,\n", - "\t\t\t\t\t\"pmtu\":\t65535,\n", - "\t\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}],\n", - "\t\t\t\"sum\":\t{\n", - "\t\t\t\t\"start\":\t9.000167,\n", - "\t\t\t\t\"end\":\t10.000036,\n", - "\t\t\t\t\"seconds\":\t0.99986898899078369,\n", - "\t\t\t\t\"bytes\":\t7135559680,\n", - "\t\t\t\t\"bits_per_second\":\t57091957114.919762,\n", - "\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\"omitted\":\tfalse,\n", - "\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t}\n", - "\t\t}],\n", - "\t\"end\":\t{\n", - "\t\t\"streams\":\t[{\n", - "\t\t\t\t\"sender\":\t{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t0,\n", - "\t\t\t\t\t\"end\":\t10.000036,\n", - "\t\t\t\t\t\"seconds\":\t10.000036,\n", - "\t\t\t\t\t\"bytes\":\t71954595840,\n", - "\t\t\t\t\t\"bits_per_second\":\t57563469443.51,\n", - "\t\t\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\t\t\"max_snd_cwnd\":\t1244177,\n", - "\t\t\t\t\t\"max_rtt\":\t27,\n", - "\t\t\t\t\t\"min_rtt\":\t17,\n", - "\t\t\t\t\t\"mean_rtt\":\t19,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t},\n", - "\t\t\t\t\"receiver\":\t{\n", - "\t\t\t\t\t\"socket\":\t5,\n", - "\t\t\t\t\t\"start\":\t0,\n", - "\t\t\t\t\t\"end\":\t10.000058,\n", - "\t\t\t\t\t\"seconds\":\t10.000036,\n", - "\t\t\t\t\t\"bytes\":\t71954530251,\n", - "\t\t\t\t\t\"bits_per_second\":\t57563290333.716072,\n", - "\t\t\t\t\t\"sender\":\ttrue\n", - "\t\t\t\t}\n", - "\t\t\t}],\n", - "\t\t\"sum_sent\":\t{\n", - "\t\t\t\"start\":\t0,\n", - "\t\t\t\"end\":\t10.000036,\n", - "\t\t\t\"seconds\":\t10.000036,\n", - "\t\t\t\"bytes\":\t71954595840,\n", - "\t\t\t\"bits_per_second\":\t57563469443.51,\n", - "\t\t\t\"retransmits\":\t0,\n", - "\t\t\t\"sender\":\ttrue\n", - "\t\t},\n", - "\t\t\"sum_received\":\t{\n", - "\t\t\t\"start\":\t0,\n", - "\t\t\t\"end\":\t10.000058,\n", - "\t\t\t\"seconds\":\t10.000058,\n", - "\t\t\t\"bytes\":\t71954530251,\n", - "\t\t\t\"bits_per_second\":\t57563290333.716072,\n", - "\t\t\t\"sender\":\ttrue\n", - "\t\t},\n", - "\t\t\"cpu_utilization_percent\":\t{\n", - "\t\t\t\"host_total\":\t83.694547978294736,\n", - "\t\t\t\"host_user\":\t0.40342553898347638,\n", - "\t\t\t\"host_system\":\t83.291112444624432,\n", - "\t\t\t\"remote_total\":\t29.836328062694317,\n", - "\t\t\t\"remote_user\":\t1.4158448950236551,\n", - "\t\t\t\"remote_system\":\t28.420487977759691\n", - "\t\t},\n", - "\t\t\"sender_tcp_congestion\":\t\"cubic\",\n", - "\t\t\"receiver_tcp_congestion\":\t\"cubic\"\n", - "\t}\n", - "}\n", - "''')\n", "plot_iperf_results(\n", - " {'TCP': iperf_results},\n", - " 'My PC',\n", - " events={4: 'x = 0', 8: 'x = 1'},\n", - " filename='test.png',\n", + " {\n", + " '1x1MBps connection (not proxied)': One1MBStraight,\n", + " '2x1MBps connections (proxied)': Two1MBAggregate,\n", + " },\n", + " 'Proxying adds additional bandwidth',\n", ")" - ], + ] + }, + { + "cell_type": "code", + "execution_count": 63, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "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aNCgWr+NHj2aN9980/V90aJFpKamVhvn9ddfZ/Xq1fzwww/MmzePioqKxie+BaoZgK+++mouuugiv8z7oYce4oorrmj09E0NwFVVVQ0av2/fvq5g2hjXXHMNDzzwQKOnV0oFngbgJpg6dSrdunWrNqyqqoqjjjqKJUuWAPCXv/yFv/3tbwCMGTOG+Ph4j/OaMmUKy5Yto7KykqKiIrZu3UpaWprHcYuKioiJiSE0NBSA2NhY/vCHPzBy5EimT5/OgQMHAHjssccYMWIEKSkpnHfeebXmY7PZ+NOf/sSoUaNISUlh4cKFAHz11VeMGTOG0aNHM3fuXMrLywGIj4/n73//O2PHjmX06NFs2rQJgDvuuIO5c+cybdo0hgwZwmOPPeZaxmuvvcaECRNIS0vjqquuwmazAfDpp58yduxYUlNTmT59OllZWTz99NM8/PDDpKWl8d1333HHHXfw4IMPArB69WomTZpESkoKM2fO5NChQ4BVMjBv3jwmTJhAYmIi3333ncdt9u6773LKKacAVonD2WefzSmnnEJCQgK33HKLa7xFixYxevRoRo0axbx58wC49dZbKS0tJS0tjdmzZ9eat7ftP23aNG666SbGjx/Po48+6nG7Ll++nJSUFMrKyiguLmbkyJGsW7eOrKwsV8mKzWbjz3/+M0cddRQpKSk888wzgFWp6rrrriMpKYkTTjiB/fv3u9I0ZcoUvvzyywYHfqVU82m1taDd3XQTrF7t33mmpcEjjzR8urCwMF566SVmzZrFwoUL+fTTT/nll1/qnU5EOOGEE/jss88oKCjgzDPPJDMzs9o4s2fPJjIyki1btvDII4+4AnBxcTHjx4/n4Ycf5q677uLOO+/k8ccfZ8GCBWRmZhIZGUl+fn6tZT777LNkZWWxevVqwsLCyMvLo6ysjEsuuYSvvvqKxMRELrroIp566iluuukmAHr06MGqVat48sknefDBB3nuuecA2LRpE9988w2FhYUkJSVxzTXXsHXrVt566y1++OEHwsPDufbaa3n99dc59dRTueKKK1i6dCmDBw8mLy+Pbt26cfXVVxMbG8uf/vQnwLoRcLroootYuHAhxx57LPPnz+fOO+/kEccOqqqqYtmyZSxevJg777yzWlE+QGZmJl27diUyMtI1bPXq1aSnpxMZGUlSUhLXX389oaGhzJs3j5UrV9K1a1dOOukkPvjgAxYsWMDjjz/Oai8HmbftD1BRUcGKFSsoKysjISHB43Y988wzue222ygtLWXOnDmMGjWKrKws1/yff/55OnfuzPLlyykvL2fy5MmcdNJJpKenk5GRwYYNG9i3bx8jRoxg7ty5AISEhDBs2DB+/fVXxo0bV8eRp5QKFs0BB8DIkSO58MILmTFjBi+88AIRERE+TXfeeefx5ptv8uabb3L++efX+v31119nzZo17NixgwcffJDs7GzAutj+7ne/A2DOnDl8//33AKSkpDB79mxee+01wsJq32t9+eWXXHXVVa7funXrRkZGBoMHDyYxMRGAiy++mKVLl7qmOfvsswEYN25ctSBx+umnExkZSY8ePejVqxf79u3jq6++YuXKlRx11FGkpaXx1VdfsX37dn7++WemTp3q+itMzVKEmgoKCsjPz+fYY49tUJqccnJy6NmzZ7Vh06dPp3PnzkRFRTFixAiys7NZvnw506ZNo2fPnoSFhTF79uxqy/HG2/YHXMPr2q7z58/niy++YMWKFdVy406ff/45r7zyCmlpaUycOJHc3Fy2bNnC0qVLOf/88wkNDaVv374cf/zx1abr1asXe/bsqTf9SqngaBM54MbkVANt7dq1dOnSpVqxYH0mTJjA2rVr6dChg+tC7UnPnj0ZO3Ysv/zyi8fnyc6arp988glLly7lo48+4p577mHt2rUeA3FDOHORoaGh1Yo33XOXzt+MMVx88cXcd9991ebx0UcfNSkNvqbJKTo6utZfbzyl11/caxrHxMTUO35ubi5FRUVUVlZSVlZWaxpjDAsXLuTkk0+uNnzx4sV1zresrIzo6OgGpFwp1Zw0BxwA7733Hnl5eSxdupTrr7/eY/GvNwsWLKi3wk9JSQnp6ekMHToUALvd7qqw88Ybb3DMMcdgt9vZuXMnxx13HPfffz8FBQUUFRVVm8+JJ57IM8884wo+eXl5JCUlkZWVxdatWwF49dVXXTnPhpo+fTrvvPOO6yYkLy+P7OxsJk2axNKlS11F7Hl5eQB07NiRwsLCWvPp3LkzXbt2dT3fbWiaEhMTPeaMa5owYQLffvstBw8exGazsWjRItdywsPDqays9Didp+1fU13b9aqrruIf//gHs2fPdj13dnfyySfz1FNPuZa/efNmiouLmTp1Km+99RY2m42cnBy++eabatNt3rzZ5xr6SqnmpwG4Cc4//3yOPvpoMjIy6N+/P88//zwHDx7k1ltv5bnnniMxMZHrrruOG2+8EbAqRfXv359du3aRkpLC5ZdfXmuep556Kscdd5zH5c2ePZu0tDTGjRvHJZdc4nq2FxMTw7Jlyxg1ahRff/018+fPx2azMWfOHEaPHs2YMWO44YYb6NKlS7X5XX755QwcOJCUlBRSU1N54403iIqK4sUXX+S3v/0to0ePJiQkhKuvvrpR22fEiBHcfffdnHTSSaSkpHDiiSe6ioOfffZZzj77bFJTU13FtGeccQbvv/++qxKWu5dffpk///nPpKSksHr1aubPn+9zOmJiYhg6dKgr+HkTFxfHggULOO6440hNTWXcuHGcddZZAFx55ZWuIn1P86+5/Wvytl1feeUVwsPDueCCC7j11ltZvnw5X3/9dbVpL7/8ckaMGMHYsWMZNWoUV111FVVVVcycOZOEhARGjBjBRRddxNFHH+2aZt++fURHR9OnTx+ft5NSqnmJMSbYaajX+PHjzYoVK6oN27hxI8nJyUFKUcsSGxtbK3erqnv//fdZuXIld999t9/n3RK3/8MPP0ynTp247LLLav2m545SzUdEVhpjxnv6rU08A1aqPjNnziQ3NzfYyWg2Xbp04cILLwx2MpRSdQhKABaRLKAQsAFV3u4OlG9aWu6rpfJU5O8PLXH7X3rppcFOglKqHsHMAR9njDlY/2hKKaVU26OVsJRSSqkgCFYANsDnIrJSRK70NIKIXCkiK0RkhfPVfkoppVRbEawAfIwxZixwKvB7EZlacwRjzLPGmPHGmPE132KklFJKtXZBCcDGmN2Oz/3A+8CEYKSjKZwvuRgxYgQjR47k0UcfrXcabY6wboFsjtATYwzHH388hw8fDtgyVqxYwQ033NCgaaZNm4bzb3cnnHCCq+EJpVTb0uwBWERiRKSjsx84CVjX3OloqrCwMP71r3+xYcMGfv75Z5544gk2bNhQ5zTaHGHdAtkcoSeLFy8mNTWVTp06+TyNszUnX40fP75a61ANdeGFF/Lkk082enqlVMsVjBxwb+B7EfkVWAZ8YozxvVHdFiIuLo6xY8cC1isUk5OT2b17tzZH2EKaI1y/fr1ruSkpKR4bp3/99dddb7rKyspi+PDhzJ49m+TkZGbNmkVJSYlrvefNm8fYsWP5z3/+47HJwvfff5/p06djjCEnJ4fExET27t3LkiVLmDFjBmC1mjR37lwmTJjAmDFj+PDDDwEoLS3lvPPOIzk5mZkzZ1JaWupK45lnnsmiRYs8HgdKqdat2f+GZIzZDqTWO2JDBLk9wqysLNLT05k4caI2R9hCmiN8+umnufHGG5k9ezYVFRUec64//PCDq21dsFosev7555k8eTJz587lySefdKWle/furFq1ij179jBp0qRaTRbOnDmTd999lyeeeIJPP/2UO++8kz59+rhuUgDuuecejj/+eF544QXy8/OZMGECJ5xwAs888wwdOnRg48aNrFmzxnVjB9C1a1fKy8vJzc2le/fu9R5HSqnWQ/+G1ERFRUWcc845PPLII66iTG2OMPjNER599NHce++93H///WRnZ3tsFSgvL4+OHTu6vg8YMIDJkyfX2o5wpFnBuposXLhwIffddx+RkZEe99/nn3/OggULSEtLY9q0aZSVlbFjxw6WLl3KnDlzAGufpaSkVJtOmxVUqm1qG6+iDFJ7hJWVlZxzzjnMnj3bFQSctDnC4DZHeMEFFzBx4kQ++eQTTjvtNJ555pla7eWGhYVht9sJCbHuQ92bEaz53ZdmBXft2kVISAj79u2rNl8nYwzvvvsuSUlJDVo/bVZQqbZJc8CNZIzhsssuIzk5mZtvvrnab9ocoSWYzRFu376dIUOGcMMNN3DWWWexZs2aWuMkJSWxfft21/cdO3bw008/Ad6bFfTWZGFVVRVz585l0aJFJCcn89BDD9Wa9uSTT2bhwoU4G0BJT08HYOrUqbzxxhsArFu3rlpajTHs3bvXa90BpVTrpQG4kX744QdeffVVvv76a9LS0khLS2Px4sXaHKGbYDZH+PbbbzNq1CjS0tJYt26dx9rUp59+uquyHFgB+YknniA5OZlDhw5xzTXX1JrGW5OF9957L1OmTOGYY47hoYce4rnnnmPjxo3Vpr399tuprKwkJSWFkSNHcvvttwNwzTXXUFRURHJyMvPnz3ftV4CVK1cyadKkJpdcKKVaHm2OsA1oic3htQY5OTlcdNFFfPHFF2RlZTFjxgzWrWtZ/4i78cYbOfPMM5k+fbrf5qnnjlLNp67mCDUHrNqtuLg4rrjiioC+iKOpRo0a5dfgq5RqObRcqw3Q3G/jnXvuuQB06tSpxeV+Aa644opgJ0EpFSCaA1ZKKaWCQAOwUkopFQQagJVSSqkg0ACslFJKBYEG4CaYO3cuvXr1YtSoUT6NP3v2bJKSkhg1ahRz586lsrIS0OYInQLZHGFOTo6rUYTGqO/lKP62Z88eZs2a1aBpLrnkEtfxct5553lsgEIp1XJoAG6CSy65hE8/9b0hp9mzZ7Np0ybWrl1LaWmpqyED0OYIIbDNET700ENNqlHc1ADs/tpOX/Tt29cVTBvjmmuu4YEHHmj09EqpwNMA3ARTp06t1ZBAXc0RnnbaaYgIIsKECRPYtWuXazptjtC/zRHW9O6773LKKacAVonD2WefzSmnnEJCQgK33HKLazxPTQ3eeuutlJaWkpaWxuzZs2vN29v2nzZtGjfddBPjx4/n0Ucf9bhdly9fTkpKCmVlZRQXFzNy5EjWrVtHVlaWq2TFZrPx5z//maOOOoqUlBRXC07GGK677jqSkpI44YQTqr13fMqUKXz55ZcNDvxKqebTJv4HfNOnN7F672q/zjOtTxqPnPJIg6fzpTnCyspKXn31VR599FHXMG2O0L/NEbrLzMyka9eu1RqMWL16Nenp6URGRpKUlMT1119PaGgo8+bNq9XU4IIFC3j88cdZ7aXJS2/bH6CiooIVK1ZQVlZGQkKCx+165plnctttt1FaWsqcOXMYNWpUtZamnn/+eTp37szy5cspLy9n8uTJnHTSSaSnp5ORkcGGDRvYt28fI0aMYO7cuYDVQtawYcP49ddfq73aUinVcmgOOADqa47w2muvZerUqUyZMqXacG2O0LPGNEfozvn+aXfTp0+nc+fOREVFMWLECLKzs+tsarAu3rY/HGnGsK7tOn/+fL744gtWrFhRLTfu9Pnnn/PKK6+QlpbGxIkTyc3NZcuWLSxdupTzzz+f0NBQ+vbtW6u1J23GUKmWrU3kgBuTUw00b80R3nnnnRw4cKBaQ/BO2hyhf9PkFB0dTVlZmcdp6pqusRrajGFubi5FRUVUVlZSVlZWaxpjDAsXLuTkk0+uNnzx4sV1zlebMVSqZdMccAB4a47wueee47PPPmPRokW12op10uYI/dMcobvExESPOeOavDU1CBAeHu6qtV6Tp+1fU13b9aqrruIf//gHs2fPdj13dnfyySfz1FNPuZa/efNmiouLmTp1Km+99RY2m42cnBy++eabatNt3rzZ5xr6Sqnm1yZywMFy/vnns2TJEg4ePEj//v258847Oeuss7j11lv56quvGDBggKs5wpdffpmrr76aQYMGcfTRRwNW0WnNZvVOPfVUr8ubPXs20dHRlJeXe2yO8O6776ZXr16ui/KcOXMoKCjAGOO1OcLNmzeTkpJCeHg4V1xxBdddd52rOUJnhTJ/NEdot9sJDw/niSeeYNKkSa7mCO12O7169eKLL77gjDPOYNasWXz44YeuCmFOzu1XUlLCkCFDePHFF31OR0xMDEOHDmXr1q0MGzbM63juTQ0aYzj99NM566yzALjyyitJSUlh7NixvP7667XmX3P71+TezKP7dn3llVcIDw/nggsuwGaz8Zvf/Iavv/6aIUOGuKa9/PLLycrKYuzYsRhj6NmzJx988AEzZ87k66+/ZsSIEQwcONB1XAHs27eP6Oho+vTp4/N2Uko1L22OsA3Q5gjr9/7777Ny5Uruvvtuv8+7JW7/hx9+mE6dOnHZZZfV+k3PHaWaT13NEWoOWLULM2fOJDc3N9jJaDZdunThwgsvDHYylFJ10ADcBrS03FdLdfnllwdkvi1x+1966aXBToJSqh5aCUsppZQKAg3ASimlVBBoAFZKKaWCQAOwUkopFQQagBvJ+ZKLESNGMHLkyGrvdfZGmyOsWyCbI/TEGMPxxx/P4cOHA7aMFStWcMMNNzRommnTpuH8290JJ5zganhCKdW2aABupLCwMP71r3+xYcMGfv75Z5544gk2bNhQ5zTaHGHdAtkcoSeLFy8mNTWVTp06+TyNszUnX40fP75a61ANdeGFF/Lkk082enqlVMulAbiR4uLiGDt2LGC9QjE5OZndu3drc4QtpDnC9evXu5abkpLisXH6119/3fWmq6ysLIYPH87s2bNJTk5m1qxZlJSUuNZ73rx5jB07lv/85z8emyx8//33mT59OsYYcnJySExMZO/evSxZsoQZM2YAVqtJc+fOZcKECYwZM4YPP/wQgNLSUs477zySk5OZOXMmpaWlrjSeeeaZLFq0yONxoJRq3drE/4C3bLmJoqLVfp1nbGwaCQmP+DRuVlYW6enpTJw4UZsjbCHNET799NPceOONzJ49m4qKCo851x9++KFaoxgZGRk8//zzTJ48mblz5/Lkk0+60tK9e3dWrVrFnj17mDRpUq0mC2fOnMm7777LE088waeffsqdd95Jnz59XDcpAPfc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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_iperf_results(\n", + " {\n", + " '1x1MBps connection (not proxied)': One1MBStraight,\n", + " '2x1MBps connections (proxied)': Two1MBAggregate,\n", + " '1x2MBps connection (not proxied)': One2MBStraight,\n", + " '2x2MBps connections (proxied)': Two2MBAggregate,\n", + " },\n", + " 'Proxing bandwidth scaling/overhead'\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_iperf_results(\n", + " {\n", + " '2x1MBps connections (proxied)': Two1MBAggregate,\n", + " '1x1MBps+1x2MBps connections (proxied)': One1MBOne2MBAggregate,\n", + " '2x2MBps connections (proxied)': Two2MBAggregate,\n", + " },\n", + " 'Imbalanced connections add',\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAFrCAYAAAAJo1qOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABCu0lEQVR4nO3deXhU5f3//+c7LAmbooACggIWUFkSFlGoshStqFgrti5FKyrV1rWL/amttWpbv7aX20dbW60LreJCFVzQYlFZROsCioIiVgUFMayyJoEA798fZyZMkslkSGbmJDOvx3XlmsyZmTPvAyfzmvs+97mPuTsiIiKSWXlhFyAiIpKLFMAiIiIhUACLiIiEQAEsIiISAgWwiIhICBTAIiIiIVAAi6SBmR1sZlvNrEnk/mwzmxj5fYKZzavjeuv82obOzH5lZveHXYdIpiiARerIzJab2XEx988ys6/NbIS7f+Hurd19V5g1NlRmNtLMVsYuc/eb3X1iWDWJZJoCWCQFzOw84C/Aye4+J+x6RKThUwCL1JOZXQzcBpzg7q9HlnUzMzezpkm8/jAzm2lmG8xsqZmdEfNYOzN71sw2m9lbwKG1rOsYM3vdzDaa2QozmxBZvq+Z/dPM1prZ52Z2nZnlRR6bYGbzzOzWSAt+mZmdGLPO2Wb2OzN7zcy2mNl/zKx9zONHx7zne2Y2Muax/c3sITNbFVn302bWCvg30DnSTb/VzDqb2Q1m9kjMa79jZh9E1jvbzA6PeWy5mV1lZu+b2SYze8LMCmr7txZpSBTAIvXzE+AmYLS7z9/bF0fCaCbwKHAAcBZwj5kdEXnKX4AyoBNwQeSnpnUdQhBsdwMdgCJgYeThu4F9gR7ACOCHwPkxLz8KWAq0B/4EPGBmFvP4DyLPPwBoDlwVec+DgOeB3wP7R5Y/ZWYdIq97GGgJ9Im89g533wacCKyKdNO3dvdVVbalF/AY8NPItrwAPGdmzWOedgYwBugO9Acm1PRvI9IQKYBF6ud44A1gUR1fPxZY7u4PuftOd38XeAr4fmQA1+nA9e6+zd0XA/9IsK4fAC+5+2PuXu7u6919YWQ9ZwHXuvsWd19O0GI/N+a1n7v73yPHrP9BEPgHxjz+kLt/7O6lwBSCcAc4B3jB3V9w993uPhOYD5xkZp0IgvbH7v51pKZku+fPBJ5395nuXg7cCrQAhsU85y53X+XuG4DnYmoSaRQUwCL18xOgF3B/lRZjsg4Bjop0s240s43AeKAjQcuvKbAi5vmfJ1hXV+DTOMvbA82qvPZz4KCY+8XRX9y9JPJr63iPAyUxjx1C8GUhtv5jCAK8K7DB3b9OUHNNOsfW6+67Cf4d4tZcpSaRRkEBLFI/q4HRwLHAPXV4/Qpgjru3jflp7e4/AdYCOwmCLOrgWtYV7xjxOqCcICxj1/NlHeqN954PV6m/lbvfEnlsfzNrG+d1tV2GbVVsvZEvN11TVLNIg6AAFqmnyPHL0cAYM7tjL18+HehlZueaWbPIz5FmdnikO3gqcIOZtYwcFz4vwbomA8eZ2Rlm1jQygKsosp4pwB/MrE3kWPHPgUcSrCtZjwCnmNkJZtbEzAoipxh1cfevCI5J32Nm+0W2bXjkdauBdma2bw3rnQKcbGajzawZ8AtgO/B6CmoWaRAUwCIp4O5fAN8Cvmdm/28vXrcF+DbBMdpVBN2qfwTyI0+5jKBrtRiYBDxUSw0nEYTVBoIBWIWRhy8HtgGfAfMIBn09mGydCd5zBXAq8CuCFvsK4Jfs+Ww5l6D1/RGwhmBQFe7+EcEgq88iXdedq6x3KcHx5bsJWvCnAKe4+4761izSUJh7bT1BIiIikmpqAYuIiIRAASwiIhICBbCIiEgIFMAiIiIhUACLiIiEQAGcQywwr8pE+983sxn1XOddZvZJZGL8gampVrJNmva/8ZH9blHkghCFtb9KpGHQaUg5xsz6Av8CBhBMc/guMMbd401hmMz6TiI4x/Qkggn9/8/dj0pRuZJl0rD/DQOWuPvXkWC/QfufNBYK4BxkZn8imJShFbDF3X9Xj3XdC8x298ci95cCIyOzIIlUk8r9r8p69wMWu/tBtT5ZpAGo9VqlkpVuBN4BdgCDqz5oZk8AveO87nZ3/2eVZQdR+WIBKyPLFMBSk1Tuf7EuJJj6UqRRUADnIHffFvmQ2+ru2+M8fmYIZUmOSMf+Z2ajCAL4mBSUKJIRCuDctTvyU81etkC+pPLVerqgK9ZI7VK1/2Fm/YH7gRPdfX1KqxRJIwWwVLOXLZBngcvM7HGCQVibdPxX6mNv9j8zO5jgilHnuvvH6atKJPUUwFJfLxCMgP6E4KLo54dbjuSY64F2BJc8BNjp7tWOK4s0RBoFLSIiEgJNxCEiIhICBbCIiEgIFMAiIiIhUACLiIiEQAEsIiISgkZxGlL79u29W7duYZchIiKyVxYsWLDO3TvEe6xRBHC3bt2YP39+2GWIiIjsFTP7vKbH1AUtIiISAgWwiIhICBTAIiIiIVAAi4iIhEABLCIiEgIFsIiISAgUwCIiIiFQAIuIiIRAASwiIhICBbCIiEgIFMAiItKgbdkCmzeHXUXqKYBFRASA1ath9+6wq6hs+3Y46igYNAi2bQu7mtRSAIuICB9+CIccApdcEnYllf3pT7BkCXzyCfzqV2FXk1oK4Cp274Y33oBPPwX3sKsREUk/d7jssqC1ee+98NJLYVcU+OQT+MMf4Mwz4fLL4a67YM6csKtKHfNGkDKDBw/2dF+OcO1aePDBYOdbtixY1rYtDBwIgwcH3R+DBkGPHmCW/HpffBEOOgj69k1L2SIi9fb443D22XD77fC3v8GOHbBoEbRuXftr3ffuMzFZ7jBmTNAgWrIE9t0XCguD5e+9l1xtDYGZLXD3wfEey+kWsDvMmwfjx0OXLnDNNXDwwfDPf8J99wXfujZtgjvuCH7/xjfg+ONh587k1j9vHpx4YrDTXHYZbNiQ3u0REdlbW7bAz38eNDCuuCJoiHz+OVx7be2vfeQROOAAePLJ1Nc1ZQr85z9BC7hzZ2jVCh56KGggXXNN6t9v3TqYODHDn9Pu3uB/Bg0a5Kmya5f7/Pnuv/+9e79+7uC+zz7ul13mvnhx/NeUlQWvuf764Pk331z7+5SUuPfq5d6tm/sll7jn5bm3a+f+t7+579yZss2Ja9cu91dfDbape3f3u+9O7/uJSGbt3u3+ySfuDz8cfC59+mnd1/WLX7ibub/55p5lV1wRfNbNnVvz6x59NPhca9HCvWlT96lT615DVRs3unfs6D5oUPXPy5/+NKjtlVdS935vvOHetat78+buL7yQuvW6uwPzvYZsCz1ck/mJBnBdg2v16mBHHT/evUOHYKvB/cgj3e+7z33LluTWs3u3+/e/796smfvChYmfe/XVwXvMnBncX7jQffjwYNnAge6vvVa3bUlU2xtvuP/sZ+4HHRS8T0GBe+/ewR9XKv84RCSzduxwnzPH/ZZb3E891f2AA/Z8joF727buzz239+tdvNi9SRP3H/2o8vKtW4Mv79/4hvu2bdVfN2VK8Lrhw92/+sr96KODEH7mmTptXjWXXRaE+/z51R/bts29Z8+gcZPsZ3dNdu92v+uu4DO9W7f471dfWRPA113nPnSo+yOPBK3SRMrKgucNG7ZnJ+3QIQjhhx92Ly6uyz+l+9q1wTezfv1qruHtt4Od88ILKy/fvdv9scf2BOQ557ivWFG3OmI9/3yw80DwDe4733GfPNl98+agJX700UEYv/FG/d9LRDJnxw73v/99z983BOHzwx8GvWnvvef+8cfuAwYEj113XfINld273UeOdN9//+BzraqXXw7WedVVlZdPnRp8vn3zm8FnjHvQYh0yJAiy2r4IrFoV9NCVl8d//K23gkbD5ZfXvI5584Ln/OQnid8rkc2b3c84I9jGU05x37Ch7utKJGsC+MEHg50Pgm+Av/61+xdfVN7YFSuCnTD6DbFnT/ff/S74ZrNrVyr+Od2nTw/Wfc011R/bvj0I586d3b/+Ov7rt2xxv/Za9/z8oPvm+uuDb5x18eijwTfP/v3dJ00K/hCqWr3avUeP4AtIfbqqRCQzduxwf+CBoBUa7a3717/c16yJ//ySEvcLLgiee9xxNT8v1qOPBs//299qfs7FFwct0eiX92efDUL26KPdN22q/Nyvv3YfPLjmbty33goaQE2bBu/buXPwGbp06Z7nlJcHXyY6dYr/WRbr5z8P1vPSS7Vva1WLFgW9g3l57n/8Y+qyIZ6sCWD34B/qxReDVl5eXvBz2mlBq/Z73wu+mZkF32hefDF9/7ATJwbvXbUr+cYbg3/VZ5+tfR2ffbbnG1jnzkGA7k29f/1rsK0jRlT/Y6jqo4/c99sv2OnWr0/+PUQkc8rL3R96KPjCDMEx0OnTg9ZqMu6/P/hi37Vr4h6vTZuCkBs8OHGLedMm9y5d3A8/PGj5Nm8evKamcNywIQjQ/Hz3GTOC7XniiaDnEtzbtHG/8sqgh27s2ODzGoKeyr//PRhfA0EXd22i42w6dHAfNSp4jwEDglq7dw+27+CDg8+8AQOCFvvxxwfZ0bKl+4EHus+eXfv71FdWBXCsZcuCY63t2gVbst9+7r/8ZRBs6bZ5c9AtdOihe45DLFoUfDs8++y9W9e8ecE33Ogf3Jw5tb/m//2/4PljxwY7YjLmzAn+gIYPr70LP+qhhx7yhx56KLkni6RQLu57o0d7xTiRZ59NPnhjLVgQBFCzZsEA0HvvDQZTxXYz//znwZf3t96qfX3//rdXdH8PGFB7V+26de6FhcFhry5dgtcdeqj7//1f9YbCqlVBC/Sww/a8x5gxyW/3ggVBN/qxxwbhesopwTidc88NGkkTJgSNnLFj3b/1rSCkCwvdv/vd4L0zIWsDOKq0NNjB4g0WSKfZs/cchygvD0K0Q4f4x1Nqs2tXcMw6usMOHOh+223Vd5Ldu/cM8PrBD4Kuqr0xefKe1yazk+fih6A0DLm275WX7/k8qUvwxtqwIQiili33BBu4t28fhFWTJu4XXZT8+n76U/djjgnCNRlr1wYtztGjgy8StR2X3r3b/b//DQ4rpmJcTEOS9QEcpuhxiNNPD24ff7x+69u2LfimOHhwsL68vOCYzqRJwTGWiy8Olv/4x3XvXv/DH4J13HBD7c+dPXu2z85EP41IFbm2761aFfxd3nNP6ta5a5f78uVBK/b224PRzsccEzQWkg1TqZ9EAayZsOqprCyYLWvJEvjud2Hq1NTNCrN0KUyeHPx89hnk5QVTZV57bXByel3fxz2o9bXXghnA0jGLjYjsnXffDT5Lpk6F004LuxpJFc2ElUYFBfDYY/C978E996Q2zHr3hptuCuZDff11uPRS+POf4eab6/c+ZvDtb8P69fDll6mrV0Tqrrg4uD3wwHDrkMxpGnYB2aCwEP71r/St3wyGDg1+UqWoKLhduDCYhrMmkydPBmD8+PGpe3ORJOTavrd6dXDbsWO4dUjmqAWco/r3D24XLkz8vPLycsrLy9Nej0hVubbvqQWcexTAOapNm+DiErUFsIhkRnFx8HfZqlXYlUimKIBzWFGRAlikoSguVus31yiAc1hREXz6KWzeHHYlIrJ6tY7/5hoNwsph0YFY778PxxwT/zm9evXKWD0isXJt3ysuhr59w65CMiltLWAz62pms8zsQzP7wMyujCy/wcy+NLOFkZ+T0lWDJBY7Eromw4YNY9iwYZkoR6SSXNv3iovVAs416WwB7wR+4e7vmFkbYIGZzYw8doe735rG95YkdO4MHToEEwCISHjKymDjRh0DzjVpC2B3/wr4KvL7FjNbAhyUrveTvWdW+0CsSZMmATBhwoQMVCSyRy7te2vWBLdqAeeWjAzCMrNuwADgzciiy8zsfTN70Mz2y0QNEl9RESxeDDl0uqVIgxM9B1gBnFvSHsBm1hp4Cvipu28G/gocChQRtJBvq+F1F5nZfDObv3bt2nSXmbOKimDHDvjoo7ArEcldCuDclNYANrNmBOE72d2nArj7anff5e67gb8DQ+K91t3vc/fB7j64Q4cO6SwzpyUzEEtE0kuzYOWmdI6CNuABYIm73x6zvFPM004DFqerBqldr17BBSUUwCLhic4DfcAB4dYhmZXOUdDfBM4FFpnZwsiyXwFnm1kR4MBy4OI01iC1aNoU+vWrOYD79OmT0XpEonJp3ysuhv33h/z8sCuRTErnKOh5QLyL5r2QrveUuikqgqeeCq4TXPUyh0ceeWQoNYnk0r6nc4Bzk6aiFAYMgA0bYOXK6o/l2hVppOHIpX1P80DnJgWwVAzEijchx+TJkyuuyyqSSbm072ke6NykABb69Qu6njUQSyQc6oLOTQpgoXVr6NlTASwShq1bYds2BXAuUgALoGsDi4RF5wDnLgWwAEEAL1sWTAgvIpkTPQdYLeDco+sBC1D52sDDh8cuLwqjHJGc2fc0DWXuUgALUHlKSgWwNAS5su8pgHOXuqAFgE6dgmNQVY8Dl5SUUFJSEkpNkttyZd9bvRry8qB9+7ArkUxTAEuFeAOxpkyZwpQpU8IoR3Jcrux7xcXQoQM0aRJ2JZJpCmCpEL028I4dYVcikjt0DnDuUgBLhaIiKC+HJUvCrkQkdyiAc5cCWCro2sAimbd6tc4BzlUKYKnQsye0aKEAFskUd7WAc5lOQ5IKTZpA//6VA3jw4MGh1SO5LRf2vY0bgzEXCuDcpACWSoqK4Ikn9lwbuG/fvmGXJDkqF/Y9nQOc29QFLZUMGBB8K//88+D+pk2b2LRpU6g1SW7KhX0vOg2ljgHnJgWwVNKjR3D7xRfB7bRp05g2bVp4BUnOyoV9Ty3g3KYAlkpatAhut28Ptw6RXKAAzm0KYKkkPz+4VQCLpF9xMTRrBvvtF3YlEgYFsFQSDeCysnDrEMkF0XOAzcKuRMKgAJZKCgqCW7WARdJP5wDnNp2GJJVUbQEPHTo0vGIkp+XCvldcDF26hF2FhEUBLJVUPQbcu3fv8IqRnJYL+15xMeTAfCNSA3VBSyVVu6DXrVvHunXrwitIcla273u7dsHatToHOJcpgKWSql3Q06dPZ/r06eEVJDkr2/e99euDENYx4NylAJZKdBqSSGboHGBRAEsleXnBeYkKYJH0ik5DqQDOXQpgqSY/X+cBi6RbtAWsY8C5SwEs1RQUqAUskm7qghadhiTV5OfvCeDhw4eHW4zkrGzf94qLoWVLaN067EokLApgqSa2C7pH9PJIIhmW7fve6tVB61fTUOYudUFLNbFd0MXFxRRH+8pEMijb9z1NQykKYKkmtgt6xowZzJgxI9yCJCdl+75XXKwBWLlOASzVaBS0SPqpBSwKYKlGo6BF0qu8PJgJSwGc2xTAUk1sF7SIpN6aNcGtAji3KYClGnVBi6SXJuEQ0GlIEkdsF/To0aPDLUZyVjbve5qEQ0ABLHHEtoC7du0abjGSs7J539M80ALqgpY4YlvAK1asYMWKFeEWJDkpm/c9dUELpDGAzayrmc0ysw/N7AMzuzKyfH8zm2lm/4vc7peuGqRuYgdhvfzyy7z88svhFiQ5KZv3veJi2Hff4Muu5K50toB3Ar9w9yOAo4FLzewI4BrgZXfvCbwcuS8NiAZhiaSXzgEWSGMAu/tX7v5O5PctwBLgIOBU4B+Rp/0D+G66apC60XnAIukVnQdacltGjgGbWTdgAPAmcKC7fxV5qBjQUZAGJj8fdu+GnTvDrkQkO6kFLJCBADaz1sBTwE/dfXPsY+7ugNfwuovMbL6ZzV+7dm26y5QY+fnBrbqhRdJD80ALpPk0JDNrRhC+k919amTxajPr5O5fmVknYE2817r7fcB9AIMHD44b0pIe0YEh27fDmDFjwi1Gcla27nulpbB5s1rAksYANjMDHgCWuPvtMQ89C5wH3BK5fSZdNUjdRFvA27dD5876lJBwdMzShNI5wBKVzhbwN4FzgUVmtjCy7FcEwTvFzC4EPgfOSGMNUgexXdCfffYZkP0XR5eGJ1v3PZ0DLFFpC2B3nwdYDQ9n7xxzWSC2C/rNN+cC2fchKA3f3LnZue9tjoyEads21DKkAdBMWFJNbBe0iKRWdHCjJuEQBbBUo1HQIumjAJYoBbBUE9sFLSKppQCWKAWwVKMuaJH0iQZwixbh1iHh0+UIpZrYLuixY8eGW4zkrGzd90pLg1u1gKXWADazPKAQ6AyUAovdPe7kGZIdYrug27dvH24xkrOydd9TF7RE1RjAZnYocDVwHPA/YC1QAPQysxLgXuAf7r47E4VK5sS2gJcuXQpA7969Q6xIclG27nvRAI7+nUnuStQC/j3wV+DiyJzNFczsAOAHBBNt/CPOa6URi20B//e//wWy70NQGr5s3ffKyqB5c8jTCJycV2MAu/vZCR5bA9yZjoIkfLGDsJpqlIBISpWVqftZArV+BzOz75tZm8jvvzGzqWY2MP2lSVh0HrBI+pSWagS0BJLpBPmNu28xs2MIppB8gKBrWrKUzgMWSR+1gCUqmQDeFbk9GbjP3Z8HmqevJAlb88j/rgJYJPUUwBKVzBG+L83sXuB44I9mlo8m8MhqZkEIl5XBaaedFnY5kqOydd9TAEtUMgF8BjAGuNXdN5pZJ+CX6S1LwlZQELSA991337BLkRyVrfueAliiam3JunsJsBw40cwuBzq5+3/SXZiEKz8/CODFixezePHisMuRHJSt+54CWKKSGQV9PcG5vu2A9sBDZnZduguTcOXnBx8U8+fPZ/78+WGXIzkoW/c9jYKWqGS6oMcDhe5eBmBmtwALCSbqkCwV7YIWkdRSC1iikhlMtYpgCsqofODL9JQjDUW0C1pEUksBLFHJtIA3AR+Y2UzACUZDv2VmdwG4+xVprE9CEu2CFpHUUgBLVDIBPC3yEzU7PaVIQ6IuaJH0UABLVK0B7O7/MLPmwGEELeCl7r4j7ZVJqKIt4DPOOCPsUiRHZeu+pwCWqGSuB3wSwaUHPwUM6G5mF7v7v9NdnISnoAC2bIGWLVuGXYrkqGzd9zQKWqKS6YK+HRjl7p9AxXWCnwcUwFksOghr4cKFABQVFYVaj+SebNz3du2C8nK1gCWQzCjoLdHwjfgM2JKmeqSBiHZBL1y4sOKDUCSTsnHfi46rUAALJGgBm9m4yK/zzewFYArBMeDvA29noDYJkQZhiaRe9MwCBbBA4i7oU2J+Xw2MiPy+lsrnBUsW0nnAIqmnAJZYNQawu5+fyUKkYdF5wCKppwCWWIm6oO9K9EJNwJHd1AUtknqlpcGtRkELJO6C/jGwmODY7yqCU5AkR0S7oH/wg/GY/uclBOPHjw+7hJRTC1hiJQrgTgQDrs4EdgJPAE+6+8YM1CUhy88Hd4BmNGsWdjWSi5pl4Y6nAJZYNZ6G5O7r3f1v7j4KOB9oC3xoZudmqjgJT/QD4s033+bttzXoXTLv7bezb99TAEusZK4HPBC4EjiHYPKNBekuSsKXnx/cfvTRB3zwwQfhFiM56YMPsm/fUwBLrESDsG4CTgaWAI8D17r7zkwVJuGKBvDu3eHWIZJNFMASK9Ex4OuAZUBh5OdmC0bjGODu3j/95UlYoh8QCmCR1NEoaImVKIC7Z6wKaXCiLeBgIJaIpIJawBIrUQB/4Z7449fMrLbnSOOkLmiR1FMAS6xEATzLzJ4CnnH3L6ILI9cGPgY4D5gFTEprhRKK6AfEoEETGDo03FokN02YMCHsElJOASyxEgXwGOAC4DEz6w5sJJgDugnwH+BOd3837RVKKKItYE1HKZI6CmCJlWgu6DLgHuAeM2sGtAdKNRFHboh+QCxf/jqvvw7Dhg0LtyDJOa+//jqQXfteWRk0aQJNk7kSu2S9ZK4HjLuXu/tXCt/cEW0Br1//MR9//HG4xUhO+vjj7Nv3Sks1Alr2SCqAJfdoEJZI6pWVqftZ9khbAJvZg2a2xswWxyy7wcy+NLOFkZ+T0vX+Uj/RDwmNcRdJHQWwxEpmKso/JrMsjkkEA7mqusPdiyI/LySxHgmBWsAiqacAlljJtICPj7PsxNpe5O5zgQ17XZE0CHsm4miWlVelkYavWbPs2/cUwBIr0VzQPwEuAXqY2fsxD7UBXqvHe15mZj8E5gO/cPev67EuSZPoh0Tz5uPJwsuySiOQjdcDLi1VAMseiVrAjwKnAM9GbqM/g9z9nDq+31+BQ4Ei4CvgtpqeaGYXmdl8M5u/du3aOr6d1FW0Bbx9e7h1iGSTsjKNgpY9El0PeJO7LweuBjzmp7WZHVyXN3P31e6+y913A38HhiR47n3uPtjdB3fo0KEubyf1EO352759DnPmzAm3GMlJc+Zk376nLmiJlcwx4OeB6ZHbl4HPCK4LvNfMrFPM3dOAxTU9V8JlFv2gWMayZcvCLkdy0LJl2bfvKYAlVq3zsbh7v9j7ZjaQ4NhwQmb2GDASaG9mK4HfAiPNrIigJb0cuHivK5aMyc/XKGiRVFIAS6y9nhDN3d8xs6OSeN7ZcRY/sLfvJ+FRAIuklgJYYtUawGb285i7ecBAYFXaKpIGo6BAASySShoFLbGSaQG3ifl9J8Gx4KfSU440JPn5sHNnS1q2DLsSyUUts3DH0yhoiZXMMeAbAcxsn+Cub0l7VdIg5OfDp5+ewa23hl2J5KIzzjgj7BJSTl3QEiuZqSgHm9ki4H1gkZm9Z2aD01+ahK2gQOcBi6SKuwJYKkvmNKQHgUvcvZu7dwMujSyTLJefD506vcRLL70UdimSg156Kbv2vR07glsFsEQlcwx4l7u/Gr3j7vPMbGcaa5IGoqAAWrdeycqVYVciuWhllu14ZWXBrQJYopIJ4Dlmdi/wGMH5u2cCsyPnA+Pu76SxPgmRTkMSSZ3S0uBWASxRyQRwYeT2t1WWDyAI5G+ltCJpMBTAIqkTbQFrFLREJTMKelQmCpGGp6AgGDgiIvWnLmipKpmJOPKB04Fusc9395vSV5Y0BPn5sGXLPuyzT9iVSC7aJ8t2PAWwVJVMF/QzwCZgAaCTUnJIfj48//w4Hn447EokF40bNy7sElJKASxVJRPAXdx9TNorkQZH5wGLpI4CWKpK5jzg182sX+1Pk2yTnw/HHjuDGTNmhF2K5KAZM7Jr39MoaKmqxhZwZPYrjzznfDP7jKAL2gimpOyfmRIlLPn50KFDMcXFYVciuag4y3Y8jYKWqhJ1QY/NWBXSIEW/qetUJJH6Uxe0VFVjALv75wBmtn+ch3VBhhyQnx/c6lQkkfpTAEtVyRwDfgdYC3wM/C/y+3Ize8fMBqWzOAlXNIDVAhapPwWwVJVMAM8ETnL39u7eDjgRmA5cAtyTzuIkXAUFsH59O1q3bhd2KZKD2rVrR7t22bPvKYClqmROQzra3X8UvePu/zGzW9394sgkHZKl8vPhuedO4bbbwq5EctEpp5wSdgkppVHQUlUyAfyVmV0NPB65fyaw2syaAOqczGLRDwqdCyxSf2VlYAbNm4ddiTQUyXRB/wDoAjwd+Tk4sqwJcEa6CpPw5efDKac8x9tvPxd2KZKDnnvuOZ57Lnv2vbKy4EutWdiVSEORzMUY1gGX1/DwJ6ktRxqS/Hxo1249mzeHXYnkovXr14ddQkpFA1gkKpmLMcwimJCjEnfXZQizXPTDQqchidSfAliqSuYY8FUxvxcQXBlpZ3rKkYZEpyGJpI4CWKpKpgt6QZVFr5nZW2mqRxoQBbBI6pSWahpKqSyZLujYmbDygEHAvmmrSBqMggIoLu7IgAFhVyK5qGPHjmGXkFJqAUtVyXRBLyA4BmwEXc/LgAvTWZQ0DPn5MGPGGM46K+xKJBeNGZNdV0FVAEtVyXRBd89EIdLwRLugozP4iEjdKYClqmS6oJsBPwGGRxbNBu519/I01iUNQEEBjBs3lQ0bAMaFXY7kmKlTpwIwblx27HtlZbDPPmFXIQ1JMl3QfwWasWfe53MjyyamqyhpGPLzYZ99NrNTY94lBJuz7AT00lK1gKWyZAL4SHcvjLn/ipm9l66CpOHQKGiR1Ckr0yhoqSyZqSh3mdmh0Ttm1gPYlb6SpKFoGvl6pgAWqT8dA5aqkp2IY5aZfUYwEvoQ4Py0ViUNghnk5WkmLJFUUABLVQkDOHLFo0KgJ9A7snipu+v6ODli9eoutG8fdhWSi7p06RJ2CSmlAJaqEgawu+8ys7Pd/Q7g/QzVJA3IggXH0blz2FVILjruuOPCLiGlFMBSVTJd0K+Z2Z+BJ4Bt0YXu/k7aqpIGIz9f5wGL1Fd5OezapQCWypIJ4KLI7U0xyxzQ1ZBywHHHTWHffUGXfpZMmzJlCgBnnNH4973ol1iNgpZYycyENSoThUjDVFBQoguISyhKSkrCLiFlogGsFrDESmYmrHyCSxB2i32+u99U02ske+Tl6TQkkfpSAEs8yXRBPwNsIrgog0Y/5xidhiRSfwpgiSeZAO7i7tl1WRJJWl5eMHhEROpOASzxJDMT1utm1m9vV2xmD5rZGjNbHLNsfzObaWb/i9zut7frlczasqU7q1frgliSed27d6d79+zY90pLg1sFsMSqsQUcCc7dkeecH5kJazvBbFju7v1rWfck4M/AP2OWXQO87O63mNk1kftX1718Sbevvx7BkiVhVyG5aMSIEWGXkDIaBS3xJOqCPog9pyDtNXefa2bdqiw+FRgZ+f0fBJc2VAA3YPn5sF1H/kXqRV3QEk+iAF7m7p+n+P0OdPevIr8XAwemeP2SYl27To58ax8fdimSYyZPngzA+PGNf99TAEs8iQL4ADP7eU0Puvvt9Xljd3czq3F8rZldBFwEcPDBB9fnraQemjQpJy+ZkQIiKVZeXh52CSmjAJZ4En20NgFaA21q+KmL1WbWCSByu6amJ7r7fe4+2N0Hd+jQoY5vJ/Wl84BF6k8BLPEkagF/lYbJNp4FzgNuidw+k+L1S4qZKYBF6kujoCWeRC3gek1AaGaPAf8FepvZSjO7kCB4jzez/wHHRe5LAxadiEMhLFJ3GgUt8SRqAY+uz4rd/ex0rFcyq2nTXnz8MezYoW/vklm9evUKu4SUURe0xFNjALv7hkwWIg1Tq1bDeP11XctUMm/YsGFhl5Ay0QDOzw+3DmlYNL5VEop+YOhcYJG6KyuD5s3RGQVSiXYHSWjTpklMmDCp4hu8SKZMmjSJSZMmhV1GSqgHSeJRAEtC0W/sagGL1F1pqQJYqlMAS0IKYJH6KyvTCGipTgEsCUUDWF3QInWnLmiJRwEsCakFLFJ/CmCJJ9F5wCJ07NiHxx5TAEvm9enTJ+wSUkYBLPEogCWhHj2O5O231QUtmXfkkUeGXULKKIAlHnVBS0JNm5bTrFm5WsCSceXl5VlzRSSNgpZ4FMCS0JtvTmb8+MkKYMm4yZMnV1wTuLHTKGiJRwEsCWkUtEj9qQta4lEAS0IaBS1SfwpgiUcBLAkpgEXqTwEs8SiAJSGLXBVaXdAidadBWBKPTkOShIqKivjzn6F797ArkVxTVFQUdgkpoxawxKMAloQGDSpi0SI48cSwK5Fcky0BvGsXlJdrFLRUpy5oSaikpIT99ivRMWDJuJKSEkpKSsIuo96ifztqAUtVCmBJaMqUKXz3u1MUwJJxU6ZMYcqUKWGXUW/R8RMKYKlKASy1ysvTICyRulIAS00UwFKrvDydhiRSV6Wlwa0CWKpSAEutFMAidacWsNREASy1MlMXtEhdRf92NApaqtJpSJLQ4MGDefpptYAl8wYPHhx2CSmhFrDURAEsCfXt25evv94zI5ZIpvTt2zfsElJCASw1URe0JLRp0ybatNmkLmjJuE2bNrFp06awy6g3BbDURAEsCU2bNo3DDpumLmjJuGnTpjFt2rSwy6g3jYKWmiiApVYaBS1Sd2oBS00UwFIrjYIWqTuNgpaaKIClVmoBi9SdWsBSEwWw1EoBLFJ3CmCpiU5DkoSGDh3Khx+qC1oyb+jQoWGXkBIKYKmJAlgS6t27N02bqgUsmde7d++wS0iJ0lJo0gSa6tNWqlAXtCS0bt068vPXsXNncGFxkUxZt24d69atC7uMeisrU+tX4lMAS0LTp0/HbDqgVrBk1vTp05k+fXrYZdRbWZlGQEt8CmCpVV5kL1EAi+w9tYClJgpgqVU0gDUQS2TvKYClJgpgqZVawCJ1pwCWmiiApVYKYJG6Ky1VAEt8GhgvCQ0fPpxXXw1+Vxe0ZNLw4cPDLiEl1AKWmiiAJaEePXqwZEnwu1rAkkk9evQIu4SUKCuD1q3DrkIaolAC2MyWA1uAXcBOdx8cRh1Su+LiYsrLAToqgCWjiouLAejYsWPIldRPWRm0bx92FdIQhdkCHuXujf8s+yw3Y8YMgmuiT1AXtGTUjBkzAJgwYUK4hdSTuqClJhqEJbXSICyRutMgLKlJWAHswH/MbIGZXRRSDZIkBbBI3akFLDUJqwv6GHf/0swOAGaa2UfuPjf2CZFgvgjg4IMPDqNGiTALbtUFLbL3FMBSk1BawO7+ZeR2DTANGBLnOfe5+2B3H9yhQ4dMlygx1AIWqTvNBS01yXgL2MxaAXnuviXy+7eBmzJdhyRn9OjRrF8f/K4AlkwaPXp02CXUm7tawFKzMLqgDwSmWdCv2RR41N1nhFCHJKFr1660aRP8ri5oyaSuXbuGXUK97dgR3CqAJZ6MB7C7fwYUZvp9pW5WrFgRafl2VQtYMmrFihVA4w7i0tLgVgEs8WgmLEno5Zdfjvym84Als6L7XmM+Dzj6N6MAlnh0HrAkpVkzHQMW2VvRANYgLIlHASxJyc9XAIvsLbWAJREFsCQlP1+DsET2lgJYElEAS1IKCtQCFtlbCmBJRIOwJKExY8YA8LvfKYAls6L7XmOmUdCSiAJYEopeCk5d0JJpjf0yhKAWsCSmAJaEPvvsMwAKCnqoBSwZFd33evToEXIldadR0JKIAlgSmjs3uEZGfr4CWDIruu9lQwCrBSzxaBCWJEVd0CJ7TwEsiSiAJSkaBS2y9xTAkogCWJKiiThE9p5GQUsiCmBJirqgRfaeWsCSiAZhSUJjx44F4JVX1AKWzIrue41ZWRmYQfPmYVciDZECWBJq3749oBawZF5032vMysqC1m9w+XORyhTAktDSpUsBKCjorRawZFR03+vdu3fIldRdNIBF4lEAS0L//e9/AcjPVwBLZkX3PQWwZCsNwpKkqAtaZO+VliqApWYKYElKQQHs3g07d4ZdiUjjoRawJKIAlqTk5we36oYWSV5ZmeaBlpopgCUp0QBWN7RI8tQClkQ0CEsSOu200wB4/PHgvlrAkinRfa8xUwBLIo02gMvLy1m5ciVlapJlxMCBq/j3v2H9eti0KexqJFsVFBTQpUsXmjVrxr777ht2OfVWVgb77BN2FdJQNdoAXrlyJW3atKFbt26YznJPm9LIZLYlJS0wg298Q8e0JD3cnfXr17Ny5Uq6d+/O4sWLAejbt2/IldWdRkFLIo32GHBZWRnt2rVT+KbZtm3b2LZtG3mRPcU93Hoke5kZ7dq1q+jVmj9/PvPnzw+5qvpRF7Qk0mgDGFD4ZlA0gHfvDrcOyW7Z9jetUdCSSKMO4LBdcMEFHHDAAUl3kY0fP57evXvTt29fLrjgAsrLywGYNGkSZsZLL71U8dynn34aM+PJJ58EYOTIkfTu3ZuioiIOP/xw7rvvvtRvUES87Yp+LlZtAf/617/m6quvrrj/+eef06NHDzZu3MjIkSM5+OCD8ZgXffe736V169YALF++nBYtWlBUVERhYSHDhg2rmH4wm9x5552UlJRU3D/ppJPYuHFj2t7v3Xff5cILL0zb+gGuv/76SvtrbZYvX16xPy1atIgJEyakqbKGRS1gSUQBXA8TJkxgxowZST9//PjxfPTRRyxatIjS0lLuv//+isf69evH49GhxsBjjz1GYWFhpddPnjyZhQsX8tprr3H11VezY8eOetc/e/bsuMurbldNLeDrrruOp59+miVLlgBw5ZVX8rvf/Y62bdsC0LZtW1577TUANm7cyFdffVXp9YceeigLFy7kvffe47zzzuPmm2+u1zY1RFUD+IUXXqj490mHm2++mSuuuCLp5++sw+wqN910E8cdd9xevw6CfX3lypV88cUXdXp9Y6IAlkQUwPUwfPhw9t9//0rLdu7cyZFHHlkRbNdeey2//vWvgaDlY2aYGUOGDGHlypUVrzv22GN56623KC8vZ+vWrXzyyScUFRXFfd+tW7fSqlUrmjRpAkDr1q352c9+Rp8+fRg9ejRr164F4K677uKII46gf//+nHXWWfXarl27dvLDHx7Jq69W3q4WLVpwxx13cOmll/LCCy+wZcsWxo8fX/G6s846q+KLxdSpUxk3blyN77t582b2228/IOgVOPXUUxk5ciQ9e/bkxhtvBIJj0ieffDKFhYX07duXJ554otp6PvnkE4477jgKCwsZOHAgn376Ke7OL3/5S/r27Uu/fv0qXjd79mxGjhzJ9773PQ477DDGjx9f0WLv1q0bv/3tbxk4cCD9+vXjo48+qqjhggsuYMiQIQwYMIBnnnkm8m+0i6uuuoq+ffvSv39/7r77bu666y5WrVrFqFGjGDVqVMV6161bB8Dtt99O37596du3L3feeScQtBYPP/xwfvSjH9GnTx++/e1vVwyGq+3/dMuWLbz//vsVX95uuOEGzj33XIYOHUrPnj35+9//XrHdxx57LN/5znc44ogjKCsr4/zzz6dfv34MGDCAWbNmAXDqqafyz3/+E4B777234v92woQJFb0zCxYsYMSIEQwaNIgTTjih4kvWggULKCwspLCwkL/85S+V6jzllFMqfeHMRu4ahCW1cPcG/zNo0CCv6sMPP6z4/cor3UeMSO3PlVdWe8u4li1b5n369Km0bPHixX7YYYf5zJkzvaioyLdv317p8R07dviAAQN87ty57u7+0EMP+aWXXuo/+9nP/LnnnvNHHnnEb7jhBj/vvPP8X//6l7u7jxgxwnv16uX9+vXzgoIC/9vf/laxPsAfeeQRd3e/8cYb/dJLL3V3906dOnlZWZm7u3/99dfVaj/vvPN81qxZCbdr586dvnPnTi8pcX/88cXes2f87Ro3bpy3b9/eP/roo4plI0aM8DfeeMP79evnO3fu9OOPP96XLVvmrVq1qniPgoICLyws9B49enjHjh39888/r/g36dixo69bt85LSkq8T58+/vbbb/uTTz7pEydOrHiPjRs3Vqt9yJAhPnXqVHd3Ly0t9W3btvmTTz7pxx13nO/cudOLi4u9a9euvmrVKp81a5bvs88+vmLFCt+1a5cfffTR/uqrr7q7+yGHHOJ33XWXu7v/5S9/8QsvvNDd3a+99lp/+OGHK/5de/bs6Vu3bvV77rnHTz/9dC8vL3d39/Xr11esZ+3atRX1Re/Pnz/f+/bt61u3bvUtW7b4EUcc4e+8844vW7bMmzRp4u+++667u3//+9+veL/a/k9feeUVHzduXMX93/72t96/f38vKSnxtWvXepcuXfzLL7/0WbNmecuWLf2zzz5zd/dbb73Vzz//fHd3X7JkiXft2tVLS0u9uLjYDz30UJ87d6737NmzYpui++aOHTt86NChvmbNGnd3f/zxxyvW069fP58zZ467u1911VWV/k7mzZvnY8eOrVa/+56/7W3btvm2bdviPqcx2LHDHdx/97uwK5EwAfO9hmxTCzgN+vTpw7nnnsvYsWN58MEHaV7latyXXHIJw4cP59hjj620PNpafPzxxzn77LOrrXfy5Mm8//77fPHFF9x66618/vnnAOTl5XHmmWcCcM455zBv3jwA+vfvz/jx43nkkUdo2jQ44+zFF1+kqKiIoqIinn32WSZOnEhRURFHHXVU3G1p0qQJTZo0wQwOPbQPZ5wRf7suvfRSjjzyyGpXrmnSpAnHHHMMjz/+OKWlpXTr1q3S49Eu6E8//ZQ777yTiy66qOKx448/nnbt2tGiRQvGjRvHvHnz6NevHzNnzuTqq6/m1VdfrXau6JYtW/jyyy8rJnEoKCigZcuWzJs3j7PPPpsmTZpw4IEHMmLECN5++20AhgwZQpcuXcjLy6OoqIjly5dXrC/aYh80aFDF8v/85z/ccsstFBUVMXLkSMrKyvjiiy946aWXuPjiiyv+rav2IlQ1b948TjvtNFq1akXr1q0ZN24cr776KgDdu3ev6AGJfe94/6exvvrqKzp06FBp2amnnkqLFi1o3749o0aN4q233qrY7u7du1fUcs455wBw2GGHccghh/Dxxx9z4IEHctNNNzFq1Chuu+22atu0dOlSFi9ezPHHH09RURG///3vWblyJRs3bmTjxo0MHz4cgHPPPbfS6w444ABWrVqV8N+nZcuWtGzZMuFzGrLoFAVqAUtNGu15wLEiPXcNyqJFi2jbti1r1qyptPzGG29k7dq13HvvvdVeM2TIEBYtWkTLli3p1atXjevu0KEDAwcO5M033+SQQw6p9nh0JOnzzz/P3Llzee655/jDH/7AokWLOOGEEzjhhBOAoBtxwoQJjBw5ssb3ih67bNIk+CD88MP425WXl0deXvzvc2eddRannXYaN9xwQ43vA/Cd73yH888/v9p2xN7v1asX77zzDi+88ALXXXcdo0eP5vrrr0+43trkR+fZJPjCEHtMNPpY7HJ356mnnkrrZfKq1hTtgo73fxobxC1atKg2OU28f0eAVq1aJVXLokWLaNeuXdzAdHf69OlTcenAqNoGmZWVldGiluHBCxcuBKjxUExDF/1v0ChoqYlawGkwdepUNmzYwNy5c7n88ssrPozuv/9+XnzxRR577LEaw+qWW26pdSBSSUkJ7777LoceeigAu3fvrjge9+ijj3LMMcewe/duVqxYwahRo/jjH//Ipk2b2Lp1615vS0lJCSUlJeTlwSuvTOXrr6tvV22OPfZYrr322rit+ljz5s2r2CaAmTNnsmHDBkpLS3n66af55je/yapVq2jZsiXnnHMOv/zlL3nnnXcqraNNmzZ06dKFp59+GoDt27dTUlLCscceyxNPPMGuXbtYu3Ytc+fOZciQIXv1bxF1wgkncPfdd1ccK3733XeBoMV+7733VgT1hg0bKmrasmVL3H+Xp59+mpKSErZt28a0adOq9YrESub/9PDDD+eTTz6ptOyZZ56hrKyM9evXM3v2bI488si4tUyePBmAjz/+mC+++ILevXvz1ltv8e9//5t3332XW2+9lWXLllV6Xe/evVm7dm1FAJeXl/PBBx/Qtm1b2rZtW9EbE1131Mcff1zr2QMLFy6sCOHGSC1gqY0CuB7OPvtshg4dytKlS+nSpQsPPPAA69at45prruH++++nV69eXHbZZVx55ZUA/PjHP2b16tUMHTqUoqIibrrppmrrPPHEEysG61Q1fvx4ioqKGDRoEBMmTGDQoEFA0JJ566236Nu3L6+88grXX389u3bt4pxzzqkYVHPFFVckPfI2drv69+/PI488wvr16/jLX67h1lurb1dtzIyrrrqK9u3bV3vs008/rTgN6Ve/+lWlkeFDhgzh9NNPp3///px++ukMHjyYRYsWMWTIEIqKirjxxhu57rrrqq3z4Ycf5q677qJ///4MGzaM4uJiTjvtNPr3709hYSHf+ta3+NOf/kTHjh2Tqr+q3/zmN5SXl9O/f3/69OnDb37zGwAmTpzIwQcfXPE+jz76KAAXXXQRY8aMqfb/OnDgQCZMmMCQIUM46qijmDhxIgMGDKjxfZP5Pz3ssMPYtGlTpcDv378/o0aN4uijj+Y3v/kNnTt3rrbuSy65hN27d9OvXz/OPPNMJk2aBMCPfvQjHnzwQTp37sxtt93GBRdcUOm0subNm/Pkk09y9dVXU1hYSFFREa+//joADz30EJdeeilFRUWVXgMwa9YsTj755Fr+pRs3BbDUxqr+YTREgwcP9qoz4ixZsoTDDz88pIoaltatW9epdZuM6Gjd/fdvzzvvwEEHQadOaXmrSiZNmsT8+fP585//nP43yzJ33HEHbdq0YeLEidxwww20bt2aq666KuyyKmzfvp0RI0Ywb968uMexo3/b0S8BjfWc4fffh8JCePJJOP30sKuRsJjZAncfHO8xtYAlKdHDiJoJq+H7yU9+UukYckPzxRdfcMstt8QN32yiFrDUJrv/AnJEulq/scyCn0x1mEQHiMneKygoqBh1XNvAtzD07NmTnj17hl1G2imApTYKYEko9rQTM7WAJXNiJ3RpjDQKWmrTqAPY3bNu8vaGJna0dl6eroYk6RU7JqVZs2YhVlJ/agFLbRrtMeCCggLWr19fbXSlpFb0coSgAJb08sj1gAsiifX2229XTJbSGCmApTaNtgXcpUsXVq5cWTHv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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_iperf_results(\n", + " {\n", + " '1x2MBps+1xYMBps connections (proxied)': Two2MBAggregateKillOneRecoverOne,\n", + " },\n", + " 'Killed connection',\n", + " events={15: 'Y = 0', 40: 'Y = 2'},\n", + ")" + ] }, { "cell_type": "code", "execution_count": null, - "outputs": [], - "source": [], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -545,16 +316,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.8.6" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } \ No newline at end of file diff --git a/manual/One1MBOne2MBAggregate.json b/manual/One1MBOne2MBAggregate.json new file mode 100644 index 0000000..cdfef66 --- /dev/null +++ b/manual/One1MBOne2MBAggregate.json @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "2.2.2.2", + "local_port": 29166, + "remote_host": "2.2.2.3", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:26:22 UTC", + "timesecs": 1604330782 + }, + "connecting_to": { + "host": "2.2.2.3", + "port": 5201 + }, + "cookie": "ibtrixfglpm4ziikj53nxsiqqcqeoralyxqk", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000154, + "seconds": 1.0001540184020996, + "bytes": 1564764, + "bits_per_second": 12516184.277297227, + "retransmits": 123, + "snd_cwnd": 2920, + "rtt": 7187, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000154, + "seconds": 1.0001540184020996, + "bytes": 1564764, + "bits_per_second": 12516184.277297227, + "retransmits": 123, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000154, + "end": 2.000262, + "seconds": 1.000108003616333, + "bytes": 1477176, + "bits_per_second": 11816131.815032909, + "retransmits": 126, + "snd_cwnd": 11656, + "rtt": 6875, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000154, + "end": 2.000262, + "seconds": 1.000108003616333, + "bytes": 1477176, + "bits_per_second": 11816131.815032909, + "retransmits": 126, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000262, + "end": 3.000124, + "seconds": 0.999862015247345, + "bytes": 1173120, + "bits_per_second": 9386255.160096623, + "retransmits": 106, + "snd_cwnd": 7276, + "rtt": 4062, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000262, + "end": 3.000124, + "seconds": 0.999862015247345, + "bytes": 1173120, + "bits_per_second": 9386255.160096623, + "retransmits": 106, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000124, + "end": 4.000237, + "seconds": 1.0001130104064941, + "bytes": 1613456, + "bits_per_second": 12906189.466282126, + "retransmits": 154, + "snd_cwnd": 8736, + "rtt": 6562, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000124, + "end": 4.000237, + "seconds": 1.0001130104064941, + "bytes": 1613456, + "bits_per_second": 12906189.466282126, + "retransmits": 154, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000237, + "end": 5.000083, + "seconds": 0.99984598159790039, + "bytes": 1632100, + "bits_per_second": 13058811.297249323, + "retransmits": 139, + "snd_cwnd": 13116, + "rtt": 8437, + "rttvar": 5625, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000237, + "end": 5.000083, + "seconds": 0.99984598159790039, + "bytes": 1632100, + "bits_per_second": 13058811.297249323, + "retransmits": 139, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.7e-05, + "end": 1.00037, + "seconds": 1.0004169940948486, + "bytes": 1665296, + "bits_per_second": 13316814.966796653, + "retransmits": 135, + "snd_cwnd": 2920, + "rtt": 3750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.7e-05, + "end": 1.00037, + "seconds": 1.0004169940948486, + "bytes": 1665296, + "bits_per_second": 13316814.966796653, + "retransmits": 135, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.00037, + "end": 2.00016, + "seconds": 0.9997900128364563, + "bytes": 1652468, + "bits_per_second": 13222520.559587207, + "retransmits": 141, + "snd_cwnd": 8784, + "rtt": 6562, + "rttvar": 7500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 1.00037, + "end": 2.00016, + "seconds": 0.9997900128364563, + "bytes": 1652468, + "bits_per_second": 13222520.559587207, + "retransmits": 141, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.00016, + "end": 3.000162, + "seconds": 1.0000020265579224, + "bytes": 1188976, + "bits_per_second": 9511788.723809205, + "retransmits": 85, + "snd_cwnd": 8748, + "rtt": 5000, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.00016, + "end": 3.000162, + "seconds": 1.0000020265579224, + "bytes": 1188976, + "bits_per_second": 9511788.723809205, + "retransmits": 85, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000162, + "end": 4.00008, + "seconds": 0.999917984008789, + "bytes": 1653700, + "bits_per_second": 13230685.127755152, + "retransmits": 136, + "snd_cwnd": 14576, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.000162, + "end": 4.00008, + "seconds": 0.999917984008789, + "bytes": 1653700, + "bits_per_second": 13230685.127755152, + "retransmits": 136, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.00008, + "end": 5.00015, + "seconds": 1.0000699758529663, + "bytes": 1640632, + "bits_per_second": 13124137.627275085, + "retransmits": 134, + "snd_cwnd": 7348, + "rtt": 10000, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.00008, + "end": 5.00015, + "seconds": 1.0000699758529663, + "bytes": 1640632, + "bits_per_second": 13124137.627275085, + "retransmits": 134, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.00015, + "end": 6.000167, + "seconds": 1.0000170469284058, + "bytes": 1730636, + "bits_per_second": 13844851.987799376, + "retransmits": 150, + "snd_cwnd": 11632, + "rtt": 6562, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.00015, + "end": 6.000167, + "seconds": 1.0000170469284058, + "bytes": 1730636, + "bits_per_second": 13844851.987799376, + "retransmits": 150, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.000167, + "end": 7.00004, + "seconds": 0.99987298250198364, + "bytes": 1591640, + "bits_per_second": 12734737.534499528, + "retransmits": 135, + "snd_cwnd": 8784, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.000167, + "end": 7.00004, + "seconds": 0.99987298250198364, + "bytes": 1591640, + "bits_per_second": 12734737.534499528, + "retransmits": 135, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.00004, + "end": 8.0002, + "seconds": 1.0001599788665771, + "bytes": 1685640, + "bits_per_second": 13482963.010859421, + "retransmits": 152, + "snd_cwnd": 10196, + "rtt": 7500, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.00004, + "end": 8.0002, + "seconds": 1.0001599788665771, + "bytes": 1685640, + "bits_per_second": 13482963.010859421, + "retransmits": 152, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.0002, + "end": 9.0001, + "seconds": 0.999899983406067, + "bytes": 1695752, + "bits_per_second": 13567372.962432323, + "retransmits": 126, + "snd_cwnd": 5912, + "rtt": 5312, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.0002, + "end": 9.0001, + "seconds": 0.999899983406067, + "bytes": 1695752, + "bits_per_second": 13567372.962432323, + "retransmits": 126, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.0001, + "end": 10.000057, + "seconds": 0.999957025051117, + "bytes": 1637940, + "bits_per_second": 13104083.147303415, + "retransmits": 144, + "snd_cwnd": 4368, + "rtt": 6562, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.0001, + "end": 10.000057, + "seconds": 0.999957025051117, + "bytes": 1637940, + "bits_per_second": 13104083.147303415, + "retransmits": 144, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000057, + "end": 11.000131, + "seconds": 1.000074028968811, + "bytes": 1614784, + "bits_per_second": 12917315.744435633, + "retransmits": 143, + "snd_cwnd": 8736, + "rtt": 5000, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000057, + "end": 11.000131, + "seconds": 1.000074028968811, + "bytes": 1614784, + "bits_per_second": 12917315.744435633, + "retransmits": 143, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000131, + "end": 12.000019, + "seconds": 0.999888002872467, + "bytes": 1571368, + "bits_per_second": 12572352.067317873, + "retransmits": 139, + "snd_cwnd": 8808, + "rtt": 5000, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000131, + "end": 12.000019, + "seconds": 0.999888002872467, + "bytes": 1571368, + "bits_per_second": 12572352.067317873, + "retransmits": 139, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.000019, + "end": 13.000091, + "seconds": 1.0000720024108887, + "bytes": 1609028, + "bits_per_second": 12871297.235567775, + "retransmits": 125, + "snd_cwnd": 5816, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.000019, + "end": 13.000091, + "seconds": 1.0000720024108887, + "bytes": 1609028, + "bits_per_second": 12871297.235567775, + "retransmits": 125, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000091, + "end": 14.000032, + "seconds": 0.99994099140167236, + "bytes": 1622108, + "bits_per_second": 12977629.791743625, + "retransmits": 124, + "snd_cwnd": 14588, + "rtt": 8437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000091, + "end": 14.000032, + "seconds": 0.99994099140167236, + "bytes": 1622108, + "bits_per_second": 12977629.791743625, + "retransmits": 124, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000032, + "end": 15.000477, + "seconds": 1.0004450082778931, + "bytes": 1278728, + "bits_per_second": 10225273.668573763, + "retransmits": 118, + "snd_cwnd": 2920, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000032, + "end": 15.000477, + "seconds": 1.0004450082778931, + "bytes": 1278728, + "bits_per_second": 10225273.668573763, + "retransmits": 118, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000477, + "end": 16.000115, + "seconds": 0.999638020992279, + "bytes": 1105184, + "bits_per_second": 8844673.58616834, + "retransmits": 98, + "snd_cwnd": 8712, + "rtt": 7812, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000477, + "end": 16.000115, + "seconds": 0.999638020992279, + "bytes": 1105184, + "bits_per_second": 8844673.58616834, + "retransmits": 98, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 16.000115, + "end": 17.000105, + "seconds": 0.99998998641967773, + "bytes": 1602004, + "bits_per_second": 12816160.335650943, + "retransmits": 138, + "snd_cwnd": 11644, + "rtt": 7812, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 16.000115, + "end": 17.000105, + "seconds": 0.99998998641967773, + "bytes": 1602004, + "bits_per_second": 12816160.335650943, + "retransmits": 138, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000105, + "end": 17.999962, + "seconds": 0.999857008457184, + "bytes": 1671208, + "bits_per_second": 13371576.022285311, + "retransmits": 143, + "snd_cwnd": 14576, + "rtt": 8437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000105, + "end": 17.999962, + "seconds": 0.999857008457184, + "bytes": 1671208, + "bits_per_second": 13371576.022285311, + "retransmits": 143, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.999962, + "end": 19.000346, + "seconds": 1.0003839731216431, + "bytes": 1661408, + "bits_per_second": 13286162.470721461, + "retransmits": 152, + "snd_cwnd": 4368, + "rtt": 8125, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.999962, + "end": 19.000346, + "seconds": 1.0003839731216431, + "bytes": 1661408, + "bits_per_second": 13286162.470721461, + "retransmits": 152, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000346, + "end": 20.000159, + "seconds": 0.9998130202293396, + "bytes": 1590252, + "bits_per_second": 12724395.204497129, + "retransmits": 155, + "snd_cwnd": 7276, + "rtt": 3750, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000346, + "end": 20.000159, + "seconds": 0.9998130202293396, + "bytes": 1590252, + "bits_per_second": 12724395.204497129, + "retransmits": 155, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.000159, + "end": 21.000486, + "seconds": 1.0003269910812378, + "bytes": 1700216, + "bits_per_second": 13597281.810119014, + "retransmits": 145, + "snd_cwnd": 4356, + "rtt": 4687, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.000159, + "end": 21.000486, + "seconds": 1.0003269910812378, + "bytes": 1700216, + "bits_per_second": 13597281.810119014, + "retransmits": 145, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000486, + "end": 22.000096, + "seconds": 0.99961000680923462, + "bytes": 1655448, + "bits_per_second": 13248750.922645979, + "retransmits": 145, + "snd_cwnd": 5816, + "rtt": 4062, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000486, + "end": 22.000096, + "seconds": 0.99961000680923462, + "bytes": 1655448, + "bits_per_second": 13248750.922645979, + "retransmits": 145, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.000096, + "end": 23.000106, + "seconds": 1.0000100135803223, + "bytes": 1635032, + "bits_per_second": 13080125.021117475, + "retransmits": 127, + "snd_cwnd": 11620, + "rtt": 7187, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.000096, + "end": 23.000106, + "seconds": 1.0000100135803223, + "bytes": 1635032, + "bits_per_second": 13080125.021117475, + "retransmits": 127, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.000106, + "end": 24.00029, + "seconds": 1.0001840591430664, + "bytes": 1656548, + "bits_per_second": 13249945.226435946, + "retransmits": 124, + "snd_cwnd": 5912, + "rtt": 7812, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.000106, + "end": 24.00029, + "seconds": 1.0001840591430664, + "bytes": 1656548, + "bits_per_second": 13249945.226435946, + "retransmits": 124, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.00029, + "end": 25.000122, + "seconds": 0.99983197450637817, + "bytes": 1617812, + "bits_per_second": 12944671.034740385, + "retransmits": 135, + "snd_cwnd": 5828, + "rtt": 6875, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.00029, + "end": 25.000122, + "seconds": 0.99983197450637817, + "bytes": 1617812, + "bits_per_second": 12944671.034740385, + "retransmits": 135, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.000122, + "end": 26.000119, + "seconds": 0.99999701976776123, + "bytes": 1558240, + "bits_per_second": 12465957.151447389, + "retransmits": 139, + "snd_cwnd": 4368, + "rtt": 6250, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.000122, + "end": 26.000119, + "seconds": 0.99999701976776123, + "bytes": 1558240, + "bits_per_second": 12465957.151447389, + "retransmits": 139, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000119, + "end": 27.000241, + "seconds": 1.0001219511032104, + "bytes": 1582844, + "bits_per_second": 12661207.951722311, + "retransmits": 131, + "snd_cwnd": 2920, + "rtt": 7812, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000119, + "end": 27.000241, + "seconds": 1.0001219511032104, + "bytes": 1582844, + "bits_per_second": 12661207.951722311, + "retransmits": 131, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.000241, + "end": 28.000069, + "seconds": 0.99982798099517822, + "bytes": 1645156, + "bits_per_second": 13163512.374298586, + "retransmits": 128, + "snd_cwnd": 8736, + "rtt": 6875, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.000241, + "end": 28.000069, + "seconds": 0.99982798099517822, + "bytes": 1645156, + "bits_per_second": 13163512.374298586, + "retransmits": 128, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.000069, + "end": 29.000101, + "seconds": 1.0000319480895996, + "bytes": 1681356, + "bits_per_second": 13450418.284831485, + "retransmits": 134, + "snd_cwnd": 13092, + "rtt": 8125, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.000069, + "end": 29.000101, + "seconds": 1.0000319480895996, + "bytes": 1681356, + "bits_per_second": 13450418.284831485, + "retransmits": 134, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.000101, + "end": 30.00024, + "seconds": 1.0001389980316162, + "bytes": 1598868, + "bits_per_second": 12789166.33105397, + "retransmits": 131, + "snd_cwnd": 10196, + "rtt": 6875, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.000101, + "end": 30.00024, + "seconds": 1.0001389980316162, + "bytes": 1598868, + "bits_per_second": 12789166.33105397, + "retransmits": 131, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.00024, + "end": 31.000401, + "seconds": 1.0001610517501831, + "bytes": 1677964, + "bits_per_second": 13421550.435812142, + "retransmits": 122, + "snd_cwnd": 2920, + "rtt": 5312, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.00024, + "end": 31.000401, + "seconds": 1.0001610517501831, + "bytes": 1677964, + "bits_per_second": 13421550.435812142, + "retransmits": 122, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.000401, + "end": 32.000291, + "seconds": 0.9998900294303894, + "bytes": 1116732, + "bits_per_second": 8934838.5692868438, + "retransmits": 90, + "snd_cwnd": 13164, + "rtt": 8437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.000401, + "end": 32.000291, + "seconds": 0.9998900294303894, + "bytes": 1116732, + "bits_per_second": 8934838.5692868438, + "retransmits": 90, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.000291, + "end": 33.000095, + "seconds": 0.99980401992797852, + "bytes": 1567228, + "bits_per_second": 12540281.645300016, + "retransmits": 156, + "snd_cwnd": 8712, + "rtt": 6250, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.000291, + "end": 33.000095, + "seconds": 0.99980401992797852, + "bytes": 1567228, + "bits_per_second": 12540281.645300016, + "retransmits": 156, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.000095, + "end": 34.000203, + "seconds": 1.000108003616333, + "bytes": 1636480, + "bits_per_second": 13090426.186632503, + "retransmits": 135, + "snd_cwnd": 4356, + "rtt": 6562, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.000095, + "end": 34.000203, + "seconds": 1.000108003616333, + "bytes": 1636480, + "bits_per_second": 13090426.186632503, + "retransmits": 135, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.000203, + "end": 34.999972, + "seconds": 0.99976897239685059, + "bytes": 1684216, + "bits_per_second": 13476841.522394944, + "retransmits": 140, + "snd_cwnd": 7360, + "rtt": 3750, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.000203, + "end": 34.999972, + "seconds": 0.99976897239685059, + "bytes": 1684216, + "bits_per_second": 13476841.522394944, + "retransmits": 140, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 34.999972, + "seconds": 34.999972, + "bytes": 55482892, + "bits_per_second": 12681814.03116551, + "retransmits": 4655, + "max_snd_cwnd": 14588, + "max_rtt": 10000, + "min_rtt": 3750, + "mean_rtt": 6554, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.001177, + "seconds": 34.999972, + "bytes": 55474700, + "bits_per_second": 12679505.034930684, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 34.999972, + "seconds": 34.999972, + "bytes": 55482892, + "bits_per_second": 12681814.03116551, + "retransmits": 4655, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.001177, + "seconds": 35.001177, + "bytes": 55474700, + "bits_per_second": 12679505.034930684, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 4.3023790509619726, + "host_user": 1.3513767947850961, + "host_system": 2.9505855068115081, + "remote_total": 3.0206659231543473, + "remote_user": 0.767978076685345, + "remote_system": 2.2598019423008782 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/One1MBStraight.json b/manual/One1MBStraight.json new file mode 100644 index 0000000..8ec0224 --- /dev/null +++ b/manual/One1MBStraight.json @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "1.1.1.2", + "local_port": 27557, + "remote_host": "1.1.1.4", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:27:11 UTC", + "timesecs": 1604330831 + }, + "connecting_to": { + "host": "1.1.1.4", + "port": 5201 + }, + "cookie": "ndrkm6kys5dqkr4yz5b2ajzoazk3epsy5i3s", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000302, + "seconds": 1.0003019571304321, + "bytes": 1052892, + "bits_per_second": 8420593.341797974, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58437, + "rttvar": 5625, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000302, + "seconds": 1.0003019571304321, + "bytes": 1052892, + "bits_per_second": 8420593.341797974, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000302, + "end": 2.000273, + "seconds": 0.99997097253799438, + "bytes": 1004912, + "bits_per_second": 8039529.3671332477, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58750, + "rttvar": 7500, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000302, + "end": 2.000273, + "seconds": 0.99997097253799438, + "bytes": 1004912, + "bits_per_second": 8039529.3671332477, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000273, + "end": 3.000389, + "seconds": 1.0001159906387329, + "bytes": 1002016, + "bits_per_second": 8015198.3120282171, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60312, + "rttvar": 4375, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000273, + "end": 3.000389, + "seconds": 1.0001159906387329, + "bytes": 1002016, + "bits_per_second": 8015198.3120282171, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000389, + "end": 4.000481, + "seconds": 1.0000920295715332, + "bytes": 1002016, + "bits_per_second": 8015390.34706069, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 61250, + "rttvar": 1875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000389, + "end": 4.000481, + "seconds": 1.0000920295715332, + "bytes": 1002016, + "bits_per_second": 8015390.34706069, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000481, + "end": 5.000077, + "seconds": 0.9995959997177124, + "bytes": 1004912, + "bits_per_second": 8042545.1905272836, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 61562, + "rttvar": 8750, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000481, + "end": 5.000077, + "seconds": 0.9995959997177124, + "bytes": 1004912, + "bits_per_second": 8042545.1905272836, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.000104, + "end": 1.00016, + "seconds": 1.000264048576355, + "bytes": 1002016, + "bits_per_second": 8014011.91156386, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.000104, + "end": 1.00016, + "seconds": 1.000264048576355, + "bytes": 1002016, + "bits_per_second": 8014011.91156386, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.00016, + "end": 2.000148, + "seconds": 0.9999880194664, + "bytes": 1002016, + "bits_per_second": 8016224.03864144, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 61875, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 1.00016, + "end": 2.000148, + "seconds": 0.9999880194664, + "bytes": 1002016, + "bits_per_second": 8016224.03864144, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000148, + "end": 3.00038, + "seconds": 1.0002319812774658, + "bytes": 1002016, + "bits_per_second": 8014268.8396766176, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60312, + "rttvar": 9375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.000148, + "end": 3.00038, + "seconds": 1.0002319812774658, + "bytes": 1002016, + "bits_per_second": 8014268.8396766176, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.00038, + "end": 4.000177, + "seconds": 0.999796986579895, + "bytes": 1004912, + "bits_per_second": 8040928.4163786285, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62187, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.00038, + "end": 4.000177, + "seconds": 0.999796986579895, + "bytes": 1004912, + "bits_per_second": 8040928.4163786285, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000177, + "end": 5.000063, + "seconds": 0.99988597631454468, + "bytes": 1002016, + "bits_per_second": 8017042.13269042, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62187, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000177, + "end": 5.000063, + "seconds": 0.99988597631454468, + "bytes": 1002016, + "bits_per_second": 8017042.13269042, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000063, + "end": 6.000262, + "seconds": 1.00019896030426, + "bytes": 1002016, + "bits_per_second": 8014533.42599106, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 2500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000063, + "end": 6.000262, + "seconds": 1.00019896030426, + "bytes": 1002016, + "bits_per_second": 8014533.42599106, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.000262, + "end": 6.999979, + "seconds": 0.99971699714660645, + "bytes": 1004912, + "bits_per_second": 8041571.7877617059, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62812, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.000262, + "end": 6.999979, + "seconds": 0.99971699714660645, + "bytes": 1004912, + "bits_per_second": 8041571.7877617059, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.999979, + "end": 8.000102, + "seconds": 1.0001230239868164, + "bytes": 1002016, + "bits_per_second": 8015141.945282992, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.999979, + "end": 8.000102, + "seconds": 1.0001230239868164, + "bytes": 1002016, + "bits_per_second": 8015141.945282992, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.000102, + "end": 9.000119, + "seconds": 1.0000170469284058, + "bytes": 1002016, + "bits_per_second": 8015991.3519693222, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62187, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.000102, + "end": 9.000119, + "seconds": 1.0000170469284058, + "bytes": 1002016, + "bits_per_second": 8015991.3519693222, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000119, + "end": 10.000039, + "seconds": 0.99992001056671143, + "bytes": 1002016, + "bits_per_second": 8016769.25682966, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60625, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000119, + "end": 10.000039, + "seconds": 0.99992001056671143, + "bytes": 1002016, + "bits_per_second": 8016769.25682966, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000039, + "end": 11.000034, + "seconds": 0.999994993209839, + "bytes": 1004912, + "bits_per_second": 8039336.2512696451, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000039, + "end": 11.000034, + "seconds": 0.999994993209839, + "bytes": 1004912, + "bits_per_second": 8039336.2512696451, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000034, + "end": 12.000082, + "seconds": 1.000048041343689, + "bytes": 1002016, + "bits_per_second": 8015742.9129397972, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60625, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000034, + "end": 12.000082, + "seconds": 1.000048041343689, + "bytes": 1002016, + "bits_per_second": 8015742.9129397972, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.000082, + "end": 13.000567, + "seconds": 1.0004849433898926, + "bytes": 1002016, + "bits_per_second": 8012242.5159536721, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.000082, + "end": 13.000567, + "seconds": 1.0004849433898926, + "bytes": 1002016, + "bits_per_second": 8012242.5159536721, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000567, + "end": 14.000172, + "seconds": 0.99960500001907349, + "bytes": 1004912, + "bits_per_second": 8042472.7765933564, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62812, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000567, + "end": 14.000172, + "seconds": 0.99960500001907349, + "bytes": 1004912, + "bits_per_second": 8042472.7765933564, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000172, + "end": 15.000198, + "seconds": 1.0000259876251221, + "bytes": 1002016, + "bits_per_second": 8015919.68528421, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000172, + "end": 15.000198, + "seconds": 1.0000259876251221, + "bytes": 1002016, + "bits_per_second": 8015919.68528421, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000198, + "end": 16.000188, + "seconds": 0.99998998641967773, + "bytes": 1002016, + "bits_per_second": 8016208.2709454, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 61250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000198, + "end": 16.000188, + "seconds": 0.99998998641967773, + "bytes": 1002016, + "bits_per_second": 8016208.2709454, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 16.000188, + "end": 17.000018, + "seconds": 0.99983000755310059, + "bytes": 1002016, + "bits_per_second": 8017490.9128982769, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60937, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 16.000188, + "end": 17.000018, + "seconds": 0.99983000755310059, + "bytes": 1002016, + "bits_per_second": 8017490.9128982769, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000018, + "end": 18.000034, + "seconds": 1.0000159740448, + "bytes": 1004912, + "bits_per_second": 8039167.5819768924, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58750, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000018, + "end": 18.000034, + "seconds": 1.0000159740448, + "bytes": 1004912, + "bits_per_second": 8039167.5819768924, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.000034, + "end": 19.000055, + "seconds": 1.0000209808349609, + "bytes": 1002016, + "bits_per_second": 8015959.8184699956, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 63125, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.000034, + "end": 19.000055, + "seconds": 1.0000209808349609, + "bytes": 1002016, + "bits_per_second": 8015959.8184699956, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000055, + "end": 20.000294, + "seconds": 1.0002390146255493, + "bytes": 1002016, + "bits_per_second": 8014212.4860035852, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58125, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000055, + "end": 20.000294, + "seconds": 1.0002390146255493, + "bytes": 1002016, + "bits_per_second": 8014212.4860035852, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.000294, + "end": 21.000098, + "seconds": 0.99980401992797852, + "bytes": 1004912, + "bits_per_second": 8040871.850644405, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 59687, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.000294, + "end": 21.000098, + "seconds": 0.99980401992797852, + "bytes": 1004912, + "bits_per_second": 8040871.850644405, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000098, + "end": 22.00013, + "seconds": 1.0000319480895996, + "bytes": 1002016, + "bits_per_second": 8015871.9082060577, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60625, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000098, + "end": 22.00013, + "seconds": 1.0000319480895996, + "bytes": 1002016, + "bits_per_second": 8015871.9082060577, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.00013, + "end": 23.00029, + "seconds": 1.0001599788665771, + "bytes": 1002016, + "bits_per_second": 8014845.794054077, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 61562, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.00013, + "end": 23.00029, + "seconds": 1.0001599788665771, + "bytes": 1002016, + "bits_per_second": 8014845.794054077, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.00029, + "end": 24.00004, + "seconds": 0.999750018119812, + "bytes": 1004912, + "bits_per_second": 8041306.1808382533, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60937, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.00029, + "end": 24.00004, + "seconds": 0.999750018119812, + "bytes": 1004912, + "bits_per_second": 8041306.1808382533, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.00004, + "end": 25.0001, + "seconds": 1.000059962272644, + "bytes": 1002016, + "bits_per_second": 8015647.3635673672, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.00004, + "end": 25.0001, + "seconds": 1.000059962272644, + "bytes": 1002016, + "bits_per_second": 8015647.3635673672, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.0001, + "end": 26.000252, + "seconds": 1.0001519918441772, + "bytes": 1002016, + "bits_per_second": 8014909.7990787234, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62187, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.0001, + "end": 26.000252, + "seconds": 1.0001519918441772, + "bytes": 1002016, + "bits_per_second": 8014909.7990787234, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000252, + "end": 27.00009, + "seconds": 0.99983799457550049, + "bytes": 1002016, + "bits_per_second": 8017426.866642924, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60625, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000252, + "end": 27.00009, + "seconds": 0.99983799457550049, + "bytes": 1002016, + "bits_per_second": 8017426.866642924, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.00009, + "end": 28.000044, + "seconds": 0.9999539852142334, + "bytes": 1004912, + "bits_per_second": 8039665.9435060257, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62187, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.00009, + "end": 28.000044, + "seconds": 0.9999539852142334, + "bytes": 1004912, + "bits_per_second": 8039665.9435060257, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.000044, + "end": 29.000182, + "seconds": 1.0001380443573, + "bytes": 1002016, + "bits_per_second": 8015021.5714984182, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60937, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.000044, + "end": 29.000182, + "seconds": 1.0001380443573, + "bytes": 1002016, + "bits_per_second": 8015021.5714984182, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.000182, + "end": 30.000176, + "seconds": 0.99999397993087769, + "bytes": 1002016, + "bits_per_second": 8016176.25793517, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.000182, + "end": 30.000176, + "seconds": 0.99999397993087769, + "bytes": 1002016, + "bits_per_second": 8016176.25793517, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.000176, + "end": 31.000057, + "seconds": 0.99988102912902832, + "bytes": 1004912, + "bits_per_second": 8040252.5558494, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 60937, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.000176, + "end": 31.000057, + "seconds": 0.99988102912902832, + "bytes": 1004912, + "bits_per_second": 8040252.5558494, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.000057, + "end": 32.000032, + "seconds": 0.999975025653839, + "bytes": 1002016, + "bits_per_second": 8016328.20255547, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58125, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.000057, + "end": 32.000032, + "seconds": 0.999975025653839, + "bytes": 1002016, + "bits_per_second": 8016328.20255547, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.000032, + "end": 33.000365, + "seconds": 1.0003329515457153, + "bytes": 1002016, + "bits_per_second": 8013459.9061377235, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 62500, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.000032, + "end": 33.000365, + "seconds": 1.0003329515457153, + "bytes": 1002016, + "bits_per_second": 8013459.9061377235, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.000365, + "end": 34.00023, + "seconds": 0.99986499547958374, + "bytes": 1002016, + "bits_per_second": 8017210.35963968, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 59375, + "rttvar": 7500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.000365, + "end": 34.00023, + "seconds": 0.99986499547958374, + "bytes": 1002016, + "bits_per_second": 8017210.35963968, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.00023, + "end": 35.000146, + "seconds": 0.99991601705551147, + "bytes": 1004912, + "bits_per_second": 8039971.220456697, + "retransmits": 0, + "snd_cwnd": 65196, + "rtt": 58750, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.00023, + "end": 35.000146, + "seconds": 0.99991601705551147, + "bytes": 1004912, + "bits_per_second": 8039971.220456697, + "retransmits": 0, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 35.000146, + "seconds": 35.000146, + "bytes": 35099520, + "bits_per_second": 8022713.9623931851, + "retransmits": 0, + "max_snd_cwnd": 65196, + "max_rtt": 63125, + "min_rtt": 58125, + "mean_rtt": 60663, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.063956, + "seconds": 35.000146, + "bytes": 35163232, + "bits_per_second": 8022650.2679845942, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 35.000146, + "seconds": 35.000146, + "bytes": 35099520, + "bits_per_second": 8022713.9623931851, + "retransmits": 0, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.063956, + "seconds": 35.063956, + "bytes": 35163232, + "bits_per_second": 8022650.2679845942, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 6.33697162167834, + "host_user": 1.4901593024281483, + "host_system": 4.8566984600788432, + "remote_total": 4.0971295122355462, + "remote_user": 1.2817696969261776, + "remote_system": 2.794769785494772 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/One2MBStraight.json b/manual/One2MBStraight.json new file mode 100644 index 0000000..413e08b --- /dev/null +++ b/manual/One2MBStraight.json @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "1.1.1.2", + "local_port": 33396, + "remote_host": "1.1.1.5", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:50:26 UTC", + "timesecs": 1604332226 + }, + "connecting_to": { + "host": "1.1.1.5", + "port": 5201 + }, + "cookie": "u5qyrhkcnrmsb6aiygamsr3n4f2fjztjboma", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000159, + "seconds": 1.0001590251922607, + "bytes": 2011468, + "bits_per_second": 16089185.414196189, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 34375, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000159, + "seconds": 1.0001590251922607, + "bytes": 2011468, + "bits_per_second": 16089185.414196189, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000159, + "end": 2.000257, + "seconds": 1.0000979900360107, + "bytes": 2004032, + "bits_per_second": 16030685.152584622, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000159, + "end": 2.000257, + "seconds": 1.0000979900360107, + "bytes": 2004032, + "bits_per_second": 16030685.152584622, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000257, + "end": 3.000108, + "seconds": 0.99985098838806152, + "bytes": 2006928, + "bits_per_second": 16057816.801165754, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 25312, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000257, + "end": 3.000108, + "seconds": 0.99985098838806152, + "bytes": 2006928, + "bits_per_second": 16057816.801165754, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000108, + "end": 4.00028, + "seconds": 1.0001720190048218, + "bytes": 2004032, + "bits_per_second": 16029498.62159932, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33125, + "rttvar": 4375, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000108, + "end": 4.00028, + "seconds": 1.0001720190048218, + "bytes": 2004032, + "bits_per_second": 16029498.62159932, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.00028, + "end": 5.000126, + "seconds": 0.99984598159790039, + "bytes": 2006928, + "bits_per_second": 16057897.211669622, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.00028, + "end": 5.000126, + "seconds": 0.99984598159790039, + "bytes": 2006928, + "bits_per_second": 16057897.211669622, + "retransmits": 0, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.5e-05, + "end": 1.00012, + "seconds": 1.000154972076416, + "bytes": 2006928, + "bits_per_second": 16052936.243137827, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33125, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.5e-05, + "end": 1.00012, + "seconds": 1.000154972076416, + "bytes": 2006928, + "bits_per_second": 16052936.243137827, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.00012, + "end": 2.000131, + "seconds": 1.0000109672546387, + "bytes": 2004032, + "bits_per_second": 16032080.172094366, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 1.00012, + "end": 2.000131, + "seconds": 1.0000109672546387, + "bytes": 2004032, + "bits_per_second": 16032080.172094366, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000131, + "end": 3.000026, + "seconds": 0.99989497661590576, + "bytes": 2006928, + "bits_per_second": 16057110.37207005, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 31875, + "rttvar": 8125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.000131, + "end": 3.000026, + "seconds": 0.99989497661590576, + "bytes": 2006928, + "bits_per_second": 16057110.37207005, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000026, + "end": 4.000227, + "seconds": 1.0002009868621826, + "bytes": 2004032, + "bits_per_second": 16029034.374677217, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.000026, + "end": 4.000227, + "seconds": 1.0002009868621826, + "bytes": 2004032, + "bits_per_second": 16029034.374677217, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000227, + "end": 5.000081, + "seconds": 0.999854028224945, + "bytes": 2006928, + "bits_per_second": 16057767.980895592, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000227, + "end": 5.000081, + "seconds": 0.999854028224945, + "bytes": 2006928, + "bits_per_second": 16057767.980895592, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000081, + "end": 6.000023, + "seconds": 0.99994200468063354, + "bytes": 2004032, + "bits_per_second": 16033185.849733816, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 26875, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000081, + "end": 6.000023, + "seconds": 0.99994200468063354, + "bytes": 2004032, + "bits_per_second": 16033185.849733816, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.000023, + "end": 7.00008, + "seconds": 1.0000569820404053, + "bytes": 2006928, + "bits_per_second": 16054509.181309143, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.000023, + "end": 7.00008, + "seconds": 1.0000569820404053, + "bytes": 2006928, + "bits_per_second": 16054509.181309143, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.00008, + "end": 8.00017, + "seconds": 1.0000900030136108, + "bytes": 2004032, + "bits_per_second": 16030813.178503303, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33125, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.00008, + "end": 8.00017, + "seconds": 1.0000900030136108, + "bytes": 2004032, + "bits_per_second": 16030813.178503303, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.00017, + "end": 9.000185, + "seconds": 1.0000150203704834, + "bytes": 2006928, + "bits_per_second": 16055182.845205486, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.00017, + "end": 9.000185, + "seconds": 1.0000150203704834, + "bytes": 2006928, + "bits_per_second": 16055182.845205486, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000185, + "end": 10.000105, + "seconds": 0.99992001056671143, + "bytes": 2006928, + "bits_per_second": 16056708.367002757, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 25000, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000185, + "end": 10.000105, + "seconds": 0.99992001056671143, + "bytes": 2006928, + "bits_per_second": 16056708.367002757, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000105, + "end": 11.000211, + "seconds": 1.0001059770584106, + "bytes": 2004032, + "bits_per_second": 16030557.128710816, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000105, + "end": 11.000211, + "seconds": 1.0001059770584106, + "bytes": 2004032, + "bits_per_second": 16030557.128710816, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000211, + "end": 12.000084, + "seconds": 0.99987298250198364, + "bytes": 2006928, + "bits_per_second": 16057463.578848274, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000211, + "end": 12.000084, + "seconds": 0.99987298250198364, + "bytes": 2006928, + "bits_per_second": 16057463.578848274, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.000084, + "end": 13.000096, + "seconds": 1.0000120401382446, + "bytes": 2006928, + "bits_per_second": 16055230.69280291, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 34687, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.000084, + "end": 13.000096, + "seconds": 1.0000120401382446, + "bytes": 2006928, + "bits_per_second": 16055230.69280291, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000096, + "end": 14.000153, + "seconds": 1.0000569820404053, + "bytes": 2004032, + "bits_per_second": 16031342.501393834, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000096, + "end": 14.000153, + "seconds": 1.0000569820404053, + "bytes": 2004032, + "bits_per_second": 16031342.501393834, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000153, + "end": 15.000028, + "seconds": 0.999875009059906, + "bytes": 2006928, + "bits_per_second": 16057431.033400359, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 25625, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000153, + "end": 15.000028, + "seconds": 0.999875009059906, + "bytes": 2006928, + "bits_per_second": 16057431.033400359, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000028, + "end": 16.000217, + "seconds": 1.000188946723938, + "bytes": 2004032, + "bits_per_second": 16029227.330008738, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33125, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000028, + "end": 16.000217, + "seconds": 1.000188946723938, + "bytes": 2004032, + "bits_per_second": 16029227.330008738, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 16.000217, + "end": 17.000061, + "seconds": 0.9998440146446228, + "bytes": 2006928, + "bits_per_second": 16057928.801730759, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 16.000217, + "end": 17.000061, + "seconds": 0.9998440146446228, + "bytes": 2006928, + "bits_per_second": 16057928.801730759, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000061, + "end": 18.000307, + "seconds": 1.0002460479736328, + "bytes": 2004032, + "bits_per_second": 16028312.266246136, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33125, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000061, + "end": 18.000307, + "seconds": 1.0002460479736328, + "bytes": 2004032, + "bits_per_second": 16028312.266246136, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.000307, + "end": 19.000136, + "seconds": 0.9998289942741394, + "bytes": 2006928, + "bits_per_second": 16058170.039023517, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 33437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.000307, + "end": 19.000136, + "seconds": 0.9998289942741394, + "bytes": 2006928, + "bits_per_second": 16058170.039023517, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000136, + "end": 20.000033, + "seconds": 0.999897003173828, + "bytes": 2006928, + "bits_per_second": 16057077.828053884, + "retransmits": 0, + "snd_cwnd": 65700, + "rtt": 31250, + "rttvar": 8750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000136, + "end": 20.000033, + "seconds": 0.999897003173828, + "bytes": 2006928, + "bits_per_second": 16057077.828053884, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.000033, + "end": 21.000077, + "seconds": 1.0000439882278442, + "bytes": 2028608, + "bits_per_second": 16228150.152433604, + "retransmits": 0, + "snd_cwnd": 68620, + "rtt": 33750, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.000033, + "end": 21.000077, + "seconds": 1.0000439882278442, + "bytes": 2028608, + "bits_per_second": 16228150.152433604, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000077, + "end": 22.000053, + "seconds": 0.99997597932815552, + "bytes": 2006928, + "bits_per_second": 16055809.671335313, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 42187, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000077, + "end": 22.000053, + "seconds": 0.99997597932815552, + "bytes": 2006928, + "bits_per_second": 16055809.671335313, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.000053, + "end": 23.000215, + "seconds": 1.0001620054244995, + "bytes": 2004032, + "bits_per_second": 16029659.108271582, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.000053, + "end": 23.000215, + "seconds": 1.0001620054244995, + "bytes": 2004032, + "bits_per_second": 16029659.108271582, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.000215, + "end": 24.000117, + "seconds": 0.99990200996398926, + "bytes": 2006928, + "bits_per_second": 16056997.425755974, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40312, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.000215, + "end": 24.000117, + "seconds": 0.99990200996398926, + "bytes": 2006928, + "bits_per_second": 16056997.425755974, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.000117, + "end": 25.00018, + "seconds": 1.0000629425048828, + "bytes": 2004032, + "bits_per_second": 16031246.953160373, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 42187, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.000117, + "end": 25.00018, + "seconds": 1.0000629425048828, + "bytes": 2004032, + "bits_per_second": 16031246.953160373, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.00018, + "end": 26.000094, + "seconds": 0.999913990497589, + "bytes": 2006928, + "bits_per_second": 16056805.037811611, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.00018, + "end": 26.000094, + "seconds": 0.999913990497589, + "bytes": 2006928, + "bits_per_second": 16056805.037811611, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000094, + "end": 27.000054, + "seconds": 0.99996000528335571, + "bytes": 2006928, + "bits_per_second": 16056066.157816404, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 34375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000094, + "end": 27.000054, + "seconds": 0.99996000528335571, + "bytes": 2006928, + "bits_per_second": 16056066.157816404, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.000054, + "end": 28.00023, + "seconds": 1.000175952911377, + "bytes": 2004032, + "bits_per_second": 16029435.574143, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 42187, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.000054, + "end": 28.00023, + "seconds": 1.000175952911377, + "bytes": 2004032, + "bits_per_second": 16029435.574143, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.00023, + "end": 29.000068, + "seconds": 0.99983799457550049, + "bytes": 2006928, + "bits_per_second": 16058025.487235684, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.00023, + "end": 29.000068, + "seconds": 0.99983799457550049, + "bytes": 2006928, + "bits_per_second": 16058025.487235684, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.000068, + "end": 30.000143, + "seconds": 1.0000749826431274, + "bytes": 2006928, + "bits_per_second": 16054220.212135144, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 39687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.000068, + "end": 30.000143, + "seconds": 1.0000749826431274, + "bytes": 2006928, + "bits_per_second": 16054220.212135144, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.000143, + "end": 31.000154, + "seconds": 1.0000109672546387, + "bytes": 2004032, + "bits_per_second": 16032080.172094366, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.000143, + "end": 31.000154, + "seconds": 1.0000109672546387, + "bytes": 2004032, + "bits_per_second": 16032080.172094366, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.000154, + "end": 32.000079, + "seconds": 0.99992501735687256, + "bytes": 2006928, + "bits_per_second": 16056627.968404785, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 34375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.000154, + "end": 32.000079, + "seconds": 0.99992501735687256, + "bytes": 2006928, + "bits_per_second": 16056627.968404785, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.000079, + "end": 33.000153, + "seconds": 1.000074028968811, + "bytes": 2004032, + "bits_per_second": 16031069.236475486, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 41250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.000079, + "end": 33.000153, + "seconds": 1.000074028968811, + "bytes": 2004032, + "bits_per_second": 16031069.236475486, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.000153, + "end": 34.000143, + "seconds": 0.99998998641967773, + "bytes": 2006928, + "bits_per_second": 16055584.773887753, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 35625, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.000153, + "end": 34.000143, + "seconds": 0.99998998641967773, + "bytes": 2006928, + "bits_per_second": 16055584.773887753, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.000143, + "end": 35.000458, + "seconds": 1.0003149509429932, + "bytes": 2004032, + "bits_per_second": 16027208.215658931, + "retransmits": 0, + "snd_cwnd": 81760, + "rtt": 40000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.000143, + "end": 35.000458, + "seconds": 1.0003149509429932, + "bytes": 2004032, + "bits_per_second": 16027208.215658931, + "retransmits": 0, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 35.000458, + "seconds": 35.000458, + "bytes": 70223616, + "bits_per_second": 16050902.191051329, + "retransmits": 0, + "max_snd_cwnd": 81760, + "max_rtt": 42187, + "min_rtt": 25000, + "mean_rtt": 34695, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.040442, + "seconds": 35.000458, + "bytes": 70281576, + "bits_per_second": 16045819.513349747, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 35.000458, + "seconds": 35.000458, + "bytes": 70223616, + "bits_per_second": 16050902.191051329, + "retransmits": 0, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.040442, + "seconds": 35.040442, + "bytes": 70281576, + "bits_per_second": 16045819.513349747, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 13.683041165906124, + "host_user": 3.2886830504688236, + "host_system": 10.403628782829841, + "remote_total": 2.45121474088192, + "remote_user": 0.81681507616752547, + "remote_system": 1.6327064670009697 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/Two1MBAggregate.json b/manual/Two1MBAggregate.json new file mode 100644 index 0000000..95738e4 --- /dev/null +++ b/manual/Two1MBAggregate.json @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "2.2.2.2", + "local_port": 64618, + "remote_host": "2.2.2.3", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:25:25 UTC", + "timesecs": 1604330725 + }, + "connecting_to": { + "host": "2.2.2.3", + "port": 5201 + }, + "cookie": "dyjavww2gokxtknwgqpjyvnb3rtdl2lct6eo", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000218, + "seconds": 1.0002180337905884, + "bytes": 1728164, + "bits_per_second": 13822298.271913132, + "retransmits": 64, + "snd_cwnd": 17820, + "rtt": 23750, + "rttvar": 10625, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000218, + "seconds": 1.0002180337905884, + "bytes": 1728164, + "bits_per_second": 13822298.271913132, + "retransmits": 64, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000218, + "end": 2.000251, + "seconds": 1.0000330209732056, + "bytes": 1769456, + "bits_per_second": 14155180.582161276, + "retransmits": 42, + "snd_cwnd": 48156, + "rtt": 26250, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000218, + "end": 2.000251, + "seconds": 1.0000330209732056, + "bytes": 1769456, + "bits_per_second": 14155180.582161276, + "retransmits": 42, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000251, + "end": 3.000179, + "seconds": 0.99992799758911133, + "bytes": 1792624, + "bits_per_second": 14342024.660352571, + "retransmits": 44, + "snd_cwnd": 47976, + "rtt": 26562, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000251, + "end": 3.000179, + "seconds": 0.99992799758911133, + "bytes": 1792624, + "bits_per_second": 14342024.660352571, + "retransmits": 44, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000179, + "end": 4.000194, + "seconds": 1.0000150203704834, + "bytes": 1720464, + "bits_per_second": 13763505.267051738, + "retransmits": 54, + "snd_cwnd": 27932, + "rtt": 14375, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000179, + "end": 4.000194, + "seconds": 1.0000150203704834, + "bytes": 1720464, + "bits_per_second": 13763505.267051738, + "retransmits": 54, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000194, + "end": 5.00023, + "seconds": 1.0000360012054443, + "bytes": 1739456, + "bits_per_second": 13915147.0379327, + "retransmits": 46, + "snd_cwnd": 42412, + "rtt": 24687, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000194, + "end": 5.00023, + "seconds": 1.0000360012054443, + "bytes": 1739456, + "bits_per_second": 13915147.0379327, + "retransmits": 46, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.6e-05, + "end": 0.999927, + "seconds": 1.0000029802322388, + "bytes": 1720812, + "bits_per_second": 13766454.972767077, + "retransmits": 83, + "snd_cwnd": 38116, + "rtt": 19375, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.6e-05, + "end": 0.999927, + "seconds": 1.0000029802322388, + "bytes": 1720812, + "bits_per_second": 13766454.972767077, + "retransmits": 83, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.999927, + "end": 2.000092, + "seconds": 1.0001649856567383, + "bytes": 1736152, + "bits_per_second": 13886924.856582461, + "retransmits": 52, + "snd_cwnd": 37900, + "rtt": 23437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.999927, + "end": 2.000092, + "seconds": 1.0001649856567383, + "bytes": 1736152, + "bits_per_second": 13886924.856582461, + "retransmits": 52, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000092, + "end": 3.000094, + "seconds": 1.0000020265579224, + "bytes": 1784152, + "bits_per_second": 14273187.074559657, + "retransmits": 26, + "snd_cwnd": 58412, + "rtt": 36250, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.000092, + "end": 3.000094, + "seconds": 1.0000020265579224, + "bytes": 1784152, + "bits_per_second": 14273187.074559657, + "retransmits": 26, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000094, + "end": 4.000091, + "seconds": 0.99999701976776123, + "bytes": 1689196, + "bits_per_second": 13513608.27369104, + "retransmits": 99, + "snd_cwnd": 2920, + "rtt": 23750, + "rttvar": 11875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.000094, + "end": 4.000091, + "seconds": 0.99999701976776123, + "bytes": 1689196, + "bits_per_second": 13513608.27369104, + "retransmits": 99, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000091, + "end": 5.000043, + "seconds": 0.99995201826095581, + "bytes": 1695764, + "bits_per_second": 13566762.956879871, + "retransmits": 71, + "snd_cwnd": 32096, + "rtt": 17500, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000091, + "end": 5.000043, + "seconds": 0.99995201826095581, + "bytes": 1695764, + "bits_per_second": 13566762.956879871, + "retransmits": 71, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000043, + "end": 6.000058, + "seconds": 1.0000150203704834, + "bytes": 1789728, + "bits_per_second": 14317608.944209222, + "retransmits": 0, + "snd_cwnd": 67136, + "rtt": 32500, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000043, + "end": 6.000058, + "seconds": 1.0000150203704834, + "bytes": 1789728, + "bits_per_second": 14317608.944209222, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.000058, + "end": 7.000186, + "seconds": 1.0001280307769775, + "bytes": 1795520, + "bits_per_second": 14362321.180860013, + "retransmits": 50, + "snd_cwnd": 59764, + "rtt": 31250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.000058, + "end": 7.000186, + "seconds": 1.0001280307769775, + "bytes": 1795520, + "bits_per_second": 14362321.180860013, + "retransmits": 50, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.000186, + "end": 8.000192, + "seconds": 1.0000059604644775, + "bytes": 1750896, + "bits_per_second": 14007084.511270337, + "retransmits": 54, + "snd_cwnd": 33676, + "rtt": 18750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.000186, + "end": 8.000192, + "seconds": 1.0000059604644775, + "bytes": 1750896, + "bits_per_second": 14007084.511270337, + "retransmits": 54, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.000192, + "end": 9.000132, + "seconds": 0.99993997812271118, + "bytes": 1740736, + "bits_per_second": 13926723.908113448, + "retransmits": 31, + "snd_cwnd": 51112, + "rtt": 30000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.000192, + "end": 9.000132, + "seconds": 0.99993997812271118, + "bytes": 1740736, + "bits_per_second": 13926723.908113448, + "retransmits": 31, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000132, + "end": 10.000007, + "seconds": 0.999875009059906, + "bytes": 1688500, + "bits_per_second": 13509688.588677077, + "retransmits": 83, + "snd_cwnd": 23312, + "rtt": 13437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000132, + "end": 10.000007, + "seconds": 0.999875009059906, + "bytes": 1688500, + "bits_per_second": 13509688.588677077, + "retransmits": 83, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000007, + "end": 11.000041, + "seconds": 1.000033974647522, + "bytes": 1762216, + "bits_per_second": 14097249.050932465, + "retransmits": 49, + "snd_cwnd": 13092, + "rtt": 8750, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000007, + "end": 11.000041, + "seconds": 1.000033974647522, + "bytes": 1762216, + "bits_per_second": 14097249.050932465, + "retransmits": 49, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000041, + "end": 12.000141, + "seconds": 1.0001000165939331, + "bytes": 1769456, + "bits_per_second": 14154232.341891427, + "retransmits": 34, + "snd_cwnd": 40628, + "rtt": 24375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000041, + "end": 12.000141, + "seconds": 1.0001000165939331, + "bytes": 1769456, + "bits_per_second": 14154232.341891427, + "retransmits": 34, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.000141, + "end": 13.000089, + "seconds": 0.999948024749756, + "bytes": 1768008, + "bits_per_second": 14144799.179477006, + "retransmits": 32, + "snd_cwnd": 56844, + "rtt": 34375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.000141, + "end": 13.000089, + "seconds": 0.999948024749756, + "bytes": 1768008, + "bits_per_second": 14144799.179477006, + "retransmits": 32, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000089, + "end": 14.000063, + "seconds": 0.999974012374878, + "bytes": 1704632, + "bits_per_second": 13637410.403909212, + "retransmits": 72, + "snd_cwnd": 43812, + "rtt": 22812, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000089, + "end": 14.000063, + "seconds": 0.999974012374878, + "bytes": 1704632, + "bits_per_second": 13637410.403909212, + "retransmits": 72, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000063, + "end": 15.000065, + "seconds": 1.0000020265579224, + "bytes": 1726292, + "bits_per_second": 13810308.012610886, + "retransmits": 65, + "snd_cwnd": 41036, + "rtt": 21875, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000063, + "end": 15.000065, + "seconds": 1.0000020265579224, + "bytes": 1726292, + "bits_per_second": 13810308.012610886, + "retransmits": 65, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000065, + "end": 16.000027, + "seconds": 0.9999619722366333, + "bytes": 1744840, + "bits_per_second": 13959250.839087686, + "retransmits": 47, + "snd_cwnd": 29140, + "rtt": 14687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000065, + "end": 16.000027, + "seconds": 0.9999619722366333, + "bytes": 1744840, + "bits_per_second": 13959250.839087686, + "retransmits": 47, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 16.000027, + "end": 17.000068, + "seconds": 1.0000410079956055, + "bytes": 1782488, + "bits_per_second": 14259319.2538987, + "retransmits": 48, + "snd_cwnd": 32084, + "rtt": 17187, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 16.000027, + "end": 17.000068, + "seconds": 1.0000410079956055, + "bytes": 1782488, + "bits_per_second": 14259319.2538987, + "retransmits": 48, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000068, + "end": 18.000066, + "seconds": 0.99999797344207764, + "bytes": 1776912, + "bits_per_second": 14215324.808179108, + "retransmits": 22, + "snd_cwnd": 64336, + "rtt": 39062, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000068, + "end": 18.000066, + "seconds": 0.99999797344207764, + "bytes": 1776912, + "bits_per_second": 14215324.808179108, + "retransmits": 22, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.000066, + "end": 19.000096, + "seconds": 1.0000300407409668, + "bytes": 1753792, + "bits_per_second": 14029914.530971788, + "retransmits": 41, + "snd_cwnd": 34932, + "rtt": 24687, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.000066, + "end": 19.000096, + "seconds": 1.0000300407409668, + "bytes": 1753792, + "bits_per_second": 14029914.530971788, + "retransmits": 41, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000096, + "end": 20.00015, + "seconds": 1.0000540018081665, + "bytes": 1769696, + "bits_per_second": 14156803.507012764, + "retransmits": 30, + "snd_cwnd": 58460, + "rtt": 28437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000096, + "end": 20.00015, + "seconds": 1.0000540018081665, + "bytes": 1769696, + "bits_per_second": 14156803.507012764, + "retransmits": 30, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.00015, + "end": 21.000165, + "seconds": 1.0000150203704834, + "bytes": 1704296, + "bits_per_second": 13634163.209817357, + "retransmits": 68, + "snd_cwnd": 27860, + "rtt": 35937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.00015, + "end": 21.000165, + "seconds": 1.0000150203704834, + "bytes": 1704296, + "bits_per_second": 13634163.209817357, + "retransmits": 68, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000165, + "end": 22.000074, + "seconds": 0.999908983707428, + "bytes": 1742280, + "bits_per_second": 13939508.722404189, + "retransmits": 59, + "snd_cwnd": 18920, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000165, + "end": 22.000074, + "seconds": 0.999908983707428, + "bytes": 1742280, + "bits_per_second": 13939508.722404189, + "retransmits": 59, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.000074, + "end": 23.000049, + "seconds": 0.999975025653839, + "bytes": 1762372, + "bits_per_second": 14099328.121501142, + "retransmits": 43, + "snd_cwnd": 38020, + "rtt": 24062, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.000074, + "end": 23.000049, + "seconds": 0.999975025653839, + "bytes": 1762372, + "bits_per_second": 14099328.121501142, + "retransmits": 43, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.000049, + "end": 24.000075, + "seconds": 1.0000259876251221, + "bytes": 1775248, + "bits_per_second": 14201614.933754973, + "retransmits": 42, + "snd_cwnd": 33544, + "rtt": 18750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.000049, + "end": 24.000075, + "seconds": 1.0000259876251221, + "bytes": 1775248, + "bits_per_second": 14201614.933754973, + "retransmits": 42, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.000075, + "end": 24.999987, + "seconds": 0.99991202354431152, + "bytes": 1726016, + "bits_per_second": 13809342.897043468, + "retransmits": 57, + "snd_cwnd": 45200, + "rtt": 26562, + "rttvar": 7500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.000075, + "end": 24.999987, + "seconds": 0.99991202354431152, + "bytes": 1726016, + "bits_per_second": 13809342.897043468, + "retransmits": 57, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.999987, + "end": 26.000203, + "seconds": 1.000216007232666, + "bytes": 1692904, + "bits_per_second": 13540307.195713207, + "retransmits": 67, + "snd_cwnd": 37840, + "rtt": 22187, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.999987, + "end": 26.000203, + "seconds": 1.000216007232666, + "bytes": 1692904, + "bits_per_second": 13540307.195713207, + "retransmits": 67, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000203, + "end": 27.000083, + "seconds": 0.999880015850067, + "bytes": 1716048, + "bits_per_second": 13730031.386144418, + "retransmits": 62, + "snd_cwnd": 40892, + "rtt": 20000, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000203, + "end": 27.000083, + "seconds": 0.999880015850067, + "bytes": 1716048, + "bits_per_second": 13730031.386144418, + "retransmits": 62, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.000083, + "end": 28.000301, + "seconds": 1.0002180337905884, + "bytes": 1760768, + "bits_per_second": 14083073.414120385, + "retransmits": 0, + "snd_cwnd": 67172, + "rtt": 35937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.000083, + "end": 28.000301, + "seconds": 1.0002180337905884, + "bytes": 1760768, + "bits_per_second": 14083073.414120385, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.000301, + "end": 29.000234, + "seconds": 0.99993300437927246, + "bytes": 1728116, + "bits_per_second": 13825854.27168902, + "retransmits": 68, + "snd_cwnd": 53912, + "rtt": 28750, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.000301, + "end": 29.000234, + "seconds": 0.99993300437927246, + "bytes": 1728116, + "bits_per_second": 13825854.27168902, + "retransmits": 68, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.000234, + "end": 30.00013, + "seconds": 0.999895989894867, + "bytes": 1753528, + "bits_per_second": 14029683.228827614, + "retransmits": 59, + "snd_cwnd": 50956, + "rtt": 28750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.000234, + "end": 30.00013, + "seconds": 0.999895989894867, + "bytes": 1753528, + "bits_per_second": 14029683.228827614, + "retransmits": 59, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.00013, + "end": 31.000094, + "seconds": 0.99996399879455566, + "bytes": 1769456, + "bits_per_second": 14156157.638739455, + "retransmits": 45, + "snd_cwnd": 43716, + "rtt": 28750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.00013, + "end": 31.000094, + "seconds": 0.99996399879455566, + "bytes": 1769456, + "bits_per_second": 14156157.638739455, + "retransmits": 45, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.000094, + "end": 32.000237, + "seconds": 1.0001430511474609, + "bytes": 1747736, + "bits_per_second": 13979888.1609572, + "retransmits": 52, + "snd_cwnd": 36476, + "rtt": 21250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.000094, + "end": 32.000237, + "seconds": 1.0001430511474609, + "bytes": 1747736, + "bits_per_second": 13979888.1609572, + "retransmits": 52, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.000237, + "end": 33.000088, + "seconds": 0.99985098838806152, + "bytes": 1769684, + "bits_per_second": 14159581.942129571, + "retransmits": 46, + "snd_cwnd": 49520, + "rtt": 27187, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.000237, + "end": 33.000088, + "seconds": 0.99985098838806152, + "bytes": 1769684, + "bits_per_second": 14159581.942129571, + "retransmits": 46, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.000088, + "end": 34.000073, + "seconds": 0.9999849796295166, + "bytes": 1750968, + "bits_per_second": 14007954.404664872, + "retransmits": 74, + "snd_cwnd": 30552, + "rtt": 17812, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.000088, + "end": 34.000073, + "seconds": 0.9999849796295166, + "bytes": 1750968, + "bits_per_second": 14007954.404664872, + "retransmits": 74, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.000073, + "end": 34.999837, + "seconds": 0.99976402521133423, + "bytes": 1752080, + "bits_per_second": 14019948.354350023, + "retransmits": 24, + "snd_cwnd": 58328, + "rtt": 35312, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.000073, + "end": 34.999837, + "seconds": 0.99976402521133423, + "bytes": 1752080, + "bits_per_second": 14019948.354350023, + "retransmits": 24, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 34.999837, + "seconds": 34.999837, + "bytes": 61101288, + "bits_per_second": 13966073.72771479, + "retransmits": 1755, + "max_snd_cwnd": 67172, + "max_rtt": 39062, + "min_rtt": 8750, + "mean_rtt": 24484, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.002335, + "seconds": 34.999837, + "bytes": 61105632, + "bits_per_second": 13966069.863624811, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 34.999837, + "seconds": 34.999837, + "bytes": 61101288, + "bits_per_second": 13966073.72771479, + "retransmits": 1755, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.002335, + "seconds": 35.002335, + "bytes": 61105632, + "bits_per_second": 13966069.863624811, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 4.5348585225845817, + "host_user": 1.7118342089708452, + "host_system": 2.815775981796715, + "remote_total": 3.18470001174967, + "remote_user": 0.887987281582033, + "remote_system": 2.286809437142864 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/Two2MBAggregate b/manual/Two2MBAggregate new file mode 100644 index 0000000..fb9b647 --- /dev/null +++ b/manual/Two2MBAggregate @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "2.2.2.2", + "local_port": 36068, + "remote_host": "2.2.2.3", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 16:06:21 UTC", + "timesecs": 1604333181 + }, + "connecting_to": { + "host": "2.2.2.3", + "port": 5201 + }, + "cookie": "24nkdy35b5l6vs64gpgl5qw7vrts7huyda3z", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000276, + "seconds": 1.00027596950531, + "bytes": 3306400, + "bits_per_second": 26443902.289366737, + "retransmits": 174, + "snd_cwnd": 11620, + "rtt": 5312, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000276, + "seconds": 1.00027596950531, + "bytes": 3306400, + "bits_per_second": 26443902.289366737, + "retransmits": 174, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000276, + "end": 2.000123, + "seconds": 0.99984699487686157, + "bytes": 3304480, + "bits_per_second": 26439885.4379272, + "retransmits": 193, + "snd_cwnd": 13092, + "rtt": 6562, + "rttvar": 7500, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000276, + "end": 2.000123, + "seconds": 0.99984699487686157, + "bytes": 3304480, + "bits_per_second": 26439885.4379272, + "retransmits": 193, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000123, + "end": 3.000251, + "seconds": 1.0001280307769775, + "bytes": 3290024, + "bits_per_second": 26316822.636750236, + "retransmits": 196, + "snd_cwnd": 7252, + "rtt": 8750, + "rttvar": 5000, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000123, + "end": 3.000251, + "seconds": 1.0001280307769775, + "bytes": 3290024, + "bits_per_second": 26316822.636750236, + "retransmits": 196, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000251, + "end": 4.000249, + "seconds": 0.99999797344207764, + "bytes": 3368360, + "bits_per_second": 26946934.609523818, + "retransmits": 156, + "snd_cwnd": 48192, + "rtt": 15312, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000251, + "end": 4.000249, + "seconds": 0.99999797344207764, + "bytes": 3368360, + "bits_per_second": 26946934.609523818, + "retransmits": 156, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000249, + "end": 5.000109, + "seconds": 0.99985998868942261, + "bytes": 3313300, + "bits_per_second": 26510111.715484839, + "retransmits": 206, + "snd_cwnd": 29140, + "rtt": 9375, + "rttvar": 4375, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000249, + "end": 5.000109, + "seconds": 0.99985998868942261, + "bytes": 3313300, + "bits_per_second": 26510111.715484839, + "retransmits": 206, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.000115, + "end": 0.999928, + "seconds": 1.0000430345535278, + "bytes": 3352180, + "bits_per_second": 26816285.973105874, + "retransmits": 172, + "snd_cwnd": 49592, + "rtt": 15312, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.000115, + "end": 0.999928, + "seconds": 1.0000430345535278, + "bytes": 3352180, + "bits_per_second": 26816285.973105874, + "retransmits": 172, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.999928, + "end": 2.000012, + "seconds": 1.0000840425491333, + "bytes": 3402908, + "bits_per_second": 27220976.279763553, + "retransmits": 176, + "snd_cwnd": 34956, + "rtt": 10000, + "rttvar": 3125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.999928, + "end": 2.000012, + "seconds": 1.0000840425491333, + "bytes": 3402908, + "bits_per_second": 27220976.279763553, + "retransmits": 176, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000012, + "end": 2.99993, + "seconds": 0.999917984008789, + "bytes": 3352192, + "bits_per_second": 26819735.647203121, + "retransmits": 166, + "snd_cwnd": 27716, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.000012, + "end": 2.99993, + "seconds": 0.999917984008789, + "bytes": 3352192, + "bits_per_second": 26819735.647203121, + "retransmits": 166, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.99993, + "end": 4.000079, + "seconds": 1.0001490116119385, + "bytes": 3362304, + "bits_per_second": 26894424.418465246, + "retransmits": 188, + "snd_cwnd": 26232, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.99993, + "end": 4.000079, + "seconds": 1.0001490116119385, + "bytes": 3362304, + "bits_per_second": 26894424.418465246, + "retransmits": 188, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000079, + "end": 5.000038, + "seconds": 0.99995899200439453, + "bytes": 3297264, + "bits_per_second": 26379193.7578617, + "retransmits": 203, + "snd_cwnd": 18848, + "rtt": 8125, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000079, + "end": 5.000038, + "seconds": 0.99995899200439453, + "bytes": 3297264, + "bits_per_second": 26379193.7578617, + "retransmits": 203, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000038, + "end": 5.999997, + "seconds": 0.99995899200439453, + "bytes": 3358212, + "bits_per_second": 26866797.75352421, + "retransmits": 179, + "snd_cwnd": 13044, + "rtt": 12187, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000038, + "end": 5.999997, + "seconds": 0.99995899200439453, + "bytes": 3358212, + "bits_per_second": 26866797.75352421, + "retransmits": 179, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.999997, + "end": 7.000084, + "seconds": 1.0000870227813721, + "bytes": 3275676, + "bits_per_second": 26203127.7309442, + "retransmits": 187, + "snd_cwnd": 20356, + "rtt": 8125, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.999997, + "end": 7.000084, + "seconds": 1.0000870227813721, + "bytes": 3275676, + "bits_per_second": 26203127.7309442, + "retransmits": 187, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.000084, + "end": 8.000041, + "seconds": 0.999957025051117, + "bytes": 3403256, + "bits_per_second": 27227218.088305574, + "retransmits": 148, + "snd_cwnd": 35064, + "rtt": 11250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.000084, + "end": 8.000041, + "seconds": 0.999957025051117, + "bytes": 3403256, + "bits_per_second": 27227218.088305574, + "retransmits": 148, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.000041, + "end": 9.000009, + "seconds": 0.99996799230575562, + "bytes": 3421756, + "bits_per_second": 27374924.20820402, + "retransmits": 160, + "snd_cwnd": 39360, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.000041, + "end": 9.000009, + "seconds": 0.99996799230575562, + "bytes": 3421756, + "bits_per_second": 27374924.20820402, + "retransmits": 160, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000009, + "end": 9.999957, + "seconds": 0.999948024749756, + "bytes": 3363788, + "bits_per_second": 26911702.742484536, + "retransmits": 165, + "snd_cwnd": 21816, + "rtt": 6875, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000009, + "end": 9.999957, + "seconds": 0.999948024749756, + "bytes": 3363788, + "bits_per_second": 26911702.742484536, + "retransmits": 165, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.999957, + "end": 11.000121, + "seconds": 1.0001640319824219, + "bytes": 3333548, + "bits_per_second": 26664010.24953945, + "retransmits": 162, + "snd_cwnd": 24772, + "rtt": 9375, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.999957, + "end": 11.000121, + "seconds": 1.0001640319824219, + "bytes": 3333548, + "bits_per_second": 26664010.24953945, + "retransmits": 162, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000121, + "end": 11.999923, + "seconds": 0.999801993370056, + "bytes": 3336492, + "bits_per_second": 26697222.227002032, + "retransmits": 205, + "snd_cwnd": 30612, + "rtt": 9062, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000121, + "end": 11.999923, + "seconds": 0.999801993370056, + "bytes": 3336492, + "bits_per_second": 26697222.227002032, + "retransmits": 205, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.999923, + "end": 13.000259, + "seconds": 1.0003360509872437, + "bytes": 3310632, + "bits_per_second": 26476158.660743639, + "retransmits": 194, + "snd_cwnd": 17400, + "rtt": 6562, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.999923, + "end": 13.000259, + "seconds": 1.0003360509872437, + "bytes": 3310632, + "bits_per_second": 26476158.660743639, + "retransmits": 194, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000259, + "end": 14.000044, + "seconds": 0.999785006046295, + "bytes": 3380112, + "bits_per_second": 27046710.879306655, + "retransmits": 151, + "snd_cwnd": 43740, + "rtt": 12812, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000259, + "end": 14.000044, + "seconds": 0.999785006046295, + "bytes": 3380112, + "bits_per_second": 27046710.879306655, + "retransmits": 151, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000044, + "end": 14.999945, + "seconds": 0.999900996685028, + "bytes": 3305928, + "bits_per_second": 26450042.6419027, + "retransmits": 201, + "snd_cwnd": 24796, + "rtt": 8437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000044, + "end": 14.999945, + "seconds": 0.999900996685028, + "bytes": 3305928, + "bits_per_second": 26450042.6419027, + "retransmits": 201, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.999945, + "end": 15.99994, + "seconds": 0.999994993209839, + "bytes": 3287044, + "bits_per_second": 26296483.660975665, + "retransmits": 196, + "snd_cwnd": 21828, + "rtt": 8437, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.999945, + "end": 15.99994, + "seconds": 0.999994993209839, + "bytes": 3287044, + "bits_per_second": 26296483.660975665, + "retransmits": 196, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.99994, + "end": 17.000176, + "seconds": 1.0002360343933105, + "bytes": 3352288, + "bits_per_second": 26811975.451640815, + "retransmits": 184, + "snd_cwnd": 5804, + "rtt": 6562, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.99994, + "end": 17.000176, + "seconds": 1.0002360343933105, + "bytes": 3352288, + "bits_per_second": 26811975.451640815, + "retransmits": 184, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000176, + "end": 18.000102, + "seconds": 0.999925971031189, + "bytes": 3350756, + "bits_per_second": 26808032.571007084, + "retransmits": 159, + "snd_cwnd": 18848, + "rtt": 6875, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000176, + "end": 18.000102, + "seconds": 0.999925971031189, + "bytes": 3350756, + "bits_per_second": 26808032.571007084, + "retransmits": 159, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.000102, + "end": 19.000014, + "seconds": 0.99991202354431152, + "bytes": 3387220, + "bits_per_second": 27100144.17463313, + "retransmits": 152, + "snd_cwnd": 13068, + "rtt": 5937, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.000102, + "end": 19.000014, + "seconds": 0.99991202354431152, + "bytes": 3387220, + "bits_per_second": 27100144.17463313, + "retransmits": 152, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000014, + "end": 19.999974, + "seconds": 0.99996000528335571, + "bytes": 3404452, + "bits_per_second": 27236705.32431177, + "retransmits": 148, + "snd_cwnd": 39396, + "rtt": 11250, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000014, + "end": 19.999974, + "seconds": 0.99996000528335571, + "bytes": 3404452, + "bits_per_second": 27236705.32431177, + "retransmits": 148, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.999974, + "end": 21.000052, + "seconds": 1.0000779628753662, + "bytes": 3274228, + "bits_per_second": 26191782.013363272, + "retransmits": 209, + "snd_cwnd": 32036, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.999974, + "end": 21.000052, + "seconds": 1.0000779628753662, + "bytes": 3274228, + "bits_per_second": 26191782.013363272, + "retransmits": 209, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000052, + "end": 21.999925, + "seconds": 0.99987298250198364, + "bytes": 3307268, + "bits_per_second": 26461505.074168269, + "retransmits": 215, + "snd_cwnd": 21840, + "rtt": 8125, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000052, + "end": 21.999925, + "seconds": 0.99987298250198364, + "bytes": 3307268, + "bits_per_second": 26461505.074168269, + "retransmits": 215, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.999925, + "end": 23.000106, + "seconds": 1.0001809597015381, + "bytes": 3276920, + "bits_per_second": 26210616.93458239, + "retransmits": 201, + "snd_cwnd": 7252, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.999925, + "end": 23.000106, + "seconds": 1.0001809597015381, + "bytes": 3276920, + "bits_per_second": 26210616.93458239, + "retransmits": 201, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.000106, + "end": 24.000069, + "seconds": 0.99996298551559448, + "bytes": 3394412, + "bits_per_second": 27156301.17648641, + "retransmits": 168, + "snd_cwnd": 23228, + "rtt": 7812, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.000106, + "end": 24.000069, + "seconds": 0.99996298551559448, + "bytes": 3394412, + "bits_per_second": 27156301.17648641, + "retransmits": 168, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.000069, + "end": 25.000291, + "seconds": 1.0002219676971436, + "bytes": 3398780, + "bits_per_second": 27184205.984398969, + "retransmits": 150, + "snd_cwnd": 26232, + "rtt": 10000, + "rttvar": 2500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.000069, + "end": 25.000291, + "seconds": 1.0002219676971436, + "bytes": 3398780, + "bits_per_second": 27184205.984398969, + "retransmits": 150, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.000291, + "end": 26.000056, + "seconds": 0.99976497888565063, + "bytes": 3408592, + "bits_per_second": 27275146.235262252, + "retransmits": 151, + "snd_cwnd": 20392, + "rtt": 7812, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.000291, + "end": 26.000056, + "seconds": 0.99976497888565063, + "bytes": 3408592, + "bits_per_second": 27275146.235262252, + "retransmits": 151, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000056, + "end": 27.00931, + "seconds": 1.009253978729248, + "bytes": 1720308, + "bits_per_second": 13636274.208528087, + "retransmits": 105, + "snd_cwnd": 1448, + "rtt": 6250, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000056, + "end": 27.00931, + "seconds": 1.009253978729248, + "bytes": 1720308, + "bits_per_second": 13636274.208528087, + "retransmits": 105, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.00931, + "end": 27.999991, + "seconds": 0.990680992603302, + "bytes": 3349488, + "bits_per_second": 27047964.178242665, + "retransmits": 145, + "snd_cwnd": 17388, + "rtt": 15937, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.00931, + "end": 27.999991, + "seconds": 0.990680992603302, + "bytes": 3349488, + "bits_per_second": 27047964.178242665, + "retransmits": 145, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.999991, + "end": 28.999992, + "seconds": 1.0000009536743164, + "bytes": 3356632, + "bits_per_second": 26853030.3909546, + "retransmits": 179, + "snd_cwnd": 5864, + "rtt": 9062, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.999991, + "end": 28.999992, + "seconds": 1.0000009536743164, + "bytes": 3356632, + "bits_per_second": 26853030.3909546, + "retransmits": 179, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.999992, + "end": 30.000152, + "seconds": 1.0001599788665771, + "bytes": 3302948, + "bits_per_second": 26419357.461137671, + "retransmits": 206, + "snd_cwnd": 2908, + "rtt": 8437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.999992, + "end": 30.000152, + "seconds": 1.0001599788665771, + "bytes": 3302948, + "bits_per_second": 26419357.461137671, + "retransmits": 206, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.000152, + "end": 30.999996, + "seconds": 0.9998440146446228, + "bytes": 3303188, + "bits_per_second": 26429626.6347031, + "retransmits": 181, + "snd_cwnd": 14552, + "rtt": 6250, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.000152, + "end": 30.999996, + "seconds": 0.9998440146446228, + "bytes": 3303188, + "bits_per_second": 26429626.6347031, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.999996, + "end": 31.999904, + "seconds": 0.9999079704284668, + "bytes": 3381164, + "bits_per_second": 27051801.565707292, + "retransmits": 153, + "snd_cwnd": 14540, + "rtt": 5625, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.999996, + "end": 31.999904, + "seconds": 0.9999079704284668, + "bytes": 3381164, + "bits_per_second": 27051801.565707292, + "retransmits": 153, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.999904, + "end": 33.000023, + "seconds": 1.0001189708709717, + "bytes": 3275820, + "bits_per_second": 26203442.553616941, + "retransmits": 215, + "snd_cwnd": 13116, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.999904, + "end": 33.000023, + "seconds": 1.0001189708709717, + "bytes": 3275820, + "bits_per_second": 26203442.553616941, + "retransmits": 215, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.000023, + "end": 33.999982, + "seconds": 0.99995899200439453, + "bytes": 3310248, + "bits_per_second": 26483070.0176189, + "retransmits": 185, + "snd_cwnd": 14516, + "rtt": 7812, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.000023, + "end": 33.999982, + "seconds": 0.99995899200439453, + "bytes": 3310248, + "bits_per_second": 26483070.0176189, + "retransmits": 185, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.999982, + "end": 34.999869, + "seconds": 0.999886989593506, + "bytes": 3282616, + "bits_per_second": 26263896.093573656, + "retransmits": 207, + "snd_cwnd": 20416, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.999982, + "end": 34.999869, + "seconds": 0.999886989593506, + "bytes": 3282616, + "bits_per_second": 26263896.093573656, + "retransmits": 207, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 34.999869, + "seconds": 34.999869, + "bytes": 115380620, + "bits_per_second": 26372811.852524366, + "retransmits": 6166, + "max_snd_cwnd": 49592, + "max_rtt": 15937, + "min_rtt": 5312, + "mean_rtt": 8843, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.001357, + "seconds": 34.999869, + "bytes": 115389308, + "bits_per_second": 26373676.426316842, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 34.999869, + "seconds": 34.999869, + "bytes": 115380620, + "bits_per_second": 26372811.852524366, + "retransmits": 6166, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.001357, + "seconds": 35.001357, + "bytes": 115389308, + "bits_per_second": 26373676.426316842, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 9.7089232410497637, + "host_user": 3.1845131801861557, + "host_system": 6.51907817602359, + "remote_total": 7.715891312037285, + "remote_user": 2.3313939041299236, + "remote_system": 5.3889463442919014 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/Two2MBAggregate.json b/manual/Two2MBAggregate.json new file mode 100644 index 0000000..fb59f9f --- /dev/null +++ b/manual/Two2MBAggregate.json @@ -0,0 +1,1132 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "2.2.2.2", + "local_port": 34425, + "remote_host": "2.2.2.3", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:24:26 UTC", + "timesecs": 1604330666 + }, + "connecting_to": { + "host": "2.2.2.3", + "port": 5201 + }, + "cookie": "sgiw2dxehgwtvvatqu3zzhvgjzlojozbado7", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 35, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000086, + "seconds": 1.0000859498977661, + "bytes": 3354448, + "bits_per_second": 26833277.682526458, + "retransmits": 165, + "snd_cwnd": 33484, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000086, + "seconds": 1.0000859498977661, + "bytes": 3354448, + "bits_per_second": 26833277.682526458, + "retransmits": 165, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000086, + "end": 2.00014, + "seconds": 1.0000540018081665, + "bytes": 2580336, + "bits_per_second": 20641573.31771744, + "retransmits": 145, + "snd_cwnd": 7288, + "rtt": 4687, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000086, + "end": 2.00014, + "seconds": 1.0000540018081665, + "bytes": 2580336, + "bits_per_second": 20641573.31771744, + "retransmits": 145, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.00014, + "end": 3.00017, + "seconds": 1.0000300407409668, + "bytes": 3224984, + "bits_per_second": 25799096.976010565, + "retransmits": 221, + "snd_cwnd": 20356, + "rtt": 6875, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.00014, + "end": 3.00017, + "seconds": 1.0000300407409668, + "bytes": 3224984, + "bits_per_second": 25799096.976010565, + "retransmits": 221, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.00017, + "end": 4.000107, + "seconds": 0.99993699789047241, + "bytes": 3345432, + "bits_per_second": 26765142.260424212, + "retransmits": 167, + "snd_cwnd": 10148, + "rtt": 11250, + "rttvar": 1875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.00017, + "end": 4.000107, + "seconds": 0.99993699789047241, + "bytes": 3345432, + "bits_per_second": 26765142.260424212, + "retransmits": 167, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000107, + "end": 5.000086, + "seconds": 0.999979019165039, + "bytes": 3261280, + "bits_per_second": 26090787.406504575, + "retransmits": 193, + "snd_cwnd": 8736, + "rtt": 5000, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000107, + "end": 5.000086, + "seconds": 0.999979019165039, + "bytes": 3261280, + "bits_per_second": 26090787.406504575, + "retransmits": 193, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.9e-05, + "end": 1.000097, + "seconds": 1.0001360177993774, + "bytes": 3268556, + "bits_per_second": 26144891.829348411, + "retransmits": 177, + "snd_cwnd": 19004, + "rtt": 7500, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.9e-05, + "end": 1.000097, + "seconds": 1.0001360177993774, + "bytes": 3268556, + "bits_per_second": 26144891.829348411, + "retransmits": 177, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000097, + "end": 2.000197, + "seconds": 1.0001000165939331, + "bytes": 3346724, + "bits_per_second": 26771114.444317486, + "retransmits": 157, + "snd_cwnd": 48108, + "rtt": 13750, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 1.000097, + "end": 2.000197, + "seconds": 1.0001000165939331, + "bytes": 3346724, + "bits_per_second": 26771114.444317486, + "retransmits": 157, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000197, + "end": 3.000224, + "seconds": 1.0000269412994385, + "bytes": 3280080, + "bits_per_second": 26239933.062106129, + "retransmits": 205, + "snd_cwnd": 15964, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.000197, + "end": 3.000224, + "seconds": 1.0000269412994385, + "bytes": 3280080, + "bits_per_second": 26239933.062106129, + "retransmits": 205, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000224, + "end": 4.000126, + "seconds": 0.99990200996398926, + "bytes": 3243784, + "bits_per_second": 25952815.117287923, + "retransmits": 213, + "snd_cwnd": 13080, + "rtt": 4062, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 3.000224, + "end": 4.000126, + "seconds": 0.99990200996398926, + "bytes": 3243784, + "bits_per_second": 25952815.117287923, + "retransmits": 213, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000126, + "end": 5.000069, + "seconds": 0.99994301795959473, + "bytes": 3226228, + "bits_per_second": 25811294.780242082, + "retransmits": 200, + "snd_cwnd": 11608, + "rtt": 5625, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000126, + "end": 5.000069, + "seconds": 0.99994301795959473, + "bytes": 3226228, + "bits_per_second": 25811294.780242082, + "retransmits": 200, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000069, + "end": 6.000124, + "seconds": 1.0000549554824829, + "bytes": 3352084, + "bits_per_second": 26815198.357836369, + "retransmits": 183, + "snd_cwnd": 17472, + "rtt": 6562, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000069, + "end": 6.000124, + "seconds": 1.0000549554824829, + "bytes": 3352084, + "bits_per_second": 26815198.357836369, + "retransmits": 183, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 6.000124, + "end": 7.000171, + "seconds": 1.000046968460083, + "bytes": 3256960, + "bits_per_second": 26054456.26231106, + "retransmits": 194, + "snd_cwnd": 24760, + "rtt": 10000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 6.000124, + "end": 7.000171, + "seconds": 1.000046968460083, + "bytes": 3256960, + "bits_per_second": 26054456.26231106, + "retransmits": 194, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.000171, + "end": 8.000125, + "seconds": 0.9999539852142334, + "bytes": 3226708, + "bits_per_second": 25814851.864878159, + "retransmits": 212, + "snd_cwnd": 5816, + "rtt": 4687, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.000171, + "end": 8.000125, + "seconds": 0.9999539852142334, + "bytes": 3226708, + "bits_per_second": 25814851.864878159, + "retransmits": 212, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 8.000125, + "end": 9.000056, + "seconds": 0.99993097782135, + "bytes": 3296092, + "bits_per_second": 26370556.1532379, + "retransmits": 167, + "snd_cwnd": 22020, + "rtt": 11562, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 8.000125, + "end": 9.000056, + "seconds": 0.99993097782135, + "bytes": 3296092, + "bits_per_second": 26370556.1532379, + "retransmits": 167, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000056, + "end": 10.000109, + "seconds": 1.00005304813385, + "bytes": 3400396, + "bits_per_second": 27201724.999251287, + "retransmits": 162, + "snd_cwnd": 14624, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000056, + "end": 10.000109, + "seconds": 1.00005304813385, + "bytes": 3400396, + "bits_per_second": 27201724.999251287, + "retransmits": 162, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000109, + "end": 11.000111, + "seconds": 1.0000020265579224, + "bytes": 3303404, + "bits_per_second": 26427178.443792161, + "retransmits": 181, + "snd_cwnd": 14576, + "rtt": 4375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000109, + "end": 11.000111, + "seconds": 1.0000020265579224, + "bytes": 3303404, + "bits_per_second": 26427178.443792161, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000111, + "end": 12.00012, + "seconds": 1.0000089406967163, + "bytes": 3251312, + "bits_per_second": 26010263.450122982, + "retransmits": 221, + "snd_cwnd": 5828, + "rtt": 6875, + "rttvar": 7500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000111, + "end": 12.00012, + "seconds": 1.0000089406967163, + "bytes": 3251312, + "bits_per_second": 26010263.450122982, + "retransmits": 221, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.00012, + "end": 13.000138, + "seconds": 1.0000180006027222, + "bytes": 3347084, + "bits_per_second": 26776190.012441173, + "retransmits": 152, + "snd_cwnd": 27644, + "rtt": 10000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.00012, + "end": 13.000138, + "seconds": 1.0000180006027222, + "bytes": 3347084, + "bits_per_second": 26776190.012441173, + "retransmits": 152, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000138, + "end": 14.000138, + "seconds": 1, + "bytes": 3210864, + "bits_per_second": 25686912, + "retransmits": 219, + "snd_cwnd": 5816, + "rtt": 7187, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000138, + "end": 14.000138, + "seconds": 1, + "bytes": 3210864, + "bits_per_second": 25686912, + "retransmits": 219, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000138, + "end": 15.000225, + "seconds": 1.0000870227813721, + "bytes": 3420260, + "bits_per_second": 27359699.0828883, + "retransmits": 123, + "snd_cwnd": 20320, + "rtt": 8125, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000138, + "end": 15.000225, + "seconds": 1.0000870227813721, + "bytes": 3420260, + "bits_per_second": 27359699.0828883, + "retransmits": 123, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000225, + "end": 15.999995, + "seconds": 0.99976998567581177, + "bytes": 3374596, + "bits_per_second": 27002979.071982309, + "retransmits": 180, + "snd_cwnd": 21960, + "rtt": 12187, + "rttvar": 3125, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000225, + "end": 15.999995, + "seconds": 0.99976998567581177, + "bytes": 3374596, + "bits_per_second": 27002979.071982309, + "retransmits": 180, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.999995, + "end": 17.000098, + "seconds": 1.0001029968261719, + "bytes": 3272660, + "bits_per_second": 26178583.68896636, + "retransmits": 192, + "snd_cwnd": 15964, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.999995, + "end": 17.000098, + "seconds": 1.0001029968261719, + "bytes": 3272660, + "bits_per_second": 26178583.68896636, + "retransmits": 192, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.000098, + "end": 18.000061, + "seconds": 0.99996298551559448, + "bytes": 3327720, + "bits_per_second": 26622745.427195448, + "retransmits": 172, + "snd_cwnd": 20296, + "rtt": 9062, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.000098, + "end": 18.000061, + "seconds": 0.99996298551559448, + "bytes": 3327720, + "bits_per_second": 26622745.427195448, + "retransmits": 172, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.000061, + "end": 19.000111, + "seconds": 1.0000499486923218, + "bytes": 2522824, + "bits_per_second": 20181583.9562724, + "retransmits": 146, + "snd_cwnd": 15820, + "rtt": 4375, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.000061, + "end": 19.000111, + "seconds": 1.0000499486923218, + "bytes": 2522824, + "bits_per_second": 20181583.9562724, + "retransmits": 146, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.000111, + "end": 20.000628, + "seconds": 1.0005170106887817, + "bytes": 3297432, + "bits_per_second": 26365824.586870044, + "retransmits": 181, + "snd_cwnd": 30612, + "rtt": 10000, + "rttvar": 3750, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.000111, + "end": 20.000628, + "seconds": 1.0005170106887817, + "bytes": 3297432, + "bits_per_second": 26365824.586870044, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.000628, + "end": 21.000075, + "seconds": 0.999446988105774, + "bytes": 3327648, + "bits_per_second": 26635913.977243, + "retransmits": 181, + "snd_cwnd": 32096, + "rtt": 10000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.000628, + "end": 21.000075, + "seconds": 0.999446988105774, + "bytes": 3327648, + "bits_per_second": 26635913.977243, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.000075, + "end": 22.000105, + "seconds": 1.0000300407409668, + "bytes": 3252484, + "bits_per_second": 26019090.367246088, + "retransmits": 220, + "snd_cwnd": 7252, + "rtt": 6562, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.000075, + "end": 22.000105, + "seconds": 1.0000300407409668, + "bytes": 3252484, + "bits_per_second": 26019090.367246088, + "retransmits": 220, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.000105, + "end": 22.999964, + "seconds": 0.99985897541046143, + "bytes": 3315012, + "bits_per_second": 26523836.513157256, + "retransmits": 181, + "snd_cwnd": 13092, + "rtt": 3437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.000105, + "end": 22.999964, + "seconds": 0.99985897541046143, + "bytes": 3315012, + "bits_per_second": 26523836.513157256, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.999964, + "end": 24.000172, + "seconds": 1.0002080202102661, + "bytes": 3351164, + "bits_per_second": 26803736.281142879, + "retransmits": 161, + "snd_cwnd": 36380, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.999964, + "end": 24.000172, + "seconds": 1.0002080202102661, + "bytes": 3351164, + "bits_per_second": 26803736.281142879, + "retransmits": 161, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.000172, + "end": 25.000064, + "seconds": 0.999891996383667, + "bytes": 3280788, + "bits_per_second": 26249139.001937836, + "retransmits": 212, + "snd_cwnd": 11620, + "rtt": 5000, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.000172, + "end": 25.000064, + "seconds": 0.999891996383667, + "bytes": 3280788, + "bits_per_second": 26249139.001937836, + "retransmits": 212, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.000064, + "end": 26.000078, + "seconds": 1.0000139474868774, + "bytes": 3365320, + "bits_per_second": 26922184.503184929, + "retransmits": 163, + "snd_cwnd": 11656, + "rtt": 3750, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.000064, + "end": 26.000078, + "seconds": 1.0000139474868774, + "bytes": 3365320, + "bits_per_second": 26922184.503184929, + "retransmits": 163, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.000078, + "end": 27.000127, + "seconds": 1.0000489950180054, + "bytes": 3239524, + "bits_per_second": 25914922.297915407, + "retransmits": 188, + "snd_cwnd": 21828, + "rtt": 9375, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.000078, + "end": 27.000127, + "seconds": 1.0000489950180054, + "bytes": 3239524, + "bits_per_second": 25914922.297915407, + "retransmits": 188, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.000127, + "end": 28.000077, + "seconds": 0.99994999170303345, + "bytes": 3395968, + "bits_per_second": 27169102.680555165, + "retransmits": 152, + "snd_cwnd": 10184, + "rtt": 5312, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.000127, + "end": 28.000077, + "seconds": 0.99994999170303345, + "bytes": 3395968, + "bits_per_second": 27169102.680555165, + "retransmits": 152, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.000077, + "end": 29.000074, + "seconds": 0.99999701976776123, + "bytes": 3172676, + "bits_per_second": 25381483.642715819, + "retransmits": 168, + "snd_cwnd": 30612, + "rtt": 10000, + "rttvar": 2500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.000077, + "end": 29.000074, + "seconds": 0.99999701976776123, + "bytes": 3172676, + "bits_per_second": 25381483.642715819, + "retransmits": 168, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.000074, + "end": 30.00008, + "seconds": 1.0000059604644775, + "bytes": 3272936, + "bits_per_second": 26183331.9351801, + "retransmits": 188, + "snd_cwnd": 24736, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.000074, + "end": 30.00008, + "seconds": 1.0000059604644775, + "bytes": 3272936, + "bits_per_second": 26183331.9351801, + "retransmits": 188, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.00008, + "end": 31.000136, + "seconds": 1.0000560283660889, + "bytes": 3448084, + "bits_per_second": 27583126.562487081, + "retransmits": 147, + "snd_cwnd": 20356, + "rtt": 8125, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.00008, + "end": 31.000136, + "seconds": 1.0000560283660889, + "bytes": 3448084, + "bits_per_second": 27583126.562487081, + "retransmits": 147, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.000136, + "end": 32.000077, + "seconds": 0.99994099140167236, + "bytes": 3330988, + "bits_per_second": 26649476.548257276, + "retransmits": 182, + "snd_cwnd": 20392, + "rtt": 6250, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.000136, + "end": 32.000077, + "seconds": 0.99994099140167236, + "bytes": 3330988, + "bits_per_second": 26649476.548257276, + "retransmits": 182, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.000077, + "end": 32.99999, + "seconds": 0.999912977218628, + "bytes": 3300856, + "bits_per_second": 26409146.197355755, + "retransmits": 194, + "snd_cwnd": 21828, + "rtt": 7812, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.000077, + "end": 32.99999, + "seconds": 0.999912977218628, + "bytes": 3300856, + "bits_per_second": 26409146.197355755, + "retransmits": 194, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.99999, + "end": 34.000176, + "seconds": 1.0001859664916992, + "bytes": 3339364, + "bits_per_second": 26709944.845263645, + "retransmits": 176, + "snd_cwnd": 2908, + "rtt": 9687, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.99999, + "end": 34.000176, + "seconds": 1.0001859664916992, + "bytes": 3339364, + "bits_per_second": 26709944.845263645, + "retransmits": 176, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.000176, + "end": 35.000121, + "seconds": 0.99994498491287231, + "bytes": 3175848, + "bits_per_second": 25408181.833337318, + "retransmits": 216, + "snd_cwnd": 13008, + "rtt": 8750, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.000176, + "end": 35.000121, + "seconds": 0.99994498491287231, + "bytes": 3175848, + "bits_per_second": 25408181.833337318, + "retransmits": 216, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 35.000121, + "seconds": 35.000121, + "bytes": 114794428, + "bits_per_second": 26238635.689288046, + "retransmits": 6366, + "max_snd_cwnd": 48108, + "max_rtt": 13750, + "min_rtt": 3437, + "mean_rtt": 7648, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 35.006838, + "seconds": 35.000121, + "bytes": 114816148, + "bits_per_second": 26238564.705558382, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 35.000121, + "seconds": 35.000121, + "bytes": 114794428, + "bits_per_second": 26238635.689288046, + "retransmits": 6366, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 35.006838, + "seconds": 35.006838, + "bytes": 114816148, + "bits_per_second": 26238564.705558382, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 9.34127736853181, + "host_user": 3.1008339991661469, + "host_system": 6.2421972038817248, + "remote_total": 7.5805369724462865, + "remote_user": 2.3005323760578835, + "remote_system": 5.28501111991776 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +} diff --git a/manual/Two2MBAggregateKillOneRecoverOne.json b/manual/Two2MBAggregateKillOneRecoverOne.json new file mode 100644 index 0000000..52b347a --- /dev/null +++ b/manual/Two2MBAggregateKillOneRecoverOne.json @@ -0,0 +1,1912 @@ +{ + "start": { + "connected": [{ + "socket": 5, + "local_host": "2.2.2.2", + "local_port": 31305, + "remote_host": "2.2.2.3", + "remote_port": 5201 + }], + "version": "iperf 3.9", + "system_info": "FreeBSD ManualBSD-RemotePortal 12.2-RELEASE FreeBSD 12.2-RELEASE r366954 GENERIC amd64", + "timestamp": { + "time": "Mon, 02 Nov 2020 15:47:28 UTC", + "timesecs": 1604332048 + }, + "connecting_to": { + "host": "2.2.2.3", + "port": 5201 + }, + "cookie": "kie5txftfqas5bvmkvqwivj6cjnewtn2vc6x", + "tcp_mss_default": 1460, + "sock_bufsize": 0, + "sndbuf_actual": 32768, + "rcvbuf_actual": 65536, + "test_start": { + "protocol": "TCP", + "num_streams": 1, + "blksize": 131072, + "omit": 5, + "duration": 65, + "bytes": 0, + "blocks": 0, + "reverse": 0, + "tos": 0 + } + }, + "intervals": [{ + "streams": [{ + "socket": 5, + "start": 0, + "end": 1.000326, + "seconds": 1.0003260374069214, + "bytes": 3284284, + "bits_per_second": 26265708.396543439, + "retransmits": 185, + "snd_cwnd": 13092, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 0, + "end": 1.000326, + "seconds": 1.0003260374069214, + "bytes": 3284284, + "bits_per_second": 26265708.396543439, + "retransmits": 185, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.000326, + "end": 2.000226, + "seconds": 0.999899983406067, + "bytes": 3430360, + "bits_per_second": 27445625.017932657, + "retransmits": 137, + "snd_cwnd": 48108, + "rtt": 15312, + "rttvar": 6250, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 1.000326, + "end": 2.000226, + "seconds": 0.999899983406067, + "bytes": 3430360, + "bits_per_second": 27445625.017932657, + "retransmits": 137, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.000226, + "end": 3.000157, + "seconds": 0.99993097782135, + "bytes": 3255272, + "bits_per_second": 26043973.611799385, + "retransmits": 206, + "snd_cwnd": 23276, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 2.000226, + "end": 3.000157, + "seconds": 0.99993097782135, + "bytes": 3255272, + "bits_per_second": 26043973.611799385, + "retransmits": 206, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 3.000157, + "end": 4.000191, + "seconds": 1.000033974647522, + "bytes": 3381164, + "bits_per_second": 27048393.040380418, + "retransmits": 169, + "snd_cwnd": 32048, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 3.000157, + "end": 4.000191, + "seconds": 1.000033974647522, + "bytes": 3381164, + "bits_per_second": 27048393.040380418, + "retransmits": 169, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000191, + "end": 5.000135, + "seconds": 0.999943971633911, + "bytes": 3365224, + "bits_per_second": 26923300.468534973, + "retransmits": 171, + "snd_cwnd": 43716, + "rtt": 14062, + "rttvar": 5000, + "pmtu": -1, + "omitted": true, + "sender": true + }], + "sum": { + "start": 4.000191, + "end": 5.000135, + "seconds": 0.999943971633911, + "bytes": 3365224, + "bits_per_second": 26923300.468534973, + "retransmits": 171, + "omitted": true, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.000151, + "end": 0.99993, + "seconds": 1.000080943107605, + "bytes": 3335176, + "bits_per_second": 26679248.498717949, + "retransmits": 207, + "snd_cwnd": 17460, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.000151, + "end": 0.99993, + "seconds": 1.000080943107605, + "bytes": 3335176, + "bits_per_second": 26679248.498717949, + "retransmits": 207, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 0.99993, + "end": 1.999987, + "seconds": 1.0000569820404053, + "bytes": 3301704, + "bits_per_second": 26412126.983113058, + "retransmits": 188, + "snd_cwnd": 20284, + "rtt": 7812, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 0.99993, + "end": 1.999987, + "seconds": 1.0000569820404053, + "bytes": 3301704, + "bits_per_second": 26412126.983113058, + "retransmits": 188, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 1.999987, + "end": 2.999998, + "seconds": 1.0000109672546387, + "bytes": 3335200, + "bits_per_second": 26681307.379307877, + "retransmits": 164, + "snd_cwnd": 18920, + "rtt": 6250, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 1.999987, + "end": 2.999998, + "seconds": 1.0000109672546387, + "bytes": 3335200, + "bits_per_second": 26681307.379307877, + "retransmits": 164, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 2.999998, + "end": 4.000175, + "seconds": 1.0001770257949829, + "bytes": 3358092, + "bits_per_second": 26859981.09049423, + "retransmits": 175, + "snd_cwnd": 8760, + "rtt": 8750, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 2.999998, + "end": 4.000175, + "seconds": 1.0001770257949829, + "bytes": 3358092, + "bits_per_second": 26859981.09049423, + "retransmits": 175, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 4.000175, + "end": 5.000041, + "seconds": 0.999866008758545, + "bytes": 3389768, + "bits_per_second": 27121778.0807155, + "retransmits": 153, + "snd_cwnd": 20368, + "rtt": 7812, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 4.000175, + "end": 5.000041, + "seconds": 0.999866008758545, + "bytes": 3389768, + "bits_per_second": 27121778.0807155, + "retransmits": 153, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.000041, + "end": 5.999981, + "seconds": 0.99993997812271118, + "bytes": 3374008, + "bits_per_second": 26993684.211601321, + "retransmits": 175, + "snd_cwnd": 2932, + "rtt": 5312, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.000041, + "end": 5.999981, + "seconds": 0.99993997812271118, + "bytes": 3374008, + "bits_per_second": 26993684.211601321, + "retransmits": 175, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 5.999981, + "end": 7.000018, + "seconds": 1.0000369548797607, + "bytes": 3258000, + "bits_per_second": 26063036.843607243, + "retransmits": 192, + "snd_cwnd": 23312, + "rtt": 8437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 5.999981, + "end": 7.000018, + "seconds": 1.0000369548797607, + "bytes": 3258000, + "bits_per_second": 26063036.843607243, + "retransmits": 192, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.000018, + "end": 7.999974, + "seconds": 0.99995601177215576, + "bytes": 3379632, + "bits_per_second": 27038245.3644976, + "retransmits": 168, + "snd_cwnd": 5828, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.000018, + "end": 7.999974, + "seconds": 0.99995601177215576, + "bytes": 3379632, + "bits_per_second": 27038245.3644976, + "retransmits": 168, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 7.999974, + "end": 9.000172, + "seconds": 1.0001980066299438, + "bytes": 3333500, + "bits_per_second": 26662720.604547959, + "retransmits": 180, + "snd_cwnd": 7228, + "rtt": 7812, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 7.999974, + "end": 9.000172, + "seconds": 1.0001980066299438, + "bytes": 3333500, + "bits_per_second": 26662720.604547959, + "retransmits": 180, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 9.000172, + "end": 10.000012, + "seconds": 0.999840021133423, + "bytes": 3287200, + "bits_per_second": 26301807.733390119, + "retransmits": 178, + "snd_cwnd": 14552, + "rtt": 4687, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 9.000172, + "end": 10.000012, + "seconds": 0.999840021133423, + "bytes": 3287200, + "bits_per_second": 26301807.733390119, + "retransmits": 178, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 10.000012, + "end": 11.000167, + "seconds": 1.000154972076416, + "bytes": 3259736, + "bits_per_second": 26073847.281746592, + "retransmits": 230, + "snd_cwnd": 7276, + "rtt": 5312, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 10.000012, + "end": 11.000167, + "seconds": 1.000154972076416, + "bytes": 3259736, + "bits_per_second": 26073847.281746592, + "retransmits": 230, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 11.000167, + "end": 12.000085, + "seconds": 0.999917984008789, + "bytes": 3333572, + "bits_per_second": 26670763.42909899, + "retransmits": 178, + "snd_cwnd": 13092, + "rtt": 3125, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 11.000167, + "end": 12.000085, + "seconds": 0.999917984008789, + "bytes": 3333572, + "bits_per_second": 26670763.42909899, + "retransmits": 178, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 12.000085, + "end": 13.000119, + "seconds": 1.000033974647522, + "bytes": 3361060, + "bits_per_second": 26887566.50440529, + "retransmits": 156, + "snd_cwnd": 32096, + "rtt": 9687, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 12.000085, + "end": 13.000119, + "seconds": 1.000033974647522, + "bytes": 3361060, + "bits_per_second": 26887566.50440529, + "retransmits": 156, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 13.000119, + "end": 14.000094, + "seconds": 0.999975025653839, + "bytes": 3268976, + "bits_per_second": 26152461.140617486, + "retransmits": 211, + "snd_cwnd": 18872, + "rtt": 7500, + "rttvar": 5625, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 13.000119, + "end": 14.000094, + "seconds": 0.999975025653839, + "bytes": 3268976, + "bits_per_second": 26152461.140617486, + "retransmits": 211, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 14.000094, + "end": 15.000911, + "seconds": 1.0008169412612915, + "bytes": 2847032, + "bits_per_second": 22757664.325002283, + "retransmits": 186, + "snd_cwnd": 8688, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 14.000094, + "end": 15.000911, + "seconds": 1.0008169412612915, + "bytes": 2847032, + "bits_per_second": 22757664.325002283, + "retransmits": 186, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 15.000911, + "end": 16.050347, + "seconds": 1.0494359731674194, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 3, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 15.000911, + "end": 16.050347, + "seconds": 1.0494359731674194, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 3, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 16.050347, + "end": 17.012834, + "seconds": 0.962486982345581, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 2, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 16.050347, + "end": 17.012834, + "seconds": 0.962486982345581, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 2, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 17.012834, + "end": 18.020165, + "seconds": 1.0073310136795044, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 17.012834, + "end": 18.020165, + "seconds": 1.0073310136795044, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 18.020165, + "end": 19.020248, + "seconds": 1.0000829696655273, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 18.020165, + "end": 19.020248, + "seconds": 1.0000829696655273, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 19.020248, + "end": 20.011585, + "seconds": 0.9913370013237, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 19.020248, + "end": 20.011585, + "seconds": 0.9913370013237, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 20.011585, + "end": 21.031753, + "seconds": 1.0201679468154907, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 20.011585, + "end": 21.031753, + "seconds": 1.0201679468154907, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 21.031753, + "end": 22.040535, + "seconds": 1.0087820291519165, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 21.031753, + "end": 22.040535, + "seconds": 1.0087820291519165, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 22.040535, + "end": 23.020259, + "seconds": 0.97972398996353149, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 22.040535, + "end": 23.020259, + "seconds": 0.97972398996353149, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 23.020259, + "end": 24.056641, + "seconds": 1.0363819599151611, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 23.020259, + "end": 24.056641, + "seconds": 1.0363819599151611, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 24.056641, + "end": 25.040774, + "seconds": 0.984133005142212, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 24.056641, + "end": 25.040774, + "seconds": 0.984133005142212, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 25.040774, + "end": 26.069302, + "seconds": 1.0285279750823975, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 25.040774, + "end": 26.069302, + "seconds": 1.0285279750823975, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 26.069302, + "end": 27.039494, + "seconds": 0.970192015171051, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 26.069302, + "end": 27.039494, + "seconds": 0.970192015171051, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 27.039494, + "end": 28.040582, + "seconds": 1.00108802318573, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 27.039494, + "end": 28.040582, + "seconds": 1.00108802318573, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 28.040582, + "end": 29.020302, + "seconds": 0.97971999645233154, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 28.040582, + "end": 29.020302, + "seconds": 0.97971999645233154, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 29.020302, + "end": 30.040299, + "seconds": 1.0199970006942749, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 29.020302, + "end": 30.040299, + "seconds": 1.0199970006942749, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 30.040299, + "end": 31.020252, + "seconds": 0.97995299100875854, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 30.040299, + "end": 31.020252, + "seconds": 0.97995299100875854, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 31.020252, + "end": 32.020245, + "seconds": 0.99999302625656128, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 31.020252, + "end": 32.020245, + "seconds": 0.99999302625656128, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 32.020245, + "end": 33.020254, + "seconds": 1.0000089406967163, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 32.020245, + "end": 33.020254, + "seconds": 1.0000089406967163, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 1, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 33.020254, + "end": 34.040252, + "seconds": 1.0199979543685913, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 33.020254, + "end": 34.040252, + "seconds": 1.0199979543685913, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 34.040252, + "end": 35.014487, + "seconds": 0.97423499822616577, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 34.040252, + "end": 35.014487, + "seconds": 0.97423499822616577, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 35.014487, + "end": 36.050218, + "seconds": 1.0357309579849243, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 35.014487, + "end": 36.050218, + "seconds": 1.0357309579849243, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 36.050218, + "end": 37.020267, + "seconds": 0.970049023628235, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 36.050218, + "end": 37.020267, + "seconds": 0.970049023628235, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 37.020267, + "end": 38.050256, + "seconds": 1.0299890041351318, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 37.020267, + "end": 38.050256, + "seconds": 1.0299890041351318, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 38.050256, + "end": 39.040526, + "seconds": 0.99027001857757568, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 38.050256, + "end": 39.040526, + "seconds": 0.99027001857757568, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 39.040526, + "end": 40.02026, + "seconds": 0.97973400354385376, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 39.040526, + "end": 40.02026, + "seconds": 0.97973400354385376, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 40.02026, + "end": 41.039226, + "seconds": 1.01896595954895, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 40.02026, + "end": 41.039226, + "seconds": 1.01896595954895, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 41.039226, + "end": 42.02022, + "seconds": 0.98099398612976074, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 41.039226, + "end": 42.02022, + "seconds": 0.98099398612976074, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 42.02022, + "end": 43.050249, + "seconds": 1.0300290584564209, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 42.02022, + "end": 43.050249, + "seconds": 1.0300290584564209, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 43.050249, + "end": 44.019484, + "seconds": 0.96923500299453735, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 1448, + "rtt": 5937, + "rttvar": 6250, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 43.050249, + "end": 44.019484, + "seconds": 0.96923500299453735, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 44.019484, + "end": 45.003685, + "seconds": 0.98420101404190063, + "bytes": 18824, + "bits_per_second": 153009.393255501, + "retransmits": 2, + "snd_cwnd": 2908, + "rtt": 30078750, + "rttvar": 11282500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 44.019484, + "end": 45.003685, + "seconds": 0.98420101404190063, + "bytes": 18824, + "bits_per_second": 153009.393255501, + "retransmits": 2, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 45.003685, + "end": 46.013583, + "seconds": 1.0098979473114014, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 2908, + "rtt": 30078750, + "rttvar": 11282500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 45.003685, + "end": 46.013583, + "seconds": 1.0098979473114014, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 46.013583, + "end": 47.040277, + "seconds": 1.0266940593719482, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 2908, + "rtt": 30078750, + "rttvar": 11282500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 46.013583, + "end": 47.040277, + "seconds": 1.0266940593719482, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 47.040277, + "end": 48.020275, + "seconds": 0.979997992515564, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "snd_cwnd": 2908, + "rtt": 30078750, + "rttvar": 11282500, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 47.040277, + "end": 48.020275, + "seconds": 0.979997992515564, + "bytes": 0, + "bits_per_second": 0, + "retransmits": 0, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 48.020275, + "end": 48.999985, + "seconds": 0.97970998287200928, + "bytes": 2397888, + "bits_per_second": 19580390.45776071, + "retransmits": 99, + "snd_cwnd": 29152, + "rtt": 9687, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 48.020275, + "end": 48.999985, + "seconds": 0.97970998287200928, + "bytes": 2397888, + "bits_per_second": 19580390.45776071, + "retransmits": 99, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 48.999985, + "end": 50.000165, + "seconds": 1.0001800060272217, + "bytes": 3298964, + "bits_per_second": 26386962.187766131, + "retransmits": 214, + "snd_cwnd": 18908, + "rtt": 6875, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 48.999985, + "end": 50.000165, + "seconds": 1.0001800060272217, + "bytes": 3298964, + "bits_per_second": 26386962.187766131, + "retransmits": 214, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 50.000165, + "end": 50.999913, + "seconds": 0.99974799156188965, + "bytes": 3337688, + "bits_per_second": 26708234.70051156, + "retransmits": 201, + "snd_cwnd": 14540, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 50.000165, + "end": 50.999913, + "seconds": 0.99974799156188965, + "bytes": 3337688, + "bits_per_second": 26708234.70051156, + "retransmits": 201, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 50.999913, + "end": 52.000012, + "seconds": 1.0000989437103271, + "bytes": 3356704, + "bits_per_second": 26850975.264881391, + "retransmits": 189, + "snd_cwnd": 13368, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 50.999913, + "end": 52.000012, + "seconds": 1.0000989437103271, + "bytes": 3356704, + "bits_per_second": 26850975.264881391, + "retransmits": 189, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 52.000012, + "end": 53.00008, + "seconds": 1.0000679492950439, + "bytes": 3294836, + "bits_per_second": 26356897.067424722, + "retransmits": 193, + "snd_cwnd": 14576, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 52.000012, + "end": 53.00008, + "seconds": 1.0000679492950439, + "bytes": 3294836, + "bits_per_second": 26356897.067424722, + "retransmits": 193, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 53.00008, + "end": 54.000031, + "seconds": 0.99995100498199463, + "bytes": 3281660, + "bits_per_second": 26254566.342950694, + "retransmits": 196, + "snd_cwnd": 10196, + "rtt": 3750, + "rttvar": 5000, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 53.00008, + "end": 54.000031, + "seconds": 0.99995100498199463, + "bytes": 3281660, + "bits_per_second": 26254566.342950694, + "retransmits": 196, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 54.000031, + "end": 55.00005, + "seconds": 1.0000189542770386, + "bytes": 3414492, + "bits_per_second": 27315418.255994949, + "retransmits": 140, + "snd_cwnd": 41012, + "rtt": 12500, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 54.000031, + "end": 55.00005, + "seconds": 1.0000189542770386, + "bytes": 3414492, + "bits_per_second": 27315418.255994949, + "retransmits": 140, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 55.00005, + "end": 55.999948, + "seconds": 0.99989801645278931, + "bytes": 3292860, + "bits_per_second": 26345566.814357, + "retransmits": 209, + "snd_cwnd": 17448, + "rtt": 6562, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 55.00005, + "end": 55.999948, + "seconds": 0.99989801645278931, + "bytes": 3292860, + "bits_per_second": 26345566.814357, + "retransmits": 209, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 55.999948, + "end": 57.000027, + "seconds": 1.0000790357589722, + "bytes": 3374668, + "bits_per_second": 26995210.413056392, + "retransmits": 165, + "snd_cwnd": 38032, + "rtt": 10000, + "rttvar": 1875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 55.999948, + "end": 57.000027, + "seconds": 1.0000790357589722, + "bytes": 3374668, + "bits_per_second": 26995210.413056392, + "retransmits": 165, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 57.000027, + "end": 57.999876, + "seconds": 0.999849021434784, + "bytes": 3293088, + "bits_per_second": 26348682.086216711, + "retransmits": 218, + "snd_cwnd": 21852, + "rtt": 9062, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 57.000027, + "end": 57.999876, + "seconds": 0.999849021434784, + "bytes": 3293088, + "bits_per_second": 26348682.086216711, + "retransmits": 218, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 57.999876, + "end": 59.000116, + "seconds": 1.0002399682998657, + "bytes": 3329072, + "bits_per_second": 26626186.55927946, + "retransmits": 177, + "snd_cwnd": 24796, + "rtt": 10000, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 57.999876, + "end": 59.000116, + "seconds": 1.0002399682998657, + "bytes": 3329072, + "bits_per_second": 26626186.55927946, + "retransmits": 177, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 59.000116, + "end": 60.000019, + "seconds": 0.99990302324295044, + "bytes": 3297708, + "bits_per_second": 26384222.656350486, + "retransmits": 205, + "snd_cwnd": 26208, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 59.000116, + "end": 60.000019, + "seconds": 0.99990302324295044, + "bytes": 3297708, + "bits_per_second": 26384222.656350486, + "retransmits": 205, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 60.000019, + "end": 61.00012, + "seconds": 1.0001009702682495, + "bytes": 3427416, + "bits_per_second": 27416559.742608309, + "retransmits": 139, + "snd_cwnd": 2908, + "rtt": 3437, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 60.000019, + "end": 61.00012, + "seconds": 1.0001009702682495, + "bytes": 3427416, + "bits_per_second": 27416559.742608309, + "retransmits": 139, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 61.00012, + "end": 61.999987, + "seconds": 0.999867022037506, + "bytes": 3307556, + "bits_per_second": 26463967.124427713, + "retransmits": 181, + "snd_cwnd": 20512, + "rtt": 8750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 61.00012, + "end": 61.999987, + "seconds": 0.999867022037506, + "bytes": 3307556, + "bits_per_second": 26463967.124427713, + "retransmits": 181, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 61.999987, + "end": 63.000006, + "seconds": 1.0000189542770386, + "bytes": 3310572, + "bits_per_second": 26484074.013524037, + "retransmits": 194, + "snd_cwnd": 11632, + "rtt": 3750, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 61.999987, + "end": 63.000006, + "seconds": 1.0000189542770386, + "bytes": 3310572, + "bits_per_second": 26484074.013524037, + "retransmits": 194, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 63.000006, + "end": 64.000025, + "seconds": 1.0000189542770386, + "bytes": 3307508, + "bits_per_second": 26459562.478122469, + "retransmits": 184, + "snd_cwnd": 29140, + "rtt": 9375, + "rttvar": 4375, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 63.000006, + "end": 64.000025, + "seconds": 1.0000189542770386, + "bytes": 3307508, + "bits_per_second": 26459562.478122469, + "retransmits": 184, + "omitted": false, + "sender": true + } + }, { + "streams": [{ + "socket": 5, + "start": 64.000025, + "end": 64.999933, + "seconds": 0.9999079704284668, + "bytes": 3368192, + "bits_per_second": 26948016.014367472, + "retransmits": 184, + "snd_cwnd": 14552, + "rtt": 4687, + "rttvar": 6875, + "pmtu": -1, + "omitted": false, + "sender": true + }], + "sum": { + "start": 64.000025, + "end": 64.999933, + "seconds": 0.9999079704284668, + "bytes": 3368192, + "bits_per_second": 26948016.014367472, + "retransmits": 184, + "omitted": false, + "sender": true + } + }], + "end": { + "streams": [{ + "sender": { + "socket": 5, + "start": 0, + "end": 64.999933, + "seconds": 64.999933, + "bytes": 105132352, + "bits_per_second": 12939379.7375145, + "retransmits": 5840, + "max_snd_cwnd": 48108, + "max_rtt": 30078750, + "min_rtt": 3125, + "mean_rtt": 1725187, + "sender": true + }, + "receiver": { + "socket": 5, + "start": 0, + "end": 65.002305, + "seconds": 64.999933, + "bytes": 105141040, + "bits_per_second": 12939976.820821969, + "sender": true + } + }], + "sum_sent": { + "start": 0, + "end": 64.999933, + "seconds": 64.999933, + "bytes": 105132352, + "bits_per_second": 12939379.7375145, + "retransmits": 5840, + "sender": true + }, + "sum_received": { + "start": 0, + "end": 65.002305, + "seconds": 65.002305, + "bytes": 105141040, + "bits_per_second": 12939976.820821969, + "sender": true + }, + "cpu_utilization_percent": { + "host_total": 5.0888469839302584, + "host_user": 2.0386648122748259, + "host_system": 3.0544587586613865, + "remote_total": 4.1062918273610478, + "remote_user": 1.3130417321782222, + "remote_system": 2.7925412452824636 + }, + "sender_tcp_congestion": "newreno", + "receiver_tcp_congestion": "newreno" + } +}