Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
fe75cc59b4 | |||
71849ff60d | |||
23e13ad43c | |||
1e3b0d7634 | |||
a9d001e764 | |||
ccff05c8d2 | |||
bd3347d7a4 | |||
433f8785af | |||
907093a925 | |||
3ec73e203d | |||
135d2e8cec | |||
3e777bde92 | |||
e47e058c3f | |||
d700800a78 | |||
b36556bb71 | |||
e594f6f06e | |||
5e2009610f | |||
6c657866e0 | |||
ad07a44065 | |||
268d26d802 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
output/
|
||||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/python,intellij+all,dotenv
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=python,intellij+all,dotenv
|
||||
|
605
evaluation.ipynb
605
evaluation.ipynb
@ -2,7 +2,9 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"# Project Evaluation\n",
|
||||
"\n",
|
||||
@ -13,9 +15,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%% md\n"
|
||||
}
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"## Setup\n",
|
||||
@ -25,17 +25,20 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import ipaddress\n",
|
||||
"import threading\n",
|
||||
"\n",
|
||||
"import runners\n",
|
||||
"from structure import Bridge\n",
|
||||
"from structure import RemotePortal, LocalPortal\n",
|
||||
"from structure import Interface, IpMethod\n",
|
||||
"from structure import StandardEnvironment, StandardTest\n",
|
||||
"from structure import DirectEnvironment, DirectTest\n",
|
||||
"from structure import BaseEnvironment\n",
|
||||
"\n",
|
||||
"%load_ext dotenv\n",
|
||||
"%dotenv"
|
||||
@ -44,9 +47,7 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%% md\n"
|
||||
}
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"## Testing\n",
|
||||
@ -83,10 +84,7 @@
|
||||
" 'access_key': os.getenv('S3_ACCESS_KEY'),\n",
|
||||
" 'secret_key': os.getenv('S3_SECRET_KEY'),\n",
|
||||
" 'branch': os.getenv('TARGET_BRANCH'),\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"directionInbound = {}\n",
|
||||
"directionOutbound = {}"
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -99,187 +97,151 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rp = RemotePortal([Interface(IpMethod.Auto4)], setup_params=setup_params)\n",
|
||||
"lp = LocalPortal([\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
"], None, setup_params=setup_params)\n",
|
||||
"from graphs import TestStore\n",
|
||||
"\n",
|
||||
"rp.set_local_portal(lp)\n",
|
||||
"lp.set_remote_portal(rp)\n",
|
||||
"test_store = TestStore()\n",
|
||||
"\n",
|
||||
"top_level_bridge = Bridge(*[\n",
|
||||
" rp.get_interfaces()[0],\n",
|
||||
" lp.get_interfaces()[0],\n",
|
||||
"])\n",
|
||||
"def run_and_save_test(env: BaseEnvironment, test: StandardTest):\n",
|
||||
" (inbound, outbound) = env.test(test)\n",
|
||||
" test_store.save_inbound(test, inbound)\n",
|
||||
" test_store.save_outbound(test, outbound)\n",
|
||||
"\n",
|
||||
"try:\n",
|
||||
" runner.build(top_level_bridge)\n",
|
||||
"def attempt_n_times(foo, n=3):\n",
|
||||
" for i in range(n):\n",
|
||||
" try:\n",
|
||||
" return foo()\n",
|
||||
" except KeyboardInterrupt as e:\n",
|
||||
" raise e\n",
|
||||
" except Exception as e:\n",
|
||||
" if i == n - 1:\n",
|
||||
" raise e\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(1)\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['One1MBNotProxied'] = rp.speedtest_client(lp.get_interfaces()[0].get_address())\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['One1MBNotProxied'] = lp.speedtest_client(rp.get_interfaces()[0].get_address())\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(2)\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['One2MBNotProxied'] = rp.speedtest_client(lp.get_interfaces()[0].get_address())\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['One2MBNotProxied'] = lp.speedtest_client(rp.get_interfaces()[0].get_address())\n",
|
||||
"finally:\n",
|
||||
" runner.teardown()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rp = RemotePortal([Interface(IpMethod.Auto4)], setup_params=setup_params)\n",
|
||||
"lp = LocalPortal([\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
"], None, setup_params=setup_params)\n",
|
||||
"\n",
|
||||
"rp.set_local_portal(lp)\n",
|
||||
"lp.set_remote_portal(rp)\n",
|
||||
"\n",
|
||||
"top_level_bridge = Bridge(*[\n",
|
||||
" rp.get_interfaces()[0],\n",
|
||||
" *lp.get_interfaces()[0:2],\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"try:\n",
|
||||
" runner.build(top_level_bridge)\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(1)\n",
|
||||
" lp.get_interfaces()[1].set_rate(1)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['Two1MBProxied'] = rp.speedtest_client('172.19.152.3')\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['Two1MBProxied'] = lp.speedtest_client('172.19.152.2')\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(2)\n",
|
||||
" lp.get_interfaces()[1].set_rate(2)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['Two2MBProxied'] = rp.speedtest_client('172.19.152.3')\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['Two2MBProxied'] = lp.speedtest_client('172.19.152.2')\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(1)\n",
|
||||
" lp.get_interfaces()[1].set_rate(2)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['One1MBOne2MBProxied'] = rp.speedtest_client('172.19.152.3')\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['One1MBOne2MBProxied'] = lp.speedtest_client('172.19.152.2')\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(2)\n",
|
||||
" lp.get_interfaces()[1].set_rate(2)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" threading.Timer(5+15, lambda: lp.get_interfaces()[1].set_rate(1)).start()\n",
|
||||
" threading.Timer(5+30, lambda: lp.get_interfaces()[1].set_rate(2)).start()\n",
|
||||
"\n",
|
||||
" directionInbound['One2MBOneYMBProxiedSlow15Return30'] = rp.speedtest_client('172.19.152.3', time=60)\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['One2MBOneYMBProxiedSlow15Return30'] = lp.speedtest_client('172.19.152.2', time=60)\n",
|
||||
"finally:\n",
|
||||
" runner.teardown()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rp = RemotePortal([Interface(IpMethod.Auto4)], setup_params=setup_params)\n",
|
||||
"lp = LocalPortal([\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
"], None, setup_params=setup_params)\n",
|
||||
"\n",
|
||||
"rp.set_local_portal(lp)\n",
|
||||
"lp.set_remote_portal(rp)\n",
|
||||
"\n",
|
||||
"top_level_bridge = Bridge(*[\n",
|
||||
" rp.get_interfaces()[0],\n",
|
||||
" *lp.get_interfaces()[0:3],\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"try:\n",
|
||||
" runner.build(top_level_bridge)\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(1)\n",
|
||||
" lp.get_interfaces()[1].set_rate(1)\n",
|
||||
" lp.get_interfaces()[2].set_rate(1)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['Three1MBProxied'] = rp.speedtest_client('172.19.152.3')\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['Three1MBProxied'] = lp.speedtest_client('172.19.152.2')\n",
|
||||
"finally:\n",
|
||||
" runner.teardown()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rp = RemotePortal([Interface(IpMethod.Auto4)], setup_params=setup_params)\n",
|
||||
"lp = LocalPortal([\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
" Interface(IpMethod.Auto4),\n",
|
||||
"], None, setup_params=setup_params)\n",
|
||||
"\n",
|
||||
"rp.set_local_portal(lp)\n",
|
||||
"lp.set_remote_portal(rp)\n",
|
||||
"\n",
|
||||
"top_level_bridge = Bridge(*[\n",
|
||||
" rp.get_interfaces()[0],\n",
|
||||
" *lp.get_interfaces()[0:4],\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"try:\n",
|
||||
" runner.build(top_level_bridge)\n",
|
||||
"\n",
|
||||
" lp.get_interfaces()[0].set_rate(1)\n",
|
||||
" lp.get_interfaces()[1].set_rate(1)\n",
|
||||
" lp.get_interfaces()[2].set_rate(1)\n",
|
||||
" lp.get_interfaces()[3].set_rate(1)\n",
|
||||
"\n",
|
||||
" lp.speedtest_server()\n",
|
||||
" directionInbound['Four1MBProxied'] = rp.speedtest_client('172.19.152.3')\n",
|
||||
" rp.speedtest_server()\n",
|
||||
" directionOutbound['Four1MBProxied'] = lp.speedtest_client('172.19.152.2')\n",
|
||||
"finally:\n",
|
||||
" runner.teardown()\n"
|
||||
"fast_tests = True"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Direct Server to Server"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def direct_tests():\n",
|
||||
" with DirectEnvironment(runner) as env:\n",
|
||||
" run_and_save_test(env, DirectTest(1, bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, DirectTest(2, bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, DirectTest(3, bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, DirectTest(4, bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
"\n",
|
||||
"attempt_n_times(direct_tests)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Local Portal with 2 Interfaces"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def two_interface_tests():\n",
|
||||
" with StandardEnvironment(2, runner, setup_params) as env:\n",
|
||||
" run_and_save_test(env, StandardTest([1,1], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, StandardTest([1,2], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, StandardTest([2,2], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, StandardTest(\n",
|
||||
" [2,2],\n",
|
||||
" events={10: (0,1), 20: (0,2)},\n",
|
||||
" duration=30,\n",
|
||||
" interval_variation_target=0.8 if fast_tests else 0.5,\n",
|
||||
" ))\n",
|
||||
"\n",
|
||||
"attempt_n_times(two_interface_tests)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Local Portal with 3 Interfaces"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def three_interface_tests():\n",
|
||||
" with StandardEnvironment(3, runner, setup_params) as env:\n",
|
||||
" run_and_save_test(env, StandardTest([1,1,1], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, StandardTest([2,2,2], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
"\n",
|
||||
"attempt_n_times(three_interface_tests)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Local Portal with 4 Interfaces"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def four_interface_tests():\n",
|
||||
" with StandardEnvironment(4, runner, setup_params) as env:\n",
|
||||
" run_and_save_test(env, StandardTest([1,1,1,1], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
" run_and_save_test(env, StandardTest([2,2,2,2], bandwidth_variation_target=0.2 if fast_tests else 0.05))\n",
|
||||
"\n",
|
||||
"attempt_n_times(four_interface_tests)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"## Graphs\n",
|
||||
"This section produces graphs from the collected data."
|
||||
@ -295,51 +257,24 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from itertools import cycle\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"from graphs import plot_iperf_results, plot_iperf_results_time\n",
|
||||
"\n",
|
||||
"def plot_iperf_results(data, title, events=None, filename=None, start_at_zero=True):\n",
|
||||
" cycol = cycle('brgy')\n",
|
||||
"if not os.path.exists('output/'):\n",
|
||||
" os.makedirs('output/')\n",
|
||||
"\n",
|
||||
" fig = plt.figure()\n",
|
||||
" axes = fig.add_axes([0,0,1,1])\n",
|
||||
"\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",
|
||||
" 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')\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)"
|
||||
"for filename in os.listdir('output'):\n",
|
||||
" file_path = os.path.join('output/', filename)\n",
|
||||
" os.unlink(file_path)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%% md\n"
|
||||
}
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Equal Connection Scaling\n",
|
||||
"This section shows equal connections scaling at various speeds and number of connections."
|
||||
"### Section 4.2: Graphs\n",
|
||||
"#### Subsection 4.2.2 Line Graphs"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -352,12 +287,16 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(\n",
|
||||
"plot_iperf_results_time(test_store,\n",
|
||||
" {\n",
|
||||
" '2x1MBps Connections (proxied)': directionInbound['Two1MBProxied'],\n",
|
||||
" '1x1MBps Connection (not proxied)': directionInbound['One1MBNotProxied'],\n",
|
||||
" '4x1MB Connections (proxied)': StandardTest([1,1,1,1]),\n",
|
||||
" '3x1MB Connections (proxied)': StandardTest([1,1,1]),\n",
|
||||
" '2x1MB Connections (proxied)': StandardTest([1,1]),\n",
|
||||
" },\n",
|
||||
" 'Two Equal 1MB Connections',\n",
|
||||
" fast_tests,\n",
|
||||
" error_bars_x=False,\n",
|
||||
" error_bars_y=False,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
@ -371,12 +310,16 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(\n",
|
||||
"plot_iperf_results_time(test_store,\n",
|
||||
" {\n",
|
||||
" '2x2MBps Connections (proxied)': directionInbound['Two2MBProxied'],\n",
|
||||
" '1x2MBps Connection (not proxied)': directionInbound['One2MBNotProxied'],\n",
|
||||
" '4x1MB Connections (proxied)': StandardTest([1,1,1,1]),\n",
|
||||
" '3x1MB Connections (proxied)': StandardTest([1,1,1]),\n",
|
||||
" '2x1MB Connections (proxied)': StandardTest([1,1]),\n",
|
||||
" },\n",
|
||||
" 'Two Equal 2MB Connections',\n",
|
||||
" fast_tests,\n",
|
||||
" error_bars_x=True,\n",
|
||||
" error_bars_y=False,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
@ -390,26 +333,27 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(\n",
|
||||
"plot_iperf_results_time(test_store,\n",
|
||||
" {\n",
|
||||
" '4x1MBps Connections (proxied)': directionInbound['Four1MBProxied'],\n",
|
||||
" '3x1MBps Connections (proxied)': directionInbound['Three1MBProxied'],\n",
|
||||
" '2x1MBps Connections (proxied)': directionInbound['Two1MBProxied'],\n",
|
||||
" '4x1MB Connections (proxied)': StandardTest([1,1,1,1]),\n",
|
||||
" '3x1MB Connections (proxied)': StandardTest([1,1,1]),\n",
|
||||
" '2x1MB Connections (proxied)': StandardTest([1,1]),\n",
|
||||
" },\n",
|
||||
" 'More Equal Connections',\n",
|
||||
" fast_tests,\n",
|
||||
" error_bars_x=False,\n",
|
||||
" error_bars_y=True,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%% md\n"
|
||||
}
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Mixed Connections Scaling\n",
|
||||
"This section shows mixed connections at various speeds with various events."
|
||||
"### Section 4.3: Success Criteria\n",
|
||||
"#### Subsection 4.3.2: Bidirectional Performance Gains"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -422,51 +366,166 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(\n",
|
||||
"plot_iperf_results(test_store,\n",
|
||||
" {\n",
|
||||
" '2x2MBps Connections (proxied)': directionInbound['Two2MBProxied'],\n",
|
||||
" '1x1MBps + 1x2MBps Connections (proxied)': directionInbound['One1MBOne2MBProxied'],\n",
|
||||
" '2x1MBps Connections (proxied)': directionInbound['Two1MBProxied'],\n",
|
||||
" '2x1MB Connections (proxied)': StandardTest([1,1]),\n",
|
||||
" '1x1MB + 1x2MB\\nConnections (proxied)': StandardTest([1,2]),\n",
|
||||
" '2x2MB Connections (proxied)': StandardTest([2,2]),\n",
|
||||
" },\n",
|
||||
" 'Mixed Speed Connections',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(\n",
|
||||
" {\n",
|
||||
" '1x2MBps + 1xYMBps Connections (proxied)': directionInbound['One2MBOneYMBProxiedSlow15Return30'],\n",
|
||||
" },\n",
|
||||
" 'Network Slow',\n",
|
||||
" events={0: 'Y=2', 15: 'Y=1', 30: 'Y=2'}\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%% md\n"
|
||||
}
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"## Criteria\n",
|
||||
"This section automatically verifies some criteria with assertions."
|
||||
"#### Subsection 4.3.5: More Bandwidth over Two Equal Connections"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(test_store,\n",
|
||||
" {\n",
|
||||
" '1x1MB Connection\\n(direct)': DirectTest(1),\n",
|
||||
" '2x1MB Connections\\n(proxied)': StandardTest([1,1]),\n",
|
||||
" '1x2MB Connection\\n(direct)': DirectTest(2),\n",
|
||||
"\n",
|
||||
" },\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"### Section 4.4: Extended Goals\n",
|
||||
"#### Subsection 4.4.1: More Bandwidth over Unequal Connections"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(test_store,\n",
|
||||
" {\n",
|
||||
" '2x2MB Connections\\n(proxied)': StandardTest([2,2]),\n",
|
||||
" '1x1MB + 1x2MB\\nConnections (proxied)': StandardTest([1,2]),\n",
|
||||
" '2x1MB Connections\\n(proxied)': StandardTest([1,1]),\n",
|
||||
" },\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"#### Subsection 4.4.2: More Bandwidth over Four Equal Connections"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(test_store,\n",
|
||||
" {\n",
|
||||
" '4x1MB Connections\\n(proxied)': StandardTest([1,1,1,1]),\n",
|
||||
" '3x1MB Connections\\n(proxied)': StandardTest([1,1,1]),\n",
|
||||
" '2x1MB Connections\\n(proxied)': StandardTest([1,1]),\n",
|
||||
" },\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results(test_store,\n",
|
||||
" {\n",
|
||||
" '4x2MB Connections\\n(proxied)': StandardTest([2,2,2,2]),\n",
|
||||
" '3x2MB Connections\\n(proxied)': StandardTest([2,2,2]),\n",
|
||||
" '2x2MB Connections\\n(proxied)': StandardTest([2,2]),\n",
|
||||
" },\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"source": [
|
||||
"#### Subsection 4.4.3: Bandwidth Variation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_iperf_results_time(test_store,\n",
|
||||
" {\n",
|
||||
" 'Varied Connection': StandardTest([2,2], events={10: (0,1), 20: (0,2)}, duration=30),\n",
|
||||
" },\n",
|
||||
" fast_tests,\n",
|
||||
" filename='png',\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"name": "#%%\n"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
@ -487,7 +546,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.6"
|
||||
"version": "3.9.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
2
graphs/__init__.py
Normal file
2
graphs/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from .store import TestStore
|
||||
from .graphs import plot_iperf_results, plot_iperf_results_time
|
132
graphs/graphs.py
Normal file
132
graphs/graphs.py
Normal file
@ -0,0 +1,132 @@
|
||||
from itertools import cycle
|
||||
from typing import Dict, Union
|
||||
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from graphs import TestStore
|
||||
from structure import StandardTest
|
||||
|
||||
|
||||
def plot_iperf_results(
|
||||
store: TestStore,
|
||||
series: Dict[str, StandardTest],
|
||||
fast_tests: bool,
|
||||
title: str = None,
|
||||
direction='both',
|
||||
error_bars=True,
|
||||
filename=None,
|
||||
):
|
||||
if direction == 'both':
|
||||
plot_iperf_results(store, series, fast_tests, title, 'inbound', error_bars, filename)
|
||||
plot_iperf_results(store, series, fast_tests, title, 'outbound', error_bars, filename)
|
||||
return
|
||||
|
||||
if filename in ['png', 'eps']:
|
||||
filename = 'output/{}{}{}.{}'.format(
|
||||
'I' if direction == 'inbound' else 'O',
|
||||
'E' if error_bars else '',
|
||||
''.join(['S{}-{}'.format(i, x.name()) for (i, x) in enumerate(series.values())]),
|
||||
filename,
|
||||
)
|
||||
print(filename)
|
||||
|
||||
series = {
|
||||
k: (store.get_inbound(v) if direction == 'inbound' else store.get_outbound(v))
|
||||
for (k, v) in series.items()
|
||||
}
|
||||
|
||||
fig = plt.figure()
|
||||
axes = fig.add_axes([0, 0, 1, 1])
|
||||
|
||||
if title is not None:
|
||||
axes.set_title(title, pad=20.0 if True in [len(x.test.events) > 0 for x in series.values()] else None)
|
||||
|
||||
axes.set_ylabel('Throughput (Mbps)')
|
||||
|
||||
for k, v in series.items():
|
||||
axes.bar(
|
||||
k,
|
||||
v.bandwidth_mean() / 1e6,
|
||||
yerr=1.5 * v.bandwidth_standard_deviation() / 1e6,
|
||||
width=0.4,
|
||||
capsize=15,
|
||||
)
|
||||
|
||||
if fast_tests:
|
||||
fig.text(0.95, 0.05, 'Draft', fontsize=50, color='gray', ha='right', va='bottom', alpha=0.5)
|
||||
|
||||
if filename is not None:
|
||||
fig.savefig(filename, bbox_inches='tight', pad_inches=0.3)
|
||||
|
||||
|
||||
def plot_iperf_results_time(
|
||||
store: TestStore,
|
||||
series: Dict[str, StandardTest],
|
||||
fast_tests: bool,
|
||||
title: str = None,
|
||||
direction='both',
|
||||
error_bars_x=False,
|
||||
error_bars_y=True,
|
||||
filename=None,
|
||||
start_at_zero=True,
|
||||
):
|
||||
if direction == 'both':
|
||||
plot_iperf_results_time(store, series, fast_tests, title, 'outbound', error_bars_x, error_bars_y, filename,
|
||||
start_at_zero)
|
||||
plot_iperf_results_time(store, series, fast_tests, title, 'inbound', error_bars_x, error_bars_y, filename,
|
||||
start_at_zero)
|
||||
return
|
||||
|
||||
if filename in ['png', 'eps']:
|
||||
filename = 'output/T{}{}{}{}.{}'.format(
|
||||
'I' if direction == 'inbound' else 'O',
|
||||
'Ex' if error_bars_x else '',
|
||||
'Ey' if error_bars_y else '',
|
||||
''.join(['S{}-{}'.format(i, x.name()) for (i, x) in enumerate(series.values())]),
|
||||
filename,
|
||||
)
|
||||
print(filename)
|
||||
|
||||
series = {
|
||||
k: (store.get_inbound(v) if direction == 'inbound' else store.get_outbound(v))
|
||||
for (k, v) in series.items()
|
||||
}
|
||||
|
||||
cycol = cycle('brgy')
|
||||
|
||||
fig = plt.figure()
|
||||
axes = fig.add_axes([0, 0, 1, 1])
|
||||
|
||||
if title is not None:
|
||||
axes.set_title(title, pad=20.0 if True in [len(x.test.events) > 0 for x in series.values()] else None)
|
||||
|
||||
axes.set_xlabel('Time (s)')
|
||||
axes.set_ylabel('Throughput (Mbps)')
|
||||
|
||||
for k, v in series.items():
|
||||
data = v.interval_means()
|
||||
|
||||
axes.errorbar(
|
||||
data.keys(),
|
||||
[x / 1e6 for x in data.values()],
|
||||
xerr=(
|
||||
[x[0] for x in v.interval_time_ranges().values()],
|
||||
[x[1] for x in v.interval_time_ranges().values()]) if error_bars_x else None,
|
||||
yerr=[x * 1.5 / 1e6 for x in v.interval_standard_deviations().values()] if error_bars_y else None,
|
||||
capsize=3,
|
||||
ecolor='grey',
|
||||
color=next(cycol),
|
||||
label=k,
|
||||
)
|
||||
|
||||
legend = axes.legend()
|
||||
|
||||
if start_at_zero:
|
||||
axes.set_ylim(bottom=0)
|
||||
axes.set_xlim(left=0)
|
||||
|
||||
if fast_tests:
|
||||
fig.text(0.95, 0.05, 'Draft', fontsize=50, color='gray', ha='right', va='bottom', alpha=0.5)
|
||||
|
||||
if filename is not None:
|
||||
fig.savefig(filename, bbox_extra_artists=(legend,), bbox_inches='tight', pad_inches=0.3)
|
21
graphs/store.py
Normal file
21
graphs/store.py
Normal file
@ -0,0 +1,21 @@
|
||||
from typing import Dict
|
||||
|
||||
from structure import IperfResult, StandardTest
|
||||
|
||||
|
||||
class TestStore:
|
||||
def __init__(self):
|
||||
self.inbound: Dict[str, IperfResult] = dict()
|
||||
self.outbound: Dict[str, IperfResult] = dict()
|
||||
|
||||
def save_inbound(self, test: StandardTest, result: IperfResult):
|
||||
self.inbound[test.name()] = result
|
||||
|
||||
def save_outbound(self, test: StandardTest, result: IperfResult):
|
||||
self.outbound[test.name()] = result
|
||||
|
||||
def get_inbound(self, test: StandardTest) -> IperfResult:
|
||||
return self.inbound[test.name()]
|
||||
|
||||
def get_outbound(self, test: StandardTest) -> IperfResult:
|
||||
return self.outbound[test.name()]
|
@ -1,928 +0,0 @@
|
||||
{
|
||||
"start": {
|
||||
"connected": [{
|
||||
"socket": 5,
|
||||
"local_host": "2.2.2.3",
|
||||
"local_port": 33206,
|
||||
"remote_host": "2.2.2.2",
|
||||
"remote_port": 5201
|
||||
}],
|
||||
"version": "iperf 3.6",
|
||||
"system_info": "Linux Manual-LocalPortal 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64",
|
||||
"timestamp": {
|
||||
"time": "Tue, 03 Nov 2020 20:35:32 GMT",
|
||||
"timesecs": 1604435732
|
||||
},
|
||||
"connecting_to": {
|
||||
"host": "2.2.2.2",
|
||||
"port": 5201
|
||||
},
|
||||
"cookie": "axalr4267zeh7islurtqh5euv2dodaj24kyf",
|
||||
"tcp_mss_default": 1448,
|
||||
"sock_bufsize": 0,
|
||||
"sndbuf_actual": 16384,
|
||||
"rcvbuf_actual": 131072,
|
||||
"test_start": {
|
||||
"protocol": "TCP",
|
||||
"num_streams": 1,
|
||||
"blksize": 131072,
|
||||
"omit": 5,
|
||||
"duration": 30,
|
||||
"bytes": 0,
|
||||
"blocks": 0,
|
||||
"reverse": 0,
|
||||
"tos": 0
|
||||
}
|
||||
},
|
||||
"intervals": [{
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 1.0003411769866943,
|
||||
"seconds": 1.0003411769866943,
|
||||
"bytes": 4229608,
|
||||
"bits_per_second": 33825323.578027688,
|
||||
"retransmits": 141,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 9958,
|
||||
"rttvar": 5796,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0,
|
||||
"end": 1.0003411769866943,
|
||||
"seconds": 1.0003411769866943,
|
||||
"bytes": 4229608,
|
||||
"bits_per_second": 33825323.578027688,
|
||||
"retransmits": 141,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0003411769866943,
|
||||
"end": 2.0002310276031494,
|
||||
"seconds": 0.99988985061645508,
|
||||
"bytes": 2867040,
|
||||
"bits_per_second": 22938846.699823216,
|
||||
"retransmits": 197,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 9344,
|
||||
"rttvar": 13938,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0003411769866943,
|
||||
"end": 2.0002310276031494,
|
||||
"seconds": 0.99988985061645508,
|
||||
"bytes": 2867040,
|
||||
"bits_per_second": 22938846.699823216,
|
||||
"retransmits": 197,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0002310276031494,
|
||||
"end": 3.0001740455627441,
|
||||
"seconds": 0.99994301795959473,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21895007.622209,
|
||||
"retransmits": 88,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 14094,
|
||||
"rttvar": 11719,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0002310276031494,
|
||||
"end": 3.0001740455627441,
|
||||
"seconds": 0.99994301795959473,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21895007.622209,
|
||||
"retransmits": 88,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0001740455627441,
|
||||
"end": 4.0002920627593994,
|
||||
"seconds": 1.0001180171966553,
|
||||
"bytes": 2671560,
|
||||
"bits_per_second": 21369957.977466859,
|
||||
"retransmits": 92,
|
||||
"snd_cwnd": 40544,
|
||||
"rtt": 22721,
|
||||
"rttvar": 10547,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0001740455627441,
|
||||
"end": 4.0002920627593994,
|
||||
"seconds": 1.0001180171966553,
|
||||
"bytes": 2671560,
|
||||
"bits_per_second": 21369957.977466859,
|
||||
"retransmits": 92,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0002920627593994,
|
||||
"end": 5.0001270771026611,
|
||||
"seconds": 0.99983501434326172,
|
||||
"bytes": 3388320,
|
||||
"bits_per_second": 27111032.931573071,
|
||||
"retransmits": 109,
|
||||
"snd_cwnd": 40544,
|
||||
"rtt": 11201,
|
||||
"rttvar": 3720,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0002920627593994,
|
||||
"end": 5.0001270771026611,
|
||||
"seconds": 0.99983501434326172,
|
||||
"bytes": 3388320,
|
||||
"bits_per_second": 27111032.931573071,
|
||||
"retransmits": 109,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.5047531127929688e-05,
|
||||
"end": 1.0000720024108887,
|
||||
"seconds": 1.0001070499420166,
|
||||
"bytes": 2606400,
|
||||
"bits_per_second": 20848968.119171735,
|
||||
"retransmits": 133,
|
||||
"snd_cwnd": 39096,
|
||||
"rtt": 18019,
|
||||
"rttvar": 2579,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.5047531127929688e-05,
|
||||
"end": 1.0000720024108887,
|
||||
"seconds": 1.0001070499420166,
|
||||
"bytes": 2606400,
|
||||
"bits_per_second": 20848968.119171735,
|
||||
"retransmits": 133,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0000720024108887,
|
||||
"end": 2.0003430843353271,
|
||||
"seconds": 1.0002710819244385,
|
||||
"bytes": 2867040,
|
||||
"bits_per_second": 22930104.063262954,
|
||||
"retransmits": 95,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 9610,
|
||||
"rttvar": 4548,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0000720024108887,
|
||||
"end": 2.0003430843353271,
|
||||
"seconds": 1.0002710819244385,
|
||||
"bytes": 2867040,
|
||||
"bits_per_second": 22930104.063262954,
|
||||
"retransmits": 95,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0003430843353271,
|
||||
"end": 3.0001189708709717,
|
||||
"seconds": 0.99977588653564453,
|
||||
"bytes": 3192840,
|
||||
"bits_per_second": 25548445.750686083,
|
||||
"retransmits": 107,
|
||||
"snd_cwnd": 31856,
|
||||
"rtt": 14704,
|
||||
"rttvar": 11251,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0003430843353271,
|
||||
"end": 3.0001189708709717,
|
||||
"seconds": 0.99977588653564453,
|
||||
"bytes": 3192840,
|
||||
"bits_per_second": 25548445.750686083,
|
||||
"retransmits": 107,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0001189708709717,
|
||||
"end": 4.0001530647277832,
|
||||
"seconds": 1.0000340938568115,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893013.582729738,
|
||||
"retransmits": 108,
|
||||
"snd_cwnd": 24616,
|
||||
"rtt": 10218,
|
||||
"rttvar": 6107,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0001189708709717,
|
||||
"end": 4.0001530647277832,
|
||||
"seconds": 1.0000340938568115,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893013.582729738,
|
||||
"retransmits": 108,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0001530647277832,
|
||||
"end": 5.000140905380249,
|
||||
"seconds": 0.99998784065246582,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21894026.217073698,
|
||||
"retransmits": 117,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 1468,
|
||||
"rttvar": 1844,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0001530647277832,
|
||||
"end": 5.000140905380249,
|
||||
"seconds": 0.99998784065246582,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21894026.217073698,
|
||||
"retransmits": 117,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 5.000140905380249,
|
||||
"end": 6.0001630783081055,
|
||||
"seconds": 1.0000221729278564,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893274.562002596,
|
||||
"retransmits": 111,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 772,
|
||||
"rttvar": 138,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 5.000140905380249,
|
||||
"end": 6.0001630783081055,
|
||||
"seconds": 1.0000221729278564,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893274.562002596,
|
||||
"retransmits": 111,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 6.0001630783081055,
|
||||
"end": 7.0002310276031494,
|
||||
"seconds": 1.0000679492950439,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21892272.435521096,
|
||||
"retransmits": 92,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 10739,
|
||||
"rttvar": 6756,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 6.0001630783081055,
|
||||
"end": 7.0002310276031494,
|
||||
"seconds": 1.0000679492950439,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21892272.435521096,
|
||||
"retransmits": 92,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 7.0002310276031494,
|
||||
"end": 8.0000350475311279,
|
||||
"seconds": 0.99980401992797852,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21898051.581726115,
|
||||
"retransmits": 75,
|
||||
"snd_cwnd": 52128,
|
||||
"rtt": 15688,
|
||||
"rttvar": 4171,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 7.0002310276031494,
|
||||
"end": 8.0000350475311279,
|
||||
"seconds": 0.99980401992797852,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21898051.581726115,
|
||||
"retransmits": 75,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 8.0000350475311279,
|
||||
"end": 9.0002028942108154,
|
||||
"seconds": 1.0001678466796875,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21890085.82177674,
|
||||
"retransmits": 158,
|
||||
"snd_cwnd": 34752,
|
||||
"rtt": 7382,
|
||||
"rttvar": 6454,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 8.0000350475311279,
|
||||
"end": 9.0002028942108154,
|
||||
"seconds": 1.0001678466796875,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21890085.82177674,
|
||||
"retransmits": 158,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 9.0002028942108154,
|
||||
"end": 10.00016188621521,
|
||||
"seconds": 0.99995899200439453,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21894657.856033143,
|
||||
"retransmits": 82,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 11687,
|
||||
"rttvar": 4174,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 9.0002028942108154,
|
||||
"end": 10.00016188621521,
|
||||
"seconds": 0.99995899200439453,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21894657.856033143,
|
||||
"retransmits": 82,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 10.00016188621521,
|
||||
"end": 11.00008487701416,
|
||||
"seconds": 0.9999229907989502,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18246205.125678919,
|
||||
"retransmits": 103,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 8499,
|
||||
"rttvar": 12658,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 10.00016188621521,
|
||||
"end": 11.00008487701416,
|
||||
"seconds": 0.9999229907989502,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18246205.125678919,
|
||||
"retransmits": 103,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 11.00008487701416,
|
||||
"end": 12.000163078308105,
|
||||
"seconds": 1.0000782012939453,
|
||||
"bytes": 3192840,
|
||||
"bits_per_second": 25540722.682437934,
|
||||
"retransmits": 181,
|
||||
"snd_cwnd": 36200,
|
||||
"rtt": 10647,
|
||||
"rttvar": 14692,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 11.00008487701416,
|
||||
"end": 12.000163078308105,
|
||||
"seconds": 1.0000782012939453,
|
||||
"bytes": 3192840,
|
||||
"bits_per_second": 25540722.682437934,
|
||||
"retransmits": 181,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 12.000163078308105,
|
||||
"end": 13.000297069549561,
|
||||
"seconds": 1.0001339912414551,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18242355.684114821,
|
||||
"retransmits": 147,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 22539,
|
||||
"rttvar": 10121,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 12.000163078308105,
|
||||
"end": 13.000297069549561,
|
||||
"seconds": 1.0001339912414551,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18242355.684114821,
|
||||
"retransmits": 147,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 13.000297069549561,
|
||||
"end": 14.000071048736572,
|
||||
"seconds": 0.99977397918701172,
|
||||
"bytes": 3258000,
|
||||
"bits_per_second": 26069892.338260811,
|
||||
"retransmits": 155,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 1443,
|
||||
"rttvar": 185,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 13.000297069549561,
|
||||
"end": 14.000071048736572,
|
||||
"seconds": 0.99977397918701172,
|
||||
"bytes": 3258000,
|
||||
"bits_per_second": 26069892.338260811,
|
||||
"retransmits": 155,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 14.000071048736572,
|
||||
"end": 15.000072002410889,
|
||||
"seconds": 1.0000009536743164,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893739.12050331,
|
||||
"retransmits": 87,
|
||||
"snd_cwnd": 55024,
|
||||
"rtt": 17620,
|
||||
"rttvar": 8980,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 14.000071048736572,
|
||||
"end": 15.000072002410889,
|
||||
"seconds": 1.0000009536743164,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893739.12050331,
|
||||
"retransmits": 87,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 15.000072002410889,
|
||||
"end": 16.000117063522339,
|
||||
"seconds": 1.0000450611114502,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21892773.487293936,
|
||||
"retransmits": 157,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 7473,
|
||||
"rttvar": 7514,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 15.000072002410889,
|
||||
"end": 16.000117063522339,
|
||||
"seconds": 1.0000450611114502,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21892773.487293936,
|
||||
"retransmits": 157,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 16.000117063522339,
|
||||
"end": 17.000438928604126,
|
||||
"seconds": 1.0003218650817871,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14591143.620365264,
|
||||
"retransmits": 144,
|
||||
"snd_cwnd": 1448,
|
||||
"rtt": 10071,
|
||||
"rttvar": 4812,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 16.000117063522339,
|
||||
"end": 17.000438928604126,
|
||||
"seconds": 1.0003218650817871,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14591143.620365264,
|
||||
"retransmits": 144,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 17.000438928604126,
|
||||
"end": 18.000046014785767,
|
||||
"seconds": 0.99960708618164062,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29203154.322873138,
|
||||
"retransmits": 79,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 6663,
|
||||
"rttvar": 7363,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 17.000438928604126,
|
||||
"end": 18.000046014785767,
|
||||
"seconds": 0.99960708618164062,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29203154.322873138,
|
||||
"retransmits": 79,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 18.000046014785767,
|
||||
"end": 19.000181913375854,
|
||||
"seconds": 1.0001358985900879,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18242320.894310534,
|
||||
"retransmits": 84,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 10117,
|
||||
"rttvar": 12215,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 18.000046014785767,
|
||||
"end": 19.000181913375854,
|
||||
"seconds": 1.0001358985900879,
|
||||
"bytes": 2280600,
|
||||
"bits_per_second": 18242320.894310534,
|
||||
"retransmits": 84,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 19.000181913375854,
|
||||
"end": 20.000272989273071,
|
||||
"seconds": 1.0000910758972168,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891766.187752791,
|
||||
"retransmits": 61,
|
||||
"snd_cwnd": 31856,
|
||||
"rtt": 27407,
|
||||
"rttvar": 8084,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 19.000181913375854,
|
||||
"end": 20.000272989273071,
|
||||
"seconds": 1.0000910758972168,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891766.187752791,
|
||||
"retransmits": 61,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 20.000272989273071,
|
||||
"end": 21.000174045562744,
|
||||
"seconds": 0.99990105628967285,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21895926.464205418,
|
||||
"retransmits": 167,
|
||||
"snd_cwnd": 23168,
|
||||
"rtt": 15721,
|
||||
"rttvar": 4637,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 20.000272989273071,
|
||||
"end": 21.000174045562744,
|
||||
"seconds": 0.99990105628967285,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21895926.464205418,
|
||||
"retransmits": 167,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 21.000174045562744,
|
||||
"end": 22.000287055969238,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 3518640,
|
||||
"bits_per_second": 28145939.215968043,
|
||||
"retransmits": 157,
|
||||
"snd_cwnd": 41992,
|
||||
"rtt": 20718,
|
||||
"rttvar": 6776,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 21.000174045562744,
|
||||
"end": 22.000287055969238,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 3518640,
|
||||
"bits_per_second": 28145939.215968043,
|
||||
"retransmits": 157,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 22.000287055969238,
|
||||
"end": 23.000086069107056,
|
||||
"seconds": 0.99979901313781738,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29197548.32362099,
|
||||
"retransmits": 117,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 14186,
|
||||
"rttvar": 1897,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 22.000287055969238,
|
||||
"end": 23.000086069107056,
|
||||
"seconds": 0.99979901313781738,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29197548.32362099,
|
||||
"retransmits": 117,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 23.000086069107056,
|
||||
"end": 24.000319004058838,
|
||||
"seconds": 1.0002329349517822,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14592440.910480132,
|
||||
"retransmits": 66,
|
||||
"snd_cwnd": 23168,
|
||||
"rtt": 2717,
|
||||
"rttvar": 4139,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 23.000086069107056,
|
||||
"end": 24.000319004058838,
|
||||
"seconds": 1.0002329349517822,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14592440.910480132,
|
||||
"retransmits": 66,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.000319004058838,
|
||||
"end": 25.000109910964966,
|
||||
"seconds": 0.99979090690612793,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29197785.055211406,
|
||||
"retransmits": 165,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 7919,
|
||||
"rttvar": 7074,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.000319004058838,
|
||||
"end": 25.000109910964966,
|
||||
"seconds": 0.99979090690612793,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29197785.055211406,
|
||||
"retransmits": 165,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 25.000109910964966,
|
||||
"end": 26.000142097473145,
|
||||
"seconds": 1.0000321865081787,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893055.338995274,
|
||||
"retransmits": 96,
|
||||
"snd_cwnd": 20272,
|
||||
"rtt": 8375,
|
||||
"rttvar": 6912,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 25.000109910964966,
|
||||
"end": 26.000142097473145,
|
||||
"seconds": 1.0000321865081787,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21893055.338995274,
|
||||
"retransmits": 96,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 26.000142097473145,
|
||||
"end": 27.000432014465332,
|
||||
"seconds": 1.0002899169921875,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14591609.644420715,
|
||||
"retransmits": 103,
|
||||
"snd_cwnd": 33304,
|
||||
"rtt": 16162,
|
||||
"rttvar": 1970,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 26.000142097473145,
|
||||
"end": 27.000432014465332,
|
||||
"seconds": 1.0002899169921875,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14591609.644420715,
|
||||
"retransmits": 103,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 27.000432014465332,
|
||||
"end": 28.000056982040405,
|
||||
"seconds": 0.99962496757507324,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29202631.9338684,
|
||||
"retransmits": 105,
|
||||
"snd_cwnd": 34752,
|
||||
"rtt": 4937,
|
||||
"rttvar": 3315,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 27.000432014465332,
|
||||
"end": 28.000056982040405,
|
||||
"seconds": 0.99962496757507324,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29202631.9338684,
|
||||
"retransmits": 105,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 28.000056982040405,
|
||||
"end": 29.000309944152832,
|
||||
"seconds": 1.0002529621124268,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14592148.73923008,
|
||||
"retransmits": 105,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 14421,
|
||||
"rttvar": 9939,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 28.000056982040405,
|
||||
"end": 29.000309944152832,
|
||||
"seconds": 1.0002529621124268,
|
||||
"bytes": 1824480,
|
||||
"bits_per_second": 14592148.73923008,
|
||||
"retransmits": 105,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 29.000309944152832,
|
||||
"end": 30.000411033630371,
|
||||
"seconds": 1.0001010894775391,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891546.994951759,
|
||||
"retransmits": 117,
|
||||
"snd_cwnd": 24616,
|
||||
"rtt": 12050,
|
||||
"rttvar": 4452,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 29.000309944152832,
|
||||
"end": 30.000411033630371,
|
||||
"seconds": 1.0001010894775391,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891546.994951759,
|
||||
"retransmits": 117,
|
||||
"omitted": false
|
||||
}
|
||||
}],
|
||||
"end": {
|
||||
"streams": [{
|
||||
"sender": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.000411033630371,
|
||||
"seconds": 30.000411033630371,
|
||||
"bytes": 82948680,
|
||||
"bits_per_second": 22119344.94017826,
|
||||
"retransmits": 3474,
|
||||
"max_snd_cwnd": 55024,
|
||||
"max_rtt": 27407,
|
||||
"min_rtt": 772,
|
||||
"mean_rtt": 11636
|
||||
},
|
||||
"receiver": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.04242992401123,
|
||||
"seconds": 30.000411033630371,
|
||||
"bytes": 81816344,
|
||||
"bits_per_second": 21786877.88090238
|
||||
}
|
||||
}],
|
||||
"sum_sent": {
|
||||
"start": 0,
|
||||
"end": 30.000411033630371,
|
||||
"seconds": 30.000411033630371,
|
||||
"bytes": 82948680,
|
||||
"bits_per_second": 22119344.94017826,
|
||||
"retransmits": 3474
|
||||
},
|
||||
"sum_received": {
|
||||
"start": 0,
|
||||
"end": 30.04242992401123,
|
||||
"seconds": 30.04242992401123,
|
||||
"bytes": 81816344,
|
||||
"bits_per_second": 21786877.88090238
|
||||
},
|
||||
"cpu_utilization_percent": {
|
||||
"host_total": 0.22279627348816114,
|
||||
"host_user": 0.052762963625616423,
|
||||
"host_system": 0.17003900965336524,
|
||||
"remote_total": 1.1676044402542152,
|
||||
"remote_user": 0.11287335188105996,
|
||||
"remote_system": 1.0547325937726919
|
||||
},
|
||||
"sender_tcp_congestion": "cubic",
|
||||
"receiver_tcp_congestion": "cubic"
|
||||
}
|
||||
}
|
@ -1,928 +0,0 @@
|
||||
{
|
||||
"start": {
|
||||
"connected": [{
|
||||
"socket": 5,
|
||||
"local_host": "1.1.1.4",
|
||||
"local_port": 59214,
|
||||
"remote_host": "1.1.1.2",
|
||||
"remote_port": 5201
|
||||
}],
|
||||
"version": "iperf 3.6",
|
||||
"system_info": "Linux Manual-LocalPortal 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64",
|
||||
"timestamp": {
|
||||
"time": "Tue, 03 Nov 2020 20:38:57 GMT",
|
||||
"timesecs": 1604435937
|
||||
},
|
||||
"connecting_to": {
|
||||
"host": "1.1.1.2",
|
||||
"port": 5201
|
||||
},
|
||||
"cookie": "hm3mg6k2chfebwyrik2x23h3zd2ruewombei",
|
||||
"tcp_mss_default": 1448,
|
||||
"sock_bufsize": 0,
|
||||
"sndbuf_actual": 16384,
|
||||
"rcvbuf_actual": 131072,
|
||||
"test_start": {
|
||||
"protocol": "TCP",
|
||||
"num_streams": 1,
|
||||
"blksize": 131072,
|
||||
"omit": 5,
|
||||
"duration": 30,
|
||||
"bytes": 0,
|
||||
"blocks": 0,
|
||||
"reverse": 0,
|
||||
"tos": 0
|
||||
}
|
||||
},
|
||||
"intervals": [{
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 1.0002508163452148,
|
||||
"seconds": 1.0002508163452148,
|
||||
"bytes": 2247296,
|
||||
"bits_per_second": 17973859.862159967,
|
||||
"retransmits": 179,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 451,
|
||||
"rttvar": 344,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0,
|
||||
"end": 1.0002508163452148,
|
||||
"seconds": 1.0002508163452148,
|
||||
"bytes": 2247296,
|
||||
"bits_per_second": 17973859.862159967,
|
||||
"retransmits": 179,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0002508163452148,
|
||||
"end": 2.0003719329833984,
|
||||
"seconds": 1.0001211166381836,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818253.079470546,
|
||||
"retransmits": 109,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 467,
|
||||
"rttvar": 308,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0002508163452148,
|
||||
"end": 2.0003719329833984,
|
||||
"seconds": 1.0001211166381836,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818253.079470546,
|
||||
"retransmits": 109,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0003719329833984,
|
||||
"end": 3.0002238750457764,
|
||||
"seconds": 0.99985194206237793,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384429.4392685387,
|
||||
"retransmits": 114,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 379,
|
||||
"rttvar": 348,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0003719329833984,
|
||||
"end": 3.0002238750457764,
|
||||
"seconds": 0.99985194206237793,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384429.4392685387,
|
||||
"retransmits": 114,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0002238750457764,
|
||||
"end": 4.0003209114074707,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818441.3268995173,
|
||||
"retransmits": 122,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 830,
|
||||
"rttvar": 432,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0002238750457764,
|
||||
"end": 4.0003209114074707,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818441.3268995173,
|
||||
"retransmits": 122,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0003209114074707,
|
||||
"end": 5.0001609325408936,
|
||||
"seconds": 0.99984002113342285,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384541.3282850459,
|
||||
"retransmits": 103,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 474,
|
||||
"rttvar": 94,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0003209114074707,
|
||||
"end": 5.0001609325408936,
|
||||
"seconds": 0.99984002113342285,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384541.3282850459,
|
||||
"retransmits": 103,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.5033950805664062e-05,
|
||||
"end": 1.0002329349517822,
|
||||
"seconds": 1.0002579689025879,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7817183.4097744524,
|
||||
"retransmits": 122,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 350,
|
||||
"rttvar": 379,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.5033950805664062e-05,
|
||||
"end": 1.0002329349517822,
|
||||
"seconds": 1.0002579689025879,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7817183.4097744524,
|
||||
"retransmits": 122,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0002329349517822,
|
||||
"end": 2.0001299381256104,
|
||||
"seconds": 0.99989700317382812,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384006.5228886344,
|
||||
"retransmits": 92,
|
||||
"snd_cwnd": 5792,
|
||||
"rtt": 356,
|
||||
"rttvar": 56,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0002329349517822,
|
||||
"end": 2.0001299381256104,
|
||||
"seconds": 0.99989700317382812,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384006.5228886344,
|
||||
"retransmits": 92,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0001299381256104,
|
||||
"end": 3.0001978874206543,
|
||||
"seconds": 1.0000679492950439,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818668.72697182,
|
||||
"retransmits": 130,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 1545,
|
||||
"rttvar": 2556,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0001299381256104,
|
||||
"end": 3.0001978874206543,
|
||||
"seconds": 1.0000679492950439,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818668.72697182,
|
||||
"retransmits": 130,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0001978874206543,
|
||||
"end": 4.0001950263977051,
|
||||
"seconds": 0.99999713897705078,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7819222.3709746487,
|
||||
"retransmits": 114,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 470,
|
||||
"rttvar": 431,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0001978874206543,
|
||||
"end": 4.0001950263977051,
|
||||
"seconds": 0.99999713897705078,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7819222.3709746487,
|
||||
"retransmits": 114,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0001950263977051,
|
||||
"end": 5.0001418590545654,
|
||||
"seconds": 0.99994683265686035,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9383538.8978324458,
|
||||
"retransmits": 261,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 291,
|
||||
"rttvar": 233,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0001950263977051,
|
||||
"end": 5.0001418590545654,
|
||||
"seconds": 0.99994683265686035,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9383538.8978324458,
|
||||
"retransmits": 261,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 5.0001418590545654,
|
||||
"end": 6.0001709461212158,
|
||||
"seconds": 1.0000290870666504,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818972.569023747,
|
||||
"retransmits": 286,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 386,
|
||||
"rttvar": 249,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 5.0001418590545654,
|
||||
"end": 6.0001709461212158,
|
||||
"seconds": 1.0000290870666504,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818972.569023747,
|
||||
"retransmits": 286,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 6.0001709461212158,
|
||||
"end": 7.00025486946106,
|
||||
"seconds": 1.0000839233398438,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339780.09780063,
|
||||
"retransmits": 196,
|
||||
"snd_cwnd": 5792,
|
||||
"rtt": 409,
|
||||
"rttvar": 108,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 6.0001709461212158,
|
||||
"end": 7.00025486946106,
|
||||
"seconds": 1.0000839233398438,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339780.09780063,
|
||||
"retransmits": 196,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 7.00025486946106,
|
||||
"end": 8.0001049041748047,
|
||||
"seconds": 0.99985003471374512,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8341730.9700727882,
|
||||
"retransmits": 172,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 368,
|
||||
"rttvar": 380,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 7.00025486946106,
|
||||
"end": 8.0001049041748047,
|
||||
"seconds": 0.99985003471374512,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8341730.9700727882,
|
||||
"retransmits": 172,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 8.0001049041748047,
|
||||
"end": 9.0001709461212158,
|
||||
"seconds": 1.0000660419464111,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339929.2148417206,
|
||||
"retransmits": 97,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 334,
|
||||
"rttvar": 402,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 8.0001049041748047,
|
||||
"end": 9.0001709461212158,
|
||||
"seconds": 1.0000660419464111,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339929.2148417206,
|
||||
"retransmits": 97,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 9.0001709461212158,
|
||||
"end": 10.00022292137146,
|
||||
"seconds": 1.0000519752502441,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818793.6162451888,
|
||||
"retransmits": 113,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 487,
|
||||
"rttvar": 356,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 9.0001709461212158,
|
||||
"end": 10.00022292137146,
|
||||
"seconds": 1.0000519752502441,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818793.6162451888,
|
||||
"retransmits": 113,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 10.00022292137146,
|
||||
"end": 11.0001540184021,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8341054.7234380422,
|
||||
"retransmits": 105,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 353,
|
||||
"rttvar": 56,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 10.00022292137146,
|
||||
"end": 11.0001540184021,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8341054.7234380422,
|
||||
"retransmits": 105,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 11.0001540184021,
|
||||
"end": 12.000258922576904,
|
||||
"seconds": 1.0001049041748047,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818379.8193167448,
|
||||
"retransmits": 104,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 342,
|
||||
"rttvar": 132,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 11.0001540184021,
|
||||
"end": 12.000258922576904,
|
||||
"seconds": 1.0001049041748047,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818379.8193167448,
|
||||
"retransmits": 104,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 12.000258922576904,
|
||||
"end": 13.000133037567139,
|
||||
"seconds": 0.99987411499023438,
|
||||
"bytes": 1238040,
|
||||
"bits_per_second": 9905566.9623937942,
|
||||
"retransmits": 124,
|
||||
"snd_cwnd": 5792,
|
||||
"rtt": 385,
|
||||
"rttvar": 401,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 12.000258922576904,
|
||||
"end": 13.000133037567139,
|
||||
"seconds": 0.99987411499023438,
|
||||
"bytes": 1238040,
|
||||
"bits_per_second": 9905566.9623937942,
|
||||
"retransmits": 124,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 13.000133037567139,
|
||||
"end": 14.000139951705933,
|
||||
"seconds": 1.0000069141387939,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8340422.3331623888,
|
||||
"retransmits": 191,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 452,
|
||||
"rttvar": 173,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 13.000133037567139,
|
||||
"end": 14.000139951705933,
|
||||
"seconds": 1.0000069141387939,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8340422.3331623888,
|
||||
"retransmits": 191,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 14.000139951705933,
|
||||
"end": 15.0002920627594,
|
||||
"seconds": 1.0001521110534668,
|
||||
"bytes": 847080,
|
||||
"bits_per_second": 6775609.3549231431,
|
||||
"retransmits": 122,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 452,
|
||||
"rttvar": 442,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 14.000139951705933,
|
||||
"end": 15.0002920627594,
|
||||
"seconds": 1.0001521110534668,
|
||||
"bytes": 847080,
|
||||
"bits_per_second": 6775609.3549231431,
|
||||
"retransmits": 122,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 15.0002920627594,
|
||||
"end": 16.000130891799927,
|
||||
"seconds": 0.99983882904052734,
|
||||
"bytes": 1238040,
|
||||
"bits_per_second": 9905916.5460741874,
|
||||
"retransmits": 130,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 433,
|
||||
"rttvar": 305,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 15.0002920627594,
|
||||
"end": 16.000130891799927,
|
||||
"seconds": 0.99983882904052734,
|
||||
"bytes": 1238040,
|
||||
"bits_per_second": 9905916.5460741874,
|
||||
"retransmits": 130,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 16.000130891799927,
|
||||
"end": 17.000232934951782,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 912240,
|
||||
"bits_per_second": 7297175.3732252736,
|
||||
"retransmits": 100,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 447,
|
||||
"rttvar": 308,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 16.000130891799927,
|
||||
"end": 17.000232934951782,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 912240,
|
||||
"bits_per_second": 7297175.3732252736,
|
||||
"retransmits": 100,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 17.000232934951782,
|
||||
"end": 18.000098943710327,
|
||||
"seconds": 0.99986600875854492,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384297.41366064,
|
||||
"retransmits": 131,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 563,
|
||||
"rttvar": 370,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 17.000232934951782,
|
||||
"end": 18.000098943710327,
|
||||
"seconds": 0.99986600875854492,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9384297.41366064,
|
||||
"retransmits": 131,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 18.000098943710327,
|
||||
"end": 19.000200986862183,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 912240,
|
||||
"bits_per_second": 7297175.3732252736,
|
||||
"retransmits": 85,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 385,
|
||||
"rttvar": 233,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 18.000098943710327,
|
||||
"end": 19.000200986862183,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 912240,
|
||||
"bits_per_second": 7297175.3732252736,
|
||||
"retransmits": 85,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 19.000200986862183,
|
||||
"end": 20.000109910964966,
|
||||
"seconds": 0.9999089241027832,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8862567.16625631,
|
||||
"retransmits": 128,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 459,
|
||||
"rttvar": 321,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 19.000200986862183,
|
||||
"end": 20.000109910964966,
|
||||
"seconds": 0.9999089241027832,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8862567.16625631,
|
||||
"retransmits": 128,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 20.000109910964966,
|
||||
"end": 21.000221967697144,
|
||||
"seconds": 1.0001120567321777,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339545.4977836711,
|
||||
"retransmits": 77,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 409,
|
||||
"rttvar": 326,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 20.000109910964966,
|
||||
"end": 21.000221967697144,
|
||||
"seconds": 1.0001120567321777,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339545.4977836711,
|
||||
"retransmits": 77,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 21.000221967697144,
|
||||
"end": 22.000252962112427,
|
||||
"seconds": 1.0000309944152832,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818957.6559793288,
|
||||
"retransmits": 104,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 1420,
|
||||
"rttvar": 1977,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 21.000221967697144,
|
||||
"end": 22.000252962112427,
|
||||
"seconds": 1.0000309944152832,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818957.6559793288,
|
||||
"retransmits": 104,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 22.000252962112427,
|
||||
"end": 23.000123023986816,
|
||||
"seconds": 0.99987006187438965,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8862911.6301246677,
|
||||
"retransmits": 143,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 305,
|
||||
"rttvar": 370,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 22.000252962112427,
|
||||
"end": 23.000123023986816,
|
||||
"seconds": 0.99987006187438965,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8862911.6301246677,
|
||||
"retransmits": 143,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 23.000123023986816,
|
||||
"end": 24.000200986862183,
|
||||
"seconds": 1.0000779628753662,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339829.8028885024,
|
||||
"retransmits": 106,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 370,
|
||||
"rttvar": 172,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 23.000123023986816,
|
||||
"end": 24.000200986862183,
|
||||
"seconds": 1.0000779628753662,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339829.8028885024,
|
||||
"retransmits": 106,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.000200986862183,
|
||||
"end": 25.000136852264404,
|
||||
"seconds": 0.99993586540222168,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7819701.51341131,
|
||||
"retransmits": 105,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 449,
|
||||
"rttvar": 208,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.000200986862183,
|
||||
"end": 25.000136852264404,
|
||||
"seconds": 0.99993586540222168,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7819701.51341131,
|
||||
"retransmits": 105,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 25.000136852264404,
|
||||
"end": 26.000211000442505,
|
||||
"seconds": 1.0000741481781006,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818620.2635521973,
|
||||
"retransmits": 114,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 330,
|
||||
"rttvar": 339,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 25.000136852264404,
|
||||
"end": 26.000211000442505,
|
||||
"seconds": 1.0000741481781006,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7818620.2635521973,
|
||||
"retransmits": 114,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 26.000211000442505,
|
||||
"end": 27.000269889831543,
|
||||
"seconds": 1.0000588893890381,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8861238.1670982186,
|
||||
"retransmits": 109,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 393,
|
||||
"rttvar": 249,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 26.000211000442505,
|
||||
"end": 27.000269889831543,
|
||||
"seconds": 1.0000588893890381,
|
||||
"bytes": 1107720,
|
||||
"bits_per_second": 8861238.1670982186,
|
||||
"retransmits": 109,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 27.000269889831543,
|
||||
"end": 28.000152826309204,
|
||||
"seconds": 0.99988293647766113,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7820115.4502597041,
|
||||
"retransmits": 130,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 340,
|
||||
"rttvar": 272,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 27.000269889831543,
|
||||
"end": 28.000152826309204,
|
||||
"seconds": 0.99988293647766113,
|
||||
"bytes": 977400,
|
||||
"bits_per_second": 7820115.4502597041,
|
||||
"retransmits": 130,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 28.000152826309204,
|
||||
"end": 29.0002498626709,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339670.748692818,
|
||||
"retransmits": 84,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 319,
|
||||
"rttvar": 269,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 28.000152826309204,
|
||||
"end": 29.0002498626709,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 1042560,
|
||||
"bits_per_second": 8339670.748692818,
|
||||
"retransmits": 84,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 29.0002498626709,
|
||||
"end": 30.00000786781311,
|
||||
"seconds": 0.99975800514221191,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9385311.1970484275,
|
||||
"retransmits": 135,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 274,
|
||||
"rttvar": 379,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 29.0002498626709,
|
||||
"end": 30.00000786781311,
|
||||
"seconds": 0.99975800514221191,
|
||||
"bytes": 1172880,
|
||||
"bits_per_second": 9385311.1970484275,
|
||||
"retransmits": 135,
|
||||
"omitted": false
|
||||
}
|
||||
}],
|
||||
"end": {
|
||||
"streams": [{
|
||||
"sender": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.00000786781311,
|
||||
"seconds": 30.00000786781311,
|
||||
"bytes": 31276800,
|
||||
"bits_per_second": 8340477.812622644,
|
||||
"retransmits": 3910,
|
||||
"max_snd_cwnd": 17376,
|
||||
"max_rtt": 1545,
|
||||
"min_rtt": 274,
|
||||
"mean_rtt": 470
|
||||
},
|
||||
"receiver": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.041186094284058,
|
||||
"seconds": 30.00000786781311,
|
||||
"bytes": 31341960,
|
||||
"bits_per_second": 8346397.4828779325
|
||||
}
|
||||
}],
|
||||
"sum_sent": {
|
||||
"start": 0,
|
||||
"end": 30.00000786781311,
|
||||
"seconds": 30.00000786781311,
|
||||
"bytes": 31276800,
|
||||
"bits_per_second": 8340477.812622644,
|
||||
"retransmits": 3910
|
||||
},
|
||||
"sum_received": {
|
||||
"start": 0,
|
||||
"end": 30.041186094284058,
|
||||
"seconds": 30.041186094284058,
|
||||
"bytes": 31341960,
|
||||
"bits_per_second": 8346397.4828779325
|
||||
},
|
||||
"cpu_utilization_percent": {
|
||||
"host_total": 0.17899055789323651,
|
||||
"host_user": 0.074994085376974162,
|
||||
"host_system": 0.10399362243890981,
|
||||
"remote_total": 0.23904420886207059,
|
||||
"remote_user": 0.036474564515223573,
|
||||
"remote_system": 0.202569644346847
|
||||
},
|
||||
"sender_tcp_congestion": "cubic",
|
||||
"receiver_tcp_congestion": "cubic"
|
||||
}
|
||||
}
|
@ -1,928 +0,0 @@
|
||||
{
|
||||
"start": {
|
||||
"connected": [{
|
||||
"socket": 5,
|
||||
"local_host": "1.1.1.4",
|
||||
"local_port": 59210,
|
||||
"remote_host": "1.1.1.2",
|
||||
"remote_port": 5201
|
||||
}],
|
||||
"version": "iperf 3.6",
|
||||
"system_info": "Linux Manual-LocalPortal 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64",
|
||||
"timestamp": {
|
||||
"time": "Tue, 03 Nov 2020 20:37:56 GMT",
|
||||
"timesecs": 1604435876
|
||||
},
|
||||
"connecting_to": {
|
||||
"host": "1.1.1.2",
|
||||
"port": 5201
|
||||
},
|
||||
"cookie": "yrcvyf36b3ldevlrj5docqhcjim3j2u5e24i",
|
||||
"tcp_mss_default": 1448,
|
||||
"sock_bufsize": 0,
|
||||
"sndbuf_actual": 16384,
|
||||
"rcvbuf_actual": 131072,
|
||||
"test_start": {
|
||||
"protocol": "TCP",
|
||||
"num_streams": 1,
|
||||
"blksize": 131072,
|
||||
"omit": 5,
|
||||
"duration": 30,
|
||||
"bytes": 0,
|
||||
"blocks": 0,
|
||||
"reverse": 0,
|
||||
"tos": 0
|
||||
}
|
||||
},
|
||||
"intervals": [{
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 1.0001020431518555,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 3530224,
|
||||
"bits_per_second": 28238910.412576538,
|
||||
"retransmits": 314,
|
||||
"snd_cwnd": 1448,
|
||||
"rtt": 429,
|
||||
"rttvar": 131,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0,
|
||||
"end": 1.0001020431518555,
|
||||
"seconds": 1.0001020431518555,
|
||||
"bytes": 3530224,
|
||||
"bits_per_second": 28238910.412576538,
|
||||
"retransmits": 314,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0001020431518555,
|
||||
"end": 2.0001661777496338,
|
||||
"seconds": 1.0000641345977783,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637397.101826575,
|
||||
"retransmits": 237,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 524,
|
||||
"rttvar": 422,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0001020431518555,
|
||||
"end": 2.0001661777496338,
|
||||
"seconds": 1.0000641345977783,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637397.101826575,
|
||||
"retransmits": 237,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0001661777496338,
|
||||
"end": 3.0002710819244385,
|
||||
"seconds": 1.0001049041748047,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636759.63863349,
|
||||
"retransmits": 162,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 493,
|
||||
"rttvar": 400,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0001661777496338,
|
||||
"end": 3.0002710819244385,
|
||||
"seconds": 1.0001049041748047,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636759.63863349,
|
||||
"retransmits": 162,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0002710819244385,
|
||||
"end": 4.0001749992370605,
|
||||
"seconds": 0.99990391731262207,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203892.996272445,
|
||||
"retransmits": 214,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 253,
|
||||
"rttvar": 191,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0002710819244385,
|
||||
"end": 4.0001749992370605,
|
||||
"seconds": 0.99990391731262207,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203892.996272445,
|
||||
"retransmits": 214,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0001749992370605,
|
||||
"end": 5.00016713142395,
|
||||
"seconds": 0.99999213218688965,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202375.34507427,
|
||||
"retransmits": 440,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 467,
|
||||
"rttvar": 226,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0001749992370605,
|
||||
"end": 5.00016713142395,
|
||||
"seconds": 0.99999213218688965,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202375.34507427,
|
||||
"retransmits": 440,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.1948089599609375e-05,
|
||||
"end": 1.0002050399780273,
|
||||
"seconds": 1.000236988067627,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15634694.763899965,
|
||||
"retransmits": 318,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 442,
|
||||
"rttvar": 52,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.1948089599609375e-05,
|
||||
"end": 1.0002050399780273,
|
||||
"seconds": 1.000236988067627,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15634694.763899965,
|
||||
"retransmits": 318,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0002050399780273,
|
||||
"end": 2.0001249313354492,
|
||||
"seconds": 0.99991989135742188,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203618.158498108,
|
||||
"retransmits": 367,
|
||||
"snd_cwnd": 20272,
|
||||
"rtt": 395,
|
||||
"rttvar": 73,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0002050399780273,
|
||||
"end": 2.0001249313354492,
|
||||
"seconds": 0.99991989135742188,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203618.158498108,
|
||||
"retransmits": 367,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0001249313354492,
|
||||
"end": 3.0002379417419434,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636632.897760024,
|
||||
"retransmits": 156,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 357,
|
||||
"rttvar": 374,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0001249313354492,
|
||||
"end": 3.0002379417419434,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636632.897760024,
|
||||
"retransmits": 156,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0002379417419434,
|
||||
"end": 4.0001308917999268,
|
||||
"seconds": 0.9998929500579834,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18768089.122852363,
|
||||
"retransmits": 191,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 478,
|
||||
"rttvar": 396,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0002379417419434,
|
||||
"end": 4.0001308917999268,
|
||||
"seconds": 0.9998929500579834,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18768089.122852363,
|
||||
"retransmits": 191,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0001308917999268,
|
||||
"end": 5.0000970363616943,
|
||||
"seconds": 0.99996614456176758,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202822.409091495,
|
||||
"retransmits": 199,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 576,
|
||||
"rttvar": 248,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0001308917999268,
|
||||
"end": 5.0000970363616943,
|
||||
"seconds": 0.99996614456176758,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202822.409091495,
|
||||
"retransmits": 199,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 5.0000970363616943,
|
||||
"end": 6.000108003616333,
|
||||
"seconds": 1.0000109672546387,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638228.491566036,
|
||||
"retransmits": 451,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 337,
|
||||
"rttvar": 223,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 5.0000970363616943,
|
||||
"end": 6.000108003616333,
|
||||
"seconds": 1.0000109672546387,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638228.491566036,
|
||||
"retransmits": 451,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 6.000108003616333,
|
||||
"end": 7.0002739429473877,
|
||||
"seconds": 1.0001659393310547,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14072224.864419548,
|
||||
"retransmits": 372,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 474,
|
||||
"rttvar": 159,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 6.000108003616333,
|
||||
"end": 7.0002739429473877,
|
||||
"seconds": 1.0001659393310547,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14072224.864419548,
|
||||
"retransmits": 372,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 7.0002739429473877,
|
||||
"end": 8.0001449584960938,
|
||||
"seconds": 0.999871015548706,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17204459.10771782,
|
||||
"retransmits": 149,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 441,
|
||||
"rttvar": 55,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 7.0002739429473877,
|
||||
"end": 8.0001449584960938,
|
||||
"seconds": 0.999871015548706,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17204459.10771782,
|
||||
"retransmits": 149,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 8.0001449584960938,
|
||||
"end": 9.0002191066741943,
|
||||
"seconds": 1.0000741481781006,
|
||||
"bytes": 2019960,
|
||||
"bits_per_second": 16158481.878007874,
|
||||
"retransmits": 173,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 580,
|
||||
"rttvar": 330,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 8.0001449584960938,
|
||||
"end": 9.0002191066741943,
|
||||
"seconds": 1.0000741481781006,
|
||||
"bytes": 2019960,
|
||||
"bits_per_second": 16158481.878007874,
|
||||
"retransmits": 173,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 9.0002191066741943,
|
||||
"end": 10.000104904174805,
|
||||
"seconds": 0.99988579750061035,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18768223.378018875,
|
||||
"retransmits": 174,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 344,
|
||||
"rttvar": 72,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 9.0002191066741943,
|
||||
"end": 10.000104904174805,
|
||||
"seconds": 0.99988579750061035,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18768223.378018875,
|
||||
"retransmits": 174,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 10.000104904174805,
|
||||
"end": 11.000201940536499,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636882.653799035,
|
||||
"retransmits": 163,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 345,
|
||||
"rttvar": 271,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 10.000104904174805,
|
||||
"end": 11.000201940536499,
|
||||
"seconds": 1.0000970363616943,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15636882.653799035,
|
||||
"retransmits": 163,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 11.000201940536499,
|
||||
"end": 12.000133037567139,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203425.367090963,
|
||||
"retransmits": 165,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 343,
|
||||
"rttvar": 312,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 11.000201940536499,
|
||||
"end": 12.000133037567139,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203425.367090963,
|
||||
"retransmits": 165,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 12.000133037567139,
|
||||
"end": 13.000078916549683,
|
||||
"seconds": 0.999945878982544,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203171.053120866,
|
||||
"retransmits": 333,
|
||||
"snd_cwnd": 2896,
|
||||
"rtt": 497,
|
||||
"rttvar": 257,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 12.000133037567139,
|
||||
"end": 13.000078916549683,
|
||||
"seconds": 0.999945878982544,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203171.053120866,
|
||||
"retransmits": 333,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 13.000078916549683,
|
||||
"end": 14.000128984451294,
|
||||
"seconds": 1.0000500679016113,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17201378.76306051,
|
||||
"retransmits": 228,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 458,
|
||||
"rttvar": 388,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 13.000078916549683,
|
||||
"end": 14.000128984451294,
|
||||
"seconds": 1.0000500679016113,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17201378.76306051,
|
||||
"retransmits": 228,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 14.000128984451294,
|
||||
"end": 15.000159025192261,
|
||||
"seconds": 1.0000300407409668,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14074137.202489968,
|
||||
"retransmits": 147,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 487,
|
||||
"rttvar": 94,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 14.000128984451294,
|
||||
"end": 15.000159025192261,
|
||||
"seconds": 1.0000300407409668,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14074137.202489968,
|
||||
"retransmits": 147,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 15.000159025192261,
|
||||
"end": 16.000128984451294,
|
||||
"seconds": 0.9999699592590332,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18766643.763884127,
|
||||
"retransmits": 194,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 486,
|
||||
"rttvar": 67,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 15.000159025192261,
|
||||
"end": 16.000128984451294,
|
||||
"seconds": 0.9999699592590332,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18766643.763884127,
|
||||
"retransmits": 194,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 16.000128984451294,
|
||||
"end": 17.000190019607544,
|
||||
"seconds": 1.00006103515625,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637445.566066524,
|
||||
"retransmits": 201,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 484,
|
||||
"rttvar": 452,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 16.000128984451294,
|
||||
"end": 17.000190019607544,
|
||||
"seconds": 1.00006103515625,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637445.566066524,
|
||||
"retransmits": 201,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 17.000190019607544,
|
||||
"end": 18.000272035598755,
|
||||
"seconds": 1.0000820159912109,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637117.506308038,
|
||||
"retransmits": 151,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 498,
|
||||
"rttvar": 190,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 17.000190019607544,
|
||||
"end": 18.000272035598755,
|
||||
"seconds": 1.0000820159912109,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637117.506308038,
|
||||
"retransmits": 151,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 18.000272035598755,
|
||||
"end": 19.000139951705933,
|
||||
"seconds": 0.99986791610717773,
|
||||
"bytes": 2215440,
|
||||
"bits_per_second": 17725861.300764233,
|
||||
"retransmits": 208,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 423,
|
||||
"rttvar": 394,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 18.000272035598755,
|
||||
"end": 19.000139951705933,
|
||||
"seconds": 0.99986791610717773,
|
||||
"bytes": 2215440,
|
||||
"bits_per_second": 17725861.300764233,
|
||||
"retransmits": 208,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 19.000139951705933,
|
||||
"end": 20.000174999237061,
|
||||
"seconds": 1.0000350475311279,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637851.931897642,
|
||||
"retransmits": 153,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 382,
|
||||
"rttvar": 35,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 19.000139951705933,
|
||||
"end": 20.000174999237061,
|
||||
"seconds": 1.0000350475311279,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637851.931897642,
|
||||
"retransmits": 153,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 20.000174999237061,
|
||||
"end": 21.000102996826172,
|
||||
"seconds": 0.99992799758911133,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18767431.300299808,
|
||||
"retransmits": 246,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 411,
|
||||
"rttvar": 63,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 20.000174999237061,
|
||||
"end": 21.000102996826172,
|
||||
"seconds": 0.99992799758911133,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18767431.300299808,
|
||||
"retransmits": 246,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 21.000102996826172,
|
||||
"end": 22.00019097328186,
|
||||
"seconds": 1.0000879764556885,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637024.31002369,
|
||||
"retransmits": 192,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 398,
|
||||
"rttvar": 199,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 21.000102996826172,
|
||||
"end": 22.00019097328186,
|
||||
"seconds": 1.0000879764556885,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637024.31002369,
|
||||
"retransmits": 192,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 22.00019097328186,
|
||||
"end": 23.00009298324585,
|
||||
"seconds": 0.99990200996398926,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18767919.069065426,
|
||||
"retransmits": 308,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 381,
|
||||
"rttvar": 179,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 22.00019097328186,
|
||||
"end": 23.00009298324585,
|
||||
"seconds": 0.99990200996398926,
|
||||
"bytes": 2345760,
|
||||
"bits_per_second": 18767919.069065426,
|
||||
"retransmits": 308,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 23.00009298324585,
|
||||
"end": 24.000123023986816,
|
||||
"seconds": 1.0000300407409668,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637930.224988854,
|
||||
"retransmits": 374,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 523,
|
||||
"rttvar": 421,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 23.00009298324585,
|
||||
"end": 24.000123023986816,
|
||||
"seconds": 1.0000300407409668,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637930.224988854,
|
||||
"retransmits": 374,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.000123023986816,
|
||||
"end": 25.000124931335449,
|
||||
"seconds": 1.0000019073486328,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638370.172176033,
|
||||
"retransmits": 286,
|
||||
"snd_cwnd": 18824,
|
||||
"rtt": 367,
|
||||
"rttvar": 15,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.000123023986816,
|
||||
"end": 25.000124931335449,
|
||||
"seconds": 1.0000019073486328,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638370.172176033,
|
||||
"retransmits": 286,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 25.000124931335449,
|
||||
"end": 26.000121116638184,
|
||||
"seconds": 0.99999618530273438,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202305.621588219,
|
||||
"retransmits": 457,
|
||||
"snd_cwnd": 10136,
|
||||
"rtt": 363,
|
||||
"rttvar": 189,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 25.000124931335449,
|
||||
"end": 26.000121116638184,
|
||||
"seconds": 0.99999618530273438,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17202305.621588219,
|
||||
"retransmits": 457,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 26.000121116638184,
|
||||
"end": 27.000117063522339,
|
||||
"seconds": 0.99999594688415527,
|
||||
"bytes": 2215440,
|
||||
"bits_per_second": 17723591.835770894,
|
||||
"retransmits": 264,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 371,
|
||||
"rttvar": 450,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 26.000121116638184,
|
||||
"end": 27.000117063522339,
|
||||
"seconds": 0.99999594688415527,
|
||||
"bytes": 2215440,
|
||||
"bits_per_second": 17723591.835770894,
|
||||
"retransmits": 264,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 27.000117063522339,
|
||||
"end": 28.000108003616333,
|
||||
"seconds": 0.99999094009399414,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638541.683717724,
|
||||
"retransmits": 172,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 479,
|
||||
"rttvar": 301,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 27.000117063522339,
|
||||
"end": 28.000108003616333,
|
||||
"seconds": 0.99999094009399414,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15638541.683717724,
|
||||
"retransmits": 172,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 28.000108003616333,
|
||||
"end": 29.000185012817383,
|
||||
"seconds": 1.0000770092010498,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637195.792045396,
|
||||
"retransmits": 196,
|
||||
"snd_cwnd": 5792,
|
||||
"rtt": 373,
|
||||
"rttvar": 362,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 28.000108003616333,
|
||||
"end": 29.000185012817383,
|
||||
"seconds": 1.0000770092010498,
|
||||
"bytes": 1954800,
|
||||
"bits_per_second": 15637195.792045396,
|
||||
"retransmits": 196,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 29.000185012817383,
|
||||
"end": 29.999999046325684,
|
||||
"seconds": 0.99981403350830078,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17205439.635247111,
|
||||
"retransmits": 375,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 441,
|
||||
"rttvar": 251,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 29.000185012817383,
|
||||
"end": 29.999999046325684,
|
||||
"seconds": 0.99981403350830078,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17205439.635247111,
|
||||
"retransmits": 375,
|
||||
"omitted": false
|
||||
}
|
||||
}],
|
||||
"end": {
|
||||
"streams": [{
|
||||
"sender": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 29.999999046325684,
|
||||
"seconds": 29.999999046325684,
|
||||
"bytes": 62358120,
|
||||
"bits_per_second": 16628832.52861635,
|
||||
"retransmits": 7363,
|
||||
"max_snd_cwnd": 30408,
|
||||
"max_rtt": 580,
|
||||
"min_rtt": 253,
|
||||
"mean_rtt": 431
|
||||
},
|
||||
"receiver": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.041683197021484,
|
||||
"seconds": 29.999999046325684,
|
||||
"bytes": 62469616,
|
||||
"bits_per_second": 16635450.308242014
|
||||
}
|
||||
}],
|
||||
"sum_sent": {
|
||||
"start": 0,
|
||||
"end": 29.999999046325684,
|
||||
"seconds": 29.999999046325684,
|
||||
"bytes": 62358120,
|
||||
"bits_per_second": 16628832.52861635,
|
||||
"retransmits": 7363
|
||||
},
|
||||
"sum_received": {
|
||||
"start": 0,
|
||||
"end": 30.041683197021484,
|
||||
"seconds": 30.041683197021484,
|
||||
"bytes": 62469616,
|
||||
"bits_per_second": 16635450.308242014
|
||||
},
|
||||
"cpu_utilization_percent": {
|
||||
"host_total": 0.22958490575932211,
|
||||
"host_user": 0.08576907893887456,
|
||||
"host_system": 0.14381582682044758,
|
||||
"remote_total": 0.52957749062390125,
|
||||
"remote_user": 0.11546899534656799,
|
||||
"remote_system": 0.41411048907840631
|
||||
},
|
||||
"sender_tcp_congestion": "cubic",
|
||||
"receiver_tcp_congestion": "cubic"
|
||||
}
|
||||
}
|
@ -1,928 +0,0 @@
|
||||
{
|
||||
"start": {
|
||||
"connected": [{
|
||||
"socket": 5,
|
||||
"local_host": "2.2.2.3",
|
||||
"local_port": 33210,
|
||||
"remote_host": "2.2.2.2",
|
||||
"remote_port": 5201
|
||||
}],
|
||||
"version": "iperf 3.6",
|
||||
"system_info": "Linux Manual-LocalPortal 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64",
|
||||
"timestamp": {
|
||||
"time": "Tue, 03 Nov 2020 20:36:18 GMT",
|
||||
"timesecs": 1604435778
|
||||
},
|
||||
"connecting_to": {
|
||||
"host": "2.2.2.2",
|
||||
"port": 5201
|
||||
},
|
||||
"cookie": "5xavznyovbrdlw2xpma6ibd5fr5cwbkbrudi",
|
||||
"tcp_mss_default": 1448,
|
||||
"sock_bufsize": 0,
|
||||
"sndbuf_actual": 16384,
|
||||
"rcvbuf_actual": 131072,
|
||||
"test_start": {
|
||||
"protocol": "TCP",
|
||||
"num_streams": 1,
|
||||
"blksize": 131072,
|
||||
"omit": 5,
|
||||
"duration": 30,
|
||||
"bytes": 0,
|
||||
"blocks": 0,
|
||||
"reverse": 0,
|
||||
"tos": 0
|
||||
}
|
||||
},
|
||||
"intervals": [{
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 1.0003159046173096,
|
||||
"seconds": 1.0003159046173096,
|
||||
"bytes": 3443344,
|
||||
"bits_per_second": 27538052.602031305,
|
||||
"retransmits": 233,
|
||||
"snd_cwnd": 23168,
|
||||
"rtt": 6923,
|
||||
"rttvar": 8922,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0,
|
||||
"end": 1.0003159046173096,
|
||||
"seconds": 1.0003159046173096,
|
||||
"bytes": 3443344,
|
||||
"bits_per_second": 27538052.602031305,
|
||||
"retransmits": 233,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0003159046173096,
|
||||
"end": 2.0000860691070557,
|
||||
"seconds": 0.99977016448974609,
|
||||
"bytes": 1889640,
|
||||
"bits_per_second": 15120595.249724563,
|
||||
"retransmits": 208,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 882,
|
||||
"rttvar": 123,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0003159046173096,
|
||||
"end": 2.0000860691070557,
|
||||
"seconds": 0.99977016448974609,
|
||||
"bytes": 1889640,
|
||||
"bits_per_second": 15120595.249724563,
|
||||
"retransmits": 208,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0000860691070557,
|
||||
"end": 3.0002329349517822,
|
||||
"seconds": 1.0001468658447266,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14072493.231394162,
|
||||
"retransmits": 86,
|
||||
"snd_cwnd": 20272,
|
||||
"rtt": 19760,
|
||||
"rttvar": 5590,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0000860691070557,
|
||||
"end": 3.0002329349517822,
|
||||
"seconds": 1.0001468658447266,
|
||||
"bytes": 1759320,
|
||||
"bits_per_second": 14072493.231394162,
|
||||
"retransmits": 86,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0002329349517822,
|
||||
"end": 4.0000879764556885,
|
||||
"seconds": 0.99985504150390625,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683378.397442257,
|
||||
"retransmits": 78,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 482,
|
||||
"rttvar": 85,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0002329349517822,
|
||||
"end": 4.0000879764556885,
|
||||
"seconds": 0.99985504150390625,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683378.397442257,
|
||||
"retransmits": 78,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0000879764556885,
|
||||
"end": 5.0001790523529053,
|
||||
"seconds": 1.0000910758972168,
|
||||
"bytes": 2678800,
|
||||
"bits_per_second": 21428448.384837385,
|
||||
"retransmits": 46,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 14520,
|
||||
"rttvar": 2837,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0000879764556885,
|
||||
"end": 5.0001790523529053,
|
||||
"seconds": 1.0000910758972168,
|
||||
"bytes": 2678800,
|
||||
"bits_per_second": 21428448.384837385,
|
||||
"retransmits": 46,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.482269287109375e-05,
|
||||
"end": 0.99999403953552246,
|
||||
"seconds": 1.0000388622283936,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12510233.824435858,
|
||||
"retransmits": 97,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 1307,
|
||||
"rttvar": 464,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.482269287109375e-05,
|
||||
"end": 0.99999403953552246,
|
||||
"seconds": 1.0000388622283936,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12510233.824435858,
|
||||
"retransmits": 97,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0.99999403953552246,
|
||||
"end": 2.0001680850982666,
|
||||
"seconds": 1.0001740455627441,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16678057.258139027,
|
||||
"retransmits": 62,
|
||||
"snd_cwnd": 7240,
|
||||
"rtt": 730,
|
||||
"rttvar": 521,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0.99999403953552246,
|
||||
"end": 2.0001680850982666,
|
||||
"seconds": 1.0001740455627441,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16678057.258139027,
|
||||
"retransmits": 62,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0001680850982666,
|
||||
"end": 3.0000910758972168,
|
||||
"seconds": 0.9999229907989502,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12511683.514751259,
|
||||
"retransmits": 66,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 9799,
|
||||
"rttvar": 14699,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0001680850982666,
|
||||
"end": 3.0000910758972168,
|
||||
"seconds": 0.9999229907989502,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12511683.514751259,
|
||||
"retransmits": 66,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0000910758972168,
|
||||
"end": 4.000028133392334,
|
||||
"seconds": 0.99993705749511719,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16682010.007496351,
|
||||
"retransmits": 108,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 14159,
|
||||
"rttvar": 2544,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0000910758972168,
|
||||
"end": 4.000028133392334,
|
||||
"seconds": 0.99993705749511719,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16682010.007496351,
|
||||
"retransmits": 108,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.000028133392334,
|
||||
"end": 5.0001780986785889,
|
||||
"seconds": 1.0001499652862549,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508844.107612684,
|
||||
"retransmits": 55,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 2237,
|
||||
"rttvar": 2860,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.000028133392334,
|
||||
"end": 5.0001780986785889,
|
||||
"seconds": 1.0001499652862549,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508844.107612684,
|
||||
"retransmits": 55,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 5.0001780986785889,
|
||||
"end": 6.000169038772583,
|
||||
"seconds": 0.99999094009399414,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16681111.129298905,
|
||||
"retransmits": 46,
|
||||
"snd_cwnd": 26064,
|
||||
"rtt": 22030,
|
||||
"rttvar": 6628,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 5.0001780986785889,
|
||||
"end": 6.000169038772583,
|
||||
"seconds": 0.99999094009399414,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16681111.129298905,
|
||||
"retransmits": 46,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 6.000169038772583,
|
||||
"end": 7.0003340244293213,
|
||||
"seconds": 1.0001649856567383,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508656.251133494,
|
||||
"retransmits": 63,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 10833,
|
||||
"rttvar": 6119,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 6.000169038772583,
|
||||
"end": 7.0003340244293213,
|
||||
"seconds": 1.0001649856567383,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508656.251133494,
|
||||
"retransmits": 63,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 7.0003340244293213,
|
||||
"end": 8.0000259876251221,
|
||||
"seconds": 0.99969196319580078,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16686099.932897879,
|
||||
"retransmits": 59,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 997,
|
||||
"rttvar": 191,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 7.0003340244293213,
|
||||
"end": 8.0000259876251221,
|
||||
"seconds": 0.99969196319580078,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16686099.932897879,
|
||||
"retransmits": 59,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 8.0000259876251221,
|
||||
"end": 9.0002651214599609,
|
||||
"seconds": 1.0002391338348389,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507728.978804173,
|
||||
"retransmits": 111,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 10524,
|
||||
"rttvar": 7286,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 8.0000259876251221,
|
||||
"end": 9.0002651214599609,
|
||||
"seconds": 1.0002391338348389,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507728.978804173,
|
||||
"retransmits": 111,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 9.0002651214599609,
|
||||
"end": 10.000118017196655,
|
||||
"seconds": 0.99985289573669434,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683414.201355513,
|
||||
"retransmits": 69,
|
||||
"snd_cwnd": 18824,
|
||||
"rtt": 10234,
|
||||
"rttvar": 5503,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 9.0002651214599609,
|
||||
"end": 10.000118017196655,
|
||||
"seconds": 0.99985289573669434,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683414.201355513,
|
||||
"retransmits": 69,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 10.000118017196655,
|
||||
"end": 11.000248193740845,
|
||||
"seconds": 1.0001301765441895,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509091.609683301,
|
||||
"retransmits": 102,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 10238,
|
||||
"rttvar": 6064,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 10.000118017196655,
|
||||
"end": 11.000248193740845,
|
||||
"seconds": 1.0001301765441895,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509091.609683301,
|
||||
"retransmits": 102,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 11.000248193740845,
|
||||
"end": 12.000431060791016,
|
||||
"seconds": 1.0001828670501709,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508432.619824551,
|
||||
"retransmits": 56,
|
||||
"snd_cwnd": 1448,
|
||||
"rtt": 6729,
|
||||
"rttvar": 5119,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 11.000248193740845,
|
||||
"end": 12.000431060791016,
|
||||
"seconds": 1.0001828670501709,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508432.619824551,
|
||||
"retransmits": 56,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 12.000431060791016,
|
||||
"end": 13.000285148620605,
|
||||
"seconds": 0.99985408782958984,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683394.310273621,
|
||||
"retransmits": 58,
|
||||
"snd_cwnd": 8688,
|
||||
"rtt": 6845,
|
||||
"rttvar": 8273,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 12.000431060791016,
|
||||
"end": 13.000285148620605,
|
||||
"seconds": 0.99985408782958984,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683394.310273621,
|
||||
"retransmits": 58,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 13.000285148620605,
|
||||
"end": 14.000042200088501,
|
||||
"seconds": 0.99975705146789551,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16685013.599562157,
|
||||
"retransmits": 160,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 7607,
|
||||
"rttvar": 5565,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 13.000285148620605,
|
||||
"end": 14.000042200088501,
|
||||
"seconds": 0.99975705146789551,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16685013.599562157,
|
||||
"retransmits": 160,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 14.000042200088501,
|
||||
"end": 15.00003719329834,
|
||||
"seconds": 0.99999499320983887,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12510782.638863424,
|
||||
"retransmits": 38,
|
||||
"snd_cwnd": 26064,
|
||||
"rtt": 2419,
|
||||
"rttvar": 2087,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 14.000042200088501,
|
||||
"end": 15.00003719329834,
|
||||
"seconds": 0.99999499320983887,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12510782.638863424,
|
||||
"retransmits": 38,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 15.00003719329834,
|
||||
"end": 16.000066041946411,
|
||||
"seconds": 1.0000288486480713,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16680478.790737705,
|
||||
"retransmits": 130,
|
||||
"snd_cwnd": 20272,
|
||||
"rtt": 8761,
|
||||
"rttvar": 3048,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 15.00003719329834,
|
||||
"end": 16.000066041946411,
|
||||
"seconds": 1.0000288486480713,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16680478.790737705,
|
||||
"retransmits": 130,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 16.000066041946411,
|
||||
"end": 17.000143051147461,
|
||||
"seconds": 1.0000770092010498,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509756.633636316,
|
||||
"retransmits": 78,
|
||||
"snd_cwnd": 28960,
|
||||
"rtt": 24893,
|
||||
"rttvar": 8383,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 16.000066041946411,
|
||||
"end": 17.000143051147461,
|
||||
"seconds": 1.0000770092010498,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509756.633636316,
|
||||
"retransmits": 78,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 17.000143051147461,
|
||||
"end": 18.000263214111328,
|
||||
"seconds": 1.0001201629638672,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509216.855426995,
|
||||
"retransmits": 114,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 13224,
|
||||
"rttvar": 4235,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 17.000143051147461,
|
||||
"end": 18.000263214111328,
|
||||
"seconds": 1.0001201629638672,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509216.855426995,
|
||||
"retransmits": 114,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 18.000263214111328,
|
||||
"end": 19.000095129013062,
|
||||
"seconds": 0.9998319149017334,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683764.292160505,
|
||||
"retransmits": 53,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 19297,
|
||||
"rttvar": 6312,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 18.000263214111328,
|
||||
"end": 19.000095129013062,
|
||||
"seconds": 0.9998319149017334,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683764.292160505,
|
||||
"retransmits": 53,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 19.000095129013062,
|
||||
"end": 20.000341176986694,
|
||||
"seconds": 1.0002460479736328,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507642.519903054,
|
||||
"retransmits": 42,
|
||||
"snd_cwnd": 20272,
|
||||
"rtt": 3156,
|
||||
"rttvar": 3643,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 19.000095129013062,
|
||||
"end": 20.000341176986694,
|
||||
"seconds": 1.0002460479736328,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507642.519903054,
|
||||
"retransmits": 42,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 20.000341176986694,
|
||||
"end": 21.000100135803223,
|
||||
"seconds": 0.99975895881652832,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16684981.767751502,
|
||||
"retransmits": 112,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 11700,
|
||||
"rttvar": 5569,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 20.000341176986694,
|
||||
"end": 21.000100135803223,
|
||||
"seconds": 0.99975895881652832,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16684981.767751502,
|
||||
"retransmits": 112,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 21.000100135803223,
|
||||
"end": 22.000210046768188,
|
||||
"seconds": 1.0001099109649658,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509345.085810527,
|
||||
"retransmits": 68,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 21732,
|
||||
"rttvar": 8869,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 21.000100135803223,
|
||||
"end": 22.000210046768188,
|
||||
"seconds": 1.0001099109649658,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12509345.085810527,
|
||||
"retransmits": 68,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 22.000210046768188,
|
||||
"end": 23.000141143798828,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16682109.446876084,
|
||||
"retransmits": 92,
|
||||
"snd_cwnd": 24616,
|
||||
"rtt": 21527,
|
||||
"rttvar": 8192,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 22.000210046768188,
|
||||
"end": 23.000141143798828,
|
||||
"seconds": 0.99993109703063965,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16682109.446876084,
|
||||
"retransmits": 92,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 23.000141143798828,
|
||||
"end": 24.000304222106934,
|
||||
"seconds": 1.0001630783081055,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508680.105611743,
|
||||
"retransmits": 85,
|
||||
"snd_cwnd": 14480,
|
||||
"rtt": 12058,
|
||||
"rttvar": 5251,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 23.000141143798828,
|
||||
"end": 24.000304222106934,
|
||||
"seconds": 1.0001630783081055,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12508680.105611743,
|
||||
"retransmits": 85,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.000304222106934,
|
||||
"end": 24.999988079071045,
|
||||
"seconds": 0.99968385696411133,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12514676.427799048,
|
||||
"retransmits": 183,
|
||||
"snd_cwnd": 5792,
|
||||
"rtt": 1009,
|
||||
"rttvar": 1000,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.000304222106934,
|
||||
"end": 24.999988079071045,
|
||||
"seconds": 0.99968385696411133,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12514676.427799048,
|
||||
"retransmits": 183,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.999988079071045,
|
||||
"end": 26.000048160552979,
|
||||
"seconds": 1.0000600814819336,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16679957.843414178,
|
||||
"retransmits": 76,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 9610,
|
||||
"rttvar": 4621,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.999988079071045,
|
||||
"end": 26.000048160552979,
|
||||
"seconds": 1.0000600814819336,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16679957.843414178,
|
||||
"retransmits": 76,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 26.000048160552979,
|
||||
"end": 27.000274181365967,
|
||||
"seconds": 1.0002260208129883,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507892.955865344,
|
||||
"retransmits": 138,
|
||||
"snd_cwnd": 17376,
|
||||
"rtt": 6622,
|
||||
"rttvar": 6040,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 26.000048160552979,
|
||||
"end": 27.000274181365967,
|
||||
"seconds": 1.0002260208129883,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12507892.955865344,
|
||||
"retransmits": 138,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 27.000274181365967,
|
||||
"end": 28.000102043151855,
|
||||
"seconds": 0.99982786178588867,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683831.925032109,
|
||||
"retransmits": 77,
|
||||
"snd_cwnd": 15928,
|
||||
"rtt": 14498,
|
||||
"rttvar": 2115,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 27.000274181365967,
|
||||
"end": 28.000102043151855,
|
||||
"seconds": 0.99982786178588867,
|
||||
"bytes": 2085120,
|
||||
"bits_per_second": 16683831.925032109,
|
||||
"retransmits": 77,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 28.000102043151855,
|
||||
"end": 29.000017166137695,
|
||||
"seconds": 0.99991512298583984,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12511781.962694816,
|
||||
"retransmits": 88,
|
||||
"snd_cwnd": 1448,
|
||||
"rtt": 17351,
|
||||
"rttvar": 6222,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 28.000102043151855,
|
||||
"end": 29.000017166137695,
|
||||
"seconds": 0.99991512298583984,
|
||||
"bytes": 1563840,
|
||||
"bits_per_second": 12511781.962694816,
|
||||
"retransmits": 88,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 29.000017166137695,
|
||||
"end": 29.999970197677612,
|
||||
"seconds": 0.999953031539917,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203048.000673324,
|
||||
"retransmits": 57,
|
||||
"snd_cwnd": 13032,
|
||||
"rtt": 15027,
|
||||
"rttvar": 1607,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 29.000017166137695,
|
||||
"end": 29.999970197677612,
|
||||
"seconds": 0.999953031539917,
|
||||
"bytes": 2150280,
|
||||
"bits_per_second": 17203048.000673324,
|
||||
"retransmits": 57,
|
||||
"omitted": false
|
||||
}
|
||||
}],
|
||||
"end": {
|
||||
"streams": [{
|
||||
"sender": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 29.999970197677612,
|
||||
"seconds": 29.999970197677612,
|
||||
"bytes": 54278280,
|
||||
"bits_per_second": 14474222.378848055,
|
||||
"retransmits": 2543,
|
||||
"max_snd_cwnd": 28960,
|
||||
"max_rtt": 24893,
|
||||
"min_rtt": 482,
|
||||
"mean_rtt": 10277
|
||||
},
|
||||
"receiver": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.047013998031616,
|
||||
"seconds": 29.999970197677612,
|
||||
"bytes": 54243528,
|
||||
"bits_per_second": 14442307.779016843
|
||||
}
|
||||
}],
|
||||
"sum_sent": {
|
||||
"start": 0,
|
||||
"end": 29.999970197677612,
|
||||
"seconds": 29.999970197677612,
|
||||
"bytes": 54278280,
|
||||
"bits_per_second": 14474222.378848055,
|
||||
"retransmits": 2543
|
||||
},
|
||||
"sum_received": {
|
||||
"start": 0,
|
||||
"end": 30.047013998031616,
|
||||
"seconds": 30.047013998031616,
|
||||
"bytes": 54243528,
|
||||
"bits_per_second": 14442307.779016843
|
||||
},
|
||||
"cpu_utilization_percent": {
|
||||
"host_total": 0.20204093980114748,
|
||||
"host_user": 0.0728652619907714,
|
||||
"host_system": 0.12918137753362316,
|
||||
"remote_total": 1.1774421951610694,
|
||||
"remote_user": 0.15254413270531306,
|
||||
"remote_system": 1.024902419552419
|
||||
},
|
||||
"sender_tcp_congestion": "cubic",
|
||||
"receiver_tcp_congestion": "cubic"
|
||||
}
|
||||
}
|
@ -1,904 +0,0 @@
|
||||
{
|
||||
"start": {
|
||||
"connected": [{
|
||||
"socket": 5,
|
||||
"local_host": "2.2.2.3",
|
||||
"local_port": 33214,
|
||||
"remote_host": "2.2.2.2",
|
||||
"remote_port": 5201
|
||||
}],
|
||||
"version": "iperf 3.6",
|
||||
"system_info": "Linux Manual-LocalPortal 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64",
|
||||
"timestamp": {
|
||||
"time": "Tue, 03 Nov 2020 20:37:05 GMT",
|
||||
"timesecs": 1604435825
|
||||
},
|
||||
"connecting_to": {
|
||||
"host": "2.2.2.2",
|
||||
"port": 5201
|
||||
},
|
||||
"cookie": "hjybxbqwrgxmc63nengx3ba6q7j2qc7uz44u",
|
||||
"tcp_mss_default": 1448,
|
||||
"sock_bufsize": 0,
|
||||
"sndbuf_actual": 16384,
|
||||
"rcvbuf_actual": 131072,
|
||||
"test_start": {
|
||||
"protocol": "TCP",
|
||||
"num_streams": 1,
|
||||
"blksize": 131072,
|
||||
"omit": 5,
|
||||
"duration": 30,
|
||||
"bytes": 0,
|
||||
"blocks": 0,
|
||||
"reverse": 0,
|
||||
"tos": 0
|
||||
}
|
||||
},
|
||||
"intervals": [{
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 1.0001130104064941,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 7859744,
|
||||
"bits_per_second": 62870846.940030679,
|
||||
"retransmits": 168,
|
||||
"snd_cwnd": 47784,
|
||||
"rtt": 28466,
|
||||
"rttvar": 4158,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0,
|
||||
"end": 1.0001130104064941,
|
||||
"seconds": 1.0001130104064941,
|
||||
"bytes": 7859744,
|
||||
"bits_per_second": 62870846.940030679,
|
||||
"retransmits": 168,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0001130104064941,
|
||||
"end": 2.000230073928833,
|
||||
"seconds": 1.0001170635223389,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891197.339331243,
|
||||
"retransmits": 158,
|
||||
"snd_cwnd": 31856,
|
||||
"rtt": 19104,
|
||||
"rttvar": 7997,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0001130104064941,
|
||||
"end": 2.000230073928833,
|
||||
"seconds": 1.0001170635223389,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891197.339331243,
|
||||
"retransmits": 158,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.000230073928833,
|
||||
"end": 3.0001280307769775,
|
||||
"seconds": 0.99989795684814453,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36493323.8937918,
|
||||
"retransmits": 39,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 7994,
|
||||
"rttvar": 6820,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.000230073928833,
|
||||
"end": 3.0001280307769775,
|
||||
"seconds": 0.99989795684814453,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36493323.8937918,
|
||||
"retransmits": 39,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0001280307769775,
|
||||
"end": 4.0004382133483887,
|
||||
"seconds": 1.0003101825714111,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21886971.043041468,
|
||||
"retransmits": 21,
|
||||
"snd_cwnd": 41992,
|
||||
"rtt": 22568,
|
||||
"rttvar": 11944,
|
||||
"pmtu": 1500,
|
||||
"omitted": true
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0001280307769775,
|
||||
"end": 4.0004382133483887,
|
||||
"seconds": 1.0003101825714111,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21886971.043041468,
|
||||
"retransmits": 21,
|
||||
"omitted": true
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 0.99975895881652832,
|
||||
"end": 1.0002000331878662,
|
||||
"seconds": 1.9999589920043945,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 14596139.27920771,
|
||||
"retransmits": 172,
|
||||
"snd_cwnd": 53576,
|
||||
"rtt": 26442,
|
||||
"rttvar": 4085,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 0.99975895881652832,
|
||||
"end": 1.0002000331878662,
|
||||
"seconds": 1.9999589920043945,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 14596139.27920771,
|
||||
"retransmits": 172,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 1.0002000331878662,
|
||||
"end": 2.0003628730773926,
|
||||
"seconds": 1.0001628398895264,
|
||||
"bytes": 3127680,
|
||||
"bits_per_second": 25017366.174855847,
|
||||
"retransmits": 145,
|
||||
"snd_cwnd": 4344,
|
||||
"rtt": 15833,
|
||||
"rttvar": 15395,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 1.0002000331878662,
|
||||
"end": 2.0003628730773926,
|
||||
"seconds": 1.0001628398895264,
|
||||
"bytes": 3127680,
|
||||
"bits_per_second": 25017366.174855847,
|
||||
"retransmits": 145,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 2.0003628730773926,
|
||||
"end": 3.0001430511474609,
|
||||
"seconds": 0.99978017807006836,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36497622.977920927,
|
||||
"retransmits": 85,
|
||||
"snd_cwnd": 37648,
|
||||
"rtt": 15779,
|
||||
"rttvar": 817,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 2.0003628730773926,
|
||||
"end": 3.0001430511474609,
|
||||
"seconds": 0.99978017807006836,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36497622.977920927,
|
||||
"retransmits": 85,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 3.0001430511474609,
|
||||
"end": 4.0001969337463379,
|
||||
"seconds": 1.000053882598877,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190107.16116466,
|
||||
"retransmits": 57,
|
||||
"snd_cwnd": 1448,
|
||||
"rtt": 7463,
|
||||
"rttvar": 7039,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 3.0001430511474609,
|
||||
"end": 4.0001969337463379,
|
||||
"seconds": 1.000053882598877,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190107.16116466,
|
||||
"retransmits": 57,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 4.0001969337463379,
|
||||
"end": 5.0002570152282715,
|
||||
"seconds": 1.0000600814819336,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189926.225974809,
|
||||
"retransmits": 47,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 12944,
|
||||
"rttvar": 1829,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 4.0001969337463379,
|
||||
"end": 5.0002570152282715,
|
||||
"seconds": 1.0000600814819336,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189926.225974809,
|
||||
"retransmits": 47,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 5.0002570152282715,
|
||||
"end": 6.0003118515014648,
|
||||
"seconds": 1.0000548362731934,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190079.324835606,
|
||||
"retransmits": 41,
|
||||
"snd_cwnd": 39096,
|
||||
"rtt": 1252,
|
||||
"rttvar": 506,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 5.0002570152282715,
|
||||
"end": 6.0003118515014648,
|
||||
"seconds": 1.0000548362731934,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190079.324835606,
|
||||
"retransmits": 41,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 6.0003118515014648,
|
||||
"end": 7.00028395652771,
|
||||
"seconds": 0.99997210502624512,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192494.323863003,
|
||||
"retransmits": 133,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 6771,
|
||||
"rttvar": 7775,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 6.0003118515014648,
|
||||
"end": 7.00028395652771,
|
||||
"seconds": 0.99997210502624512,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192494.323863003,
|
||||
"retransmits": 133,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 7.00028395652771,
|
||||
"end": 8.00033187866211,
|
||||
"seconds": 1.0000479221343994,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190281.139424078,
|
||||
"retransmits": 130,
|
||||
"snd_cwnd": 28960,
|
||||
"rtt": 12283,
|
||||
"rttvar": 2654,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 7.00028395652771,
|
||||
"end": 8.00033187866211,
|
||||
"seconds": 1.0000479221343994,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29190281.139424078,
|
||||
"retransmits": 130,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 8.00033187866211,
|
||||
"end": 9.000169038772583,
|
||||
"seconds": 0.99983716011047363,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36495542.930178955,
|
||||
"retransmits": 40,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 5518,
|
||||
"rttvar": 2327,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 8.00033187866211,
|
||||
"end": 9.000169038772583,
|
||||
"seconds": 0.99983716011047363,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36495542.930178955,
|
||||
"retransmits": 40,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 9.000169038772583,
|
||||
"end": 10.000263929367065,
|
||||
"seconds": 1.0000948905944824,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891682.685215779,
|
||||
"retransmits": 119,
|
||||
"snd_cwnd": 11584,
|
||||
"rtt": 604,
|
||||
"rttvar": 72,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 9.000169038772583,
|
||||
"end": 10.000263929367065,
|
||||
"seconds": 1.0000948905944824,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21891682.685215779,
|
||||
"retransmits": 119,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 10.000263929367065,
|
||||
"end": 11.000330924987793,
|
||||
"seconds": 1.0000669956207275,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189724.416293863,
|
||||
"retransmits": 74,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 12099,
|
||||
"rttvar": 4452,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 10.000263929367065,
|
||||
"end": 11.000330924987793,
|
||||
"seconds": 1.0000669956207275,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189724.416293863,
|
||||
"retransmits": 74,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 11.000330924987793,
|
||||
"end": 12.000174045562744,
|
||||
"seconds": 0.99984312057495117,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36495325.365660332,
|
||||
"retransmits": 104,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 9093,
|
||||
"rttvar": 4584,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 11.000330924987793,
|
||||
"end": 12.000174045562744,
|
||||
"seconds": 0.99984312057495117,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36495325.365660332,
|
||||
"retransmits": 104,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 12.000174045562744,
|
||||
"end": 13.000422954559326,
|
||||
"seconds": 1.000248908996582,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21888311.80227242,
|
||||
"retransmits": 19,
|
||||
"snd_cwnd": 40544,
|
||||
"rtt": 20490,
|
||||
"rttvar": 6207,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 12.000174045562744,
|
||||
"end": 13.000422954559326,
|
||||
"seconds": 1.000248908996582,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21888311.80227242,
|
||||
"retransmits": 19,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 13.000422954559326,
|
||||
"end": 14.000242948532104,
|
||||
"seconds": 0.99981999397277832,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36496169.530485995,
|
||||
"retransmits": 55,
|
||||
"snd_cwnd": 21720,
|
||||
"rtt": 9322,
|
||||
"rttvar": 5071,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 13.000422954559326,
|
||||
"end": 14.000242948532104,
|
||||
"seconds": 0.99981999397277832,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36496169.530485995,
|
||||
"retransmits": 55,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 14.000242948532104,
|
||||
"end": 15.000162839889526,
|
||||
"seconds": 0.99991989135742188,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29194018.693208914,
|
||||
"retransmits": 76,
|
||||
"snd_cwnd": 23168,
|
||||
"rtt": 11580,
|
||||
"rttvar": 4221,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 14.000242948532104,
|
||||
"end": 15.000162839889526,
|
||||
"seconds": 0.99991989135742188,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29194018.693208914,
|
||||
"retransmits": 76,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 15.000162839889526,
|
||||
"end": 16.00031590461731,
|
||||
"seconds": 1.0001530647277832,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29187212.467268948,
|
||||
"retransmits": 35,
|
||||
"snd_cwnd": 37648,
|
||||
"rtt": 18655,
|
||||
"rttvar": 4241,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 15.000162839889526,
|
||||
"end": 16.00031590461731,
|
||||
"seconds": 1.0001530647277832,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29187212.467268948,
|
||||
"retransmits": 35,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 16.00031590461731,
|
||||
"end": 17.000074863433838,
|
||||
"seconds": 0.99975895881652832,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36498397.616956413,
|
||||
"retransmits": 28,
|
||||
"snd_cwnd": 28960,
|
||||
"rtt": 11578,
|
||||
"rttvar": 7529,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 16.00031590461731,
|
||||
"end": 17.000074863433838,
|
||||
"seconds": 0.99975895881652832,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36498397.616956413,
|
||||
"retransmits": 28,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 17.000074863433838,
|
||||
"end": 18.000160932540894,
|
||||
"seconds": 1.0000860691070557,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189167.714399125,
|
||||
"retransmits": 88,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 6317,
|
||||
"rttvar": 10163,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 17.000074863433838,
|
||||
"end": 18.000160932540894,
|
||||
"seconds": 1.0000860691070557,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189167.714399125,
|
||||
"retransmits": 88,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 18.000160932540894,
|
||||
"end": 19.000382900238037,
|
||||
"seconds": 1.0002219676971436,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21888901.370969683,
|
||||
"retransmits": 31,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 20038,
|
||||
"rttvar": 7181,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 18.000160932540894,
|
||||
"end": 19.000382900238037,
|
||||
"seconds": 1.0002219676971436,
|
||||
"bytes": 2736720,
|
||||
"bits_per_second": 21888901.370969683,
|
||||
"retransmits": 31,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 19.000382900238037,
|
||||
"end": 20.000078916549683,
|
||||
"seconds": 0.99969601631164551,
|
||||
"bytes": 4626360,
|
||||
"bits_per_second": 37022134.124882035,
|
||||
"retransmits": 118,
|
||||
"snd_cwnd": 39096,
|
||||
"rtt": 12253,
|
||||
"rttvar": 7091,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 19.000382900238037,
|
||||
"end": 20.000078916549683,
|
||||
"seconds": 0.99969601631164551,
|
||||
"bytes": 4626360,
|
||||
"bits_per_second": 37022134.124882035,
|
||||
"retransmits": 118,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 20.000078916549683,
|
||||
"end": 21.000180006027222,
|
||||
"seconds": 1.0001010894775391,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29188729.326602343,
|
||||
"retransmits": 66,
|
||||
"snd_cwnd": 28960,
|
||||
"rtt": 10169,
|
||||
"rttvar": 8560,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 20.000078916549683,
|
||||
"end": 21.000180006027222,
|
||||
"seconds": 1.0001010894775391,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29188729.326602343,
|
||||
"retransmits": 66,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 21.000180006027222,
|
||||
"end": 22.000144958496094,
|
||||
"seconds": 0.99996495246887207,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192703.132171731,
|
||||
"retransmits": 74,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 6238,
|
||||
"rttvar": 5972,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 21.000180006027222,
|
||||
"end": 22.000144958496094,
|
||||
"seconds": 0.99996495246887207,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192703.132171731,
|
||||
"retransmits": 74,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 22.000144958496094,
|
||||
"end": 23.000087976455688,
|
||||
"seconds": 0.99994301795959473,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29193343.49627867,
|
||||
"retransmits": 49,
|
||||
"snd_cwnd": 30408,
|
||||
"rtt": 13749,
|
||||
"rttvar": 4520,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 22.000144958496094,
|
||||
"end": 23.000087976455688,
|
||||
"seconds": 0.99994301795959473,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29193343.49627867,
|
||||
"retransmits": 49,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 23.000087976455688,
|
||||
"end": 24.000288963317871,
|
||||
"seconds": 1.0002009868621826,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29185814.0348169,
|
||||
"retransmits": 138,
|
||||
"snd_cwnd": 31856,
|
||||
"rtt": 7151,
|
||||
"rttvar": 11584,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 23.000087976455688,
|
||||
"end": 24.000288963317871,
|
||||
"seconds": 1.0002009868621826,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29185814.0348169,
|
||||
"retransmits": 138,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 24.000288963317871,
|
||||
"end": 25.000213861465454,
|
||||
"seconds": 0.999924898147583,
|
||||
"bytes": 3714120,
|
||||
"bits_per_second": 29715191.665939037,
|
||||
"retransmits": 62,
|
||||
"snd_cwnd": 28960,
|
||||
"rtt": 14113,
|
||||
"rttvar": 1352,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 24.000288963317871,
|
||||
"end": 25.000213861465454,
|
||||
"seconds": 0.999924898147583,
|
||||
"bytes": 3714120,
|
||||
"bits_per_second": 29715191.665939037,
|
||||
"retransmits": 62,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 25.000213861465454,
|
||||
"end": 26.000295877456665,
|
||||
"seconds": 1.0000820159912109,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189286.011775006,
|
||||
"retransmits": 68,
|
||||
"snd_cwnd": 82536,
|
||||
"rtt": 56523,
|
||||
"rttvar": 45608,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 25.000213861465454,
|
||||
"end": 26.000295877456665,
|
||||
"seconds": 1.0000820159912109,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29189286.011775006,
|
||||
"retransmits": 68,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 26.000295877456665,
|
||||
"end": 27.000303030014038,
|
||||
"seconds": 1.000007152557373,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29191471.206327394,
|
||||
"retransmits": 230,
|
||||
"snd_cwnd": 52128,
|
||||
"rtt": 22512,
|
||||
"rttvar": 14539,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 26.000295877456665,
|
||||
"end": 27.000303030014038,
|
||||
"seconds": 1.000007152557373,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29191471.206327394,
|
||||
"retransmits": 230,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 27.000303030014038,
|
||||
"end": 28.000287055969238,
|
||||
"seconds": 0.9999840259552002,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192146.316653065,
|
||||
"retransmits": 72,
|
||||
"snd_cwnd": 46336,
|
||||
"rtt": 12034,
|
||||
"rttvar": 4791,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 27.000303030014038,
|
||||
"end": 28.000287055969238,
|
||||
"seconds": 0.9999840259552002,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29192146.316653065,
|
||||
"retransmits": 72,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 28.000287055969238,
|
||||
"end": 29.000072956085205,
|
||||
"seconds": 0.9997859001159668,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36497414.092124633,
|
||||
"retransmits": 151,
|
||||
"snd_cwnd": 23168,
|
||||
"rtt": 13022,
|
||||
"rttvar": 3630,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 28.000287055969238,
|
||||
"end": 29.000072956085205,
|
||||
"seconds": 0.9997859001159668,
|
||||
"bytes": 4561200,
|
||||
"bits_per_second": 36497414.092124633,
|
||||
"retransmits": 151,
|
||||
"omitted": false
|
||||
}
|
||||
}, {
|
||||
"streams": [{
|
||||
"socket": 5,
|
||||
"start": 29.000072956085205,
|
||||
"end": 29.999979019165039,
|
||||
"seconds": 0.999906063079834,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29194422.434129488,
|
||||
"retransmits": 35,
|
||||
"snd_cwnd": 27512,
|
||||
"rtt": 14104,
|
||||
"rttvar": 2315,
|
||||
"pmtu": 1500,
|
||||
"omitted": false
|
||||
}],
|
||||
"sum": {
|
||||
"start": 29.000072956085205,
|
||||
"end": 29.999979019165039,
|
||||
"seconds": 0.999906063079834,
|
||||
"bytes": 3648960,
|
||||
"bits_per_second": 29194422.434129488,
|
||||
"retransmits": 35,
|
||||
"omitted": false
|
||||
}
|
||||
}],
|
||||
"end": {
|
||||
"streams": [{
|
||||
"sender": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 29.999979019165039,
|
||||
"seconds": 29.999979019165039,
|
||||
"bytes": 112726800,
|
||||
"bits_per_second": 30060501.023147028,
|
||||
"retransmits": 2542,
|
||||
"max_snd_cwnd": 82536,
|
||||
"max_rtt": 56523,
|
||||
"min_rtt": 604,
|
||||
"mean_rtt": 14237
|
||||
},
|
||||
"receiver": {
|
||||
"socket": 5,
|
||||
"start": 0,
|
||||
"end": 30.074513912200928,
|
||||
"seconds": 29.999979019165039,
|
||||
"bytes": 112376384,
|
||||
"bits_per_second": 29892788.113701824
|
||||
}
|
||||
}],
|
||||
"sum_sent": {
|
||||
"start": 0,
|
||||
"end": 29.999979019165039,
|
||||
"seconds": 29.999979019165039,
|
||||
"bytes": 112726800,
|
||||
"bits_per_second": 30060501.023147028,
|
||||
"retransmits": 2542
|
||||
},
|
||||
"sum_received": {
|
||||
"start": 0,
|
||||
"end": 30.074513912200928,
|
||||
"seconds": 30.074513912200928,
|
||||
"bytes": 112376384,
|
||||
"bits_per_second": 29892788.113701824
|
||||
},
|
||||
"cpu_utilization_percent": {
|
||||
"host_total": 0.22899917925098145,
|
||||
"host_user": 0.082528055178228629,
|
||||
"host_system": 0.14647967413545043,
|
||||
"remote_total": 2.3161445099272395,
|
||||
"remote_user": 0.21584379195901418,
|
||||
"remote_system": 2.1003007179682252
|
||||
},
|
||||
"sender_tcp_congestion": "cubic",
|
||||
"receiver_tcp_congestion": "cubic"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -11,6 +11,7 @@ import proxmoxer
|
||||
import paramiko
|
||||
|
||||
import structure
|
||||
import structure.generic
|
||||
|
||||
|
||||
def check_env(*names: str) -> bool:
|
||||
@ -21,14 +22,14 @@ def check_env(*names: str) -> bool:
|
||||
|
||||
|
||||
def bridge_node_search(
|
||||
first: structure.Bridge,
|
||||
bridge_name_generator: Callable[[structure.Bridge], str],
|
||||
node_id_generator: Callable[[structure.Node], int],
|
||||
) -> Tuple[List[structure.Bridge], List[structure.Node]]:
|
||||
bridges: List[structure.Bridge] = []
|
||||
nodes: List[structure.Node] = []
|
||||
first: structure.generic.Bridge,
|
||||
bridge_name_generator: Callable[[structure.generic.Bridge], str],
|
||||
node_id_generator: Callable[[structure.generic.Node], int],
|
||||
) -> Tuple[List[structure.generic.Bridge], List[structure.generic.Node]]:
|
||||
bridges: List[structure.generic.Bridge] = []
|
||||
nodes: List[structure.generic.Node] = []
|
||||
|
||||
queue: List[structure.Bridge] = [first]
|
||||
queue: List[structure.generic.Bridge] = [first]
|
||||
while len(queue) > 0:
|
||||
bridge = queue.pop()
|
||||
if bridge.get_name() != '':
|
||||
@ -38,7 +39,7 @@ def bridge_node_search(
|
||||
bridge.set_name(bridge_name_generator(bridge))
|
||||
|
||||
# from this bridge, find all nodes (via all interfaces)
|
||||
reachable_nodes: List[structure.Node] = []
|
||||
reachable_nodes: List[structure.generic.Node] = []
|
||||
for interface in bridge.get_interfaces():
|
||||
node = interface.get_node()
|
||||
if node.get_id() is not None:
|
||||
@ -63,7 +64,7 @@ class PrintRunner:
|
||||
self._last_bridge: int = 0
|
||||
self._last_node_id = 0
|
||||
|
||||
def build(self, bridge: structure.Bridge):
|
||||
def build(self, bridge: structure.generic.Bridge):
|
||||
bridges, nodes = bridge_node_search(bridge, lambda _: self.name_bridge(), lambda _: self.id_node())
|
||||
|
||||
print(bridges)
|
||||
@ -121,10 +122,10 @@ class ProxmoxRunner:
|
||||
self._template_id = template_id
|
||||
self._initial_vm_id = initial_vm_id
|
||||
|
||||
self._internet_bridge = structure.Bridge()
|
||||
self._internet_bridge = structure.generic.Bridge()
|
||||
self._internet_bridge.set_name(internet_bridge)
|
||||
|
||||
self._management_bridge = structure.Bridge()
|
||||
self._management_bridge = structure.generic.Bridge()
|
||||
self._management_bridge.set_name(management_bridge)
|
||||
self._management_initial_ip = management_initial_ip
|
||||
self._management_netmask = management_netmask
|
||||
@ -133,21 +134,21 @@ class ProxmoxRunner:
|
||||
self._private_key = paramiko.RSAKey.generate(3072)
|
||||
self._client = paramiko.SSHClient()
|
||||
|
||||
def build(self, bridge: structure.Bridge):
|
||||
def build(self, bridge: structure.generic.Bridge):
|
||||
bridges, nodes = bridge_node_search(bridge, lambda x: self._create_bridge(x), lambda x: self._create_node(x))
|
||||
|
||||
self._build_bridges()
|
||||
self._build_bridges(bridges)
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:
|
||||
build_futures = [executor.submit(self._build_node, node) for node in nodes]
|
||||
for future in build_futures:
|
||||
future.result()
|
||||
future.result(300)
|
||||
|
||||
# guarantee that setup is not called until all of the nodes are built
|
||||
# this means that all will have their final IPs by this point
|
||||
setup_futures = [executor.submit(self._setup_node, node) for node in nodes]
|
||||
for future in setup_futures:
|
||||
future.result()
|
||||
future.result(300)
|
||||
|
||||
def _await_task(self, upid, timeout=10):
|
||||
t1 = datetime.now()
|
||||
@ -156,7 +157,7 @@ class ProxmoxRunner:
|
||||
return
|
||||
raise TimeoutError
|
||||
|
||||
def _create_bridge(self, bridge: structure.Bridge) -> str:
|
||||
def _create_bridge(self, bridge: structure.generic.Bridge) -> str:
|
||||
while True:
|
||||
try:
|
||||
self._proxmox.nodes(self._proxmox_node).network.post(
|
||||
@ -177,11 +178,17 @@ class ProxmoxRunner:
|
||||
self._created_bridges.append(bridge_name)
|
||||
return bridge_name
|
||||
|
||||
def _build_bridges(self):
|
||||
def _build_bridges(self, bridges: List[structure.generic.Bridge]):
|
||||
network_task = self._proxmox.nodes(self._proxmox_node).network.put()
|
||||
self._await_task(network_task)
|
||||
|
||||
def _create_node(self, node: structure.Node) -> int:
|
||||
existing = []
|
||||
for bridge in bridges:
|
||||
while True in [ipaddress.ip_network(bridge.get_network()).overlaps(x) for x in existing]:
|
||||
bridge.new_network()
|
||||
existing.append(bridge.get_network())
|
||||
|
||||
def _create_node(self, node: structure.generic.Node) -> int:
|
||||
while True:
|
||||
try:
|
||||
clone_task = self._proxmox.nodes(self._proxmox_node).qemu(self._template_id).clone.post(
|
||||
@ -201,10 +208,10 @@ class ProxmoxRunner:
|
||||
self._created_nodes.append(new_id - 1)
|
||||
return new_id - 1
|
||||
|
||||
def _open_ssh(self, node: structure.Node, interface: structure.Interface = None):
|
||||
def _open_ssh(self, node: structure.generic.Node, interface: structure.generic.Interface = None):
|
||||
if interface is None:
|
||||
for iface in node.get_interfaces():
|
||||
if iface.get_method() == structure.IpMethod.Management:
|
||||
if iface.get_method() == structure.generic.IpMethod.Management:
|
||||
interface = iface
|
||||
break
|
||||
if interface is None:
|
||||
@ -227,21 +234,21 @@ class ProxmoxRunner:
|
||||
except (paramiko.ssh_exception.AuthenticationException, paramiko.ssh_exception.NoValidConnectionsError):
|
||||
time.sleep(10)
|
||||
|
||||
node.client = client
|
||||
node.ssh_client = client
|
||||
|
||||
def _close_ssh(self, node: structure.Node):
|
||||
node.client.close()
|
||||
del node.client
|
||||
def _close_ssh(self, node: structure.generic.Node):
|
||||
node.ssh_client.close()
|
||||
del node.ssh_client
|
||||
|
||||
def ssh(
|
||||
self,
|
||||
node: structure.Node,
|
||||
node: structure.generic.Node,
|
||||
command: str,
|
||||
error_stderr=False,
|
||||
error_stdout=False,
|
||||
return_stdout=False,
|
||||
) -> Union[int, str]:
|
||||
chan = node.client.get_transport().open_session()
|
||||
chan = node.ssh_client.get_transport().open_session()
|
||||
|
||||
chan.exec_command(command)
|
||||
exit_status = chan.recv_exit_status()
|
||||
@ -263,7 +270,7 @@ class ProxmoxRunner:
|
||||
|
||||
return exit_status
|
||||
|
||||
def _build_node(self, node: structure.Node):
|
||||
def _build_node(self, node: structure.generic.Node):
|
||||
# Step 1: Configure access
|
||||
self._proxmox.nodes(self._proxmox_node).qemu(node.get_id()).config.put(
|
||||
ciuser='python',
|
||||
@ -276,7 +283,7 @@ class ProxmoxRunner:
|
||||
# Step 2: connect to Internet bridge with DHCP to install packages
|
||||
if node.get_internet_setup() is not None:
|
||||
interfaces = node.get_interfaces()
|
||||
internet_interface = structure.Interface(structure.IpMethod.Dhcp4)
|
||||
internet_interface = structure.generic.Interface(structure.generic.IpMethod.Dhcp4)
|
||||
internet_interface.set_bridge(self._internet_bridge)
|
||||
temp_interfaces = [internet_interface, interfaces[len(interfaces) - 1]]
|
||||
|
||||
@ -296,12 +303,12 @@ class ProxmoxRunner:
|
||||
self._setup_node_interfaces(node)
|
||||
|
||||
start_task = self._proxmox.nodes(self._proxmox_node).qemu(node.get_id()).status.start.post()
|
||||
self._await_task(start_task)
|
||||
self._await_task(start_task, timeout=20)
|
||||
|
||||
self._open_ssh(node)
|
||||
node.ssh = (lambda n: lambda *args, **kwargs: self.ssh(n, *args, **kwargs))(node)
|
||||
|
||||
def _setup_node_interfaces(self, node: structure.Node, interfaces: List[structure.Interface] = None):
|
||||
def _setup_node_interfaces(self, node: structure.generic.Node, interfaces: List[structure.generic.Interface] = None):
|
||||
if interfaces is None:
|
||||
interfaces = node.get_interfaces()
|
||||
|
||||
@ -310,21 +317,20 @@ class ProxmoxRunner:
|
||||
interface = interfaces[i]
|
||||
method = interface.get_method()
|
||||
|
||||
if method == structure.IpMethod.Manual:
|
||||
pass
|
||||
elif method == structure.IpMethod.Management:
|
||||
if method == structure.generic.IpMethod.Management:
|
||||
interface.set_bridge(self._management_bridge)
|
||||
addr = self._management_initial_ip + node.get_id() - self._initial_vm_id
|
||||
|
||||
kwargs['ipconfig{}'.format(i)] = 'ip={}/{}'.format(addr, self._management_netmask)
|
||||
interface.set_address(addr)
|
||||
elif method == structure.IpMethod.Auto4:
|
||||
elif method == structure.generic.IpMethod.Auto4 or method == structure.generic.IpMethod.Manual:
|
||||
# handle manual the same as auto4 so it doesn't get stuck in DHCP
|
||||
bridge = interface.get_bridge()
|
||||
addr = bridge.get_ip_address()
|
||||
|
||||
kwargs['ipconfig{}'.format(i)] = 'ip={}/{}'.format(addr, bridge.netmask)
|
||||
interface.set_address(addr)
|
||||
elif method == structure.IpMethod.Dhcp4:
|
||||
elif method == structure.generic.IpMethod.Dhcp4:
|
||||
kwargs['ipconfig{}'.format(i)] = 'ip=dhcp'
|
||||
else:
|
||||
raise RuntimeError('not implemented')
|
||||
@ -335,7 +341,7 @@ class ProxmoxRunner:
|
||||
|
||||
def interface_set_rate(iface):
|
||||
def new_set_rate(rate: Optional[int]):
|
||||
structure.Interface.set_rate(iface, rate)
|
||||
structure.generic.Interface.set_rate(iface, rate)
|
||||
self._update_node_interfaces(node)
|
||||
|
||||
return new_set_rate
|
||||
@ -344,7 +350,7 @@ class ProxmoxRunner:
|
||||
|
||||
self._proxmox.nodes(self._proxmox_node).qemu(node.get_id()).config.put(**kwargs)
|
||||
|
||||
def _update_node_interfaces(self, node: structure.Node):
|
||||
def _update_node_interfaces(self, node: structure.generic.Node):
|
||||
interfaces = node.get_interfaces()
|
||||
|
||||
old_config = self._proxmox.nodes(self._proxmox_node).qemu(node.get_id()).config.get()
|
||||
@ -363,9 +369,10 @@ class ProxmoxRunner:
|
||||
|
||||
self._proxmox.nodes(self._proxmox_node).qemu(node.get_id()).config.put(**new_config)
|
||||
|
||||
def _setup_node(self, node: structure.Node):
|
||||
def _setup_node(self, node: structure.generic.Node):
|
||||
if node.get_setup() is not None:
|
||||
self.ssh(node, node.get_setup(), error_stdout=True, error_stderr=True)
|
||||
cmd = node.get_setup()
|
||||
self.ssh(node, cmd, error_stdout=True, error_stderr=True)
|
||||
|
||||
def teardown(self):
|
||||
for node in self._created_nodes:
|
||||
@ -377,8 +384,9 @@ class ProxmoxRunner:
|
||||
for bridge in self._created_bridges:
|
||||
self._proxmox.nodes(self._proxmox_node).network(bridge).delete()
|
||||
|
||||
network_task = self._proxmox.nodes(self._proxmox_node).network.put()
|
||||
self._await_task(network_task)
|
||||
if len(self._created_bridges) > 0:
|
||||
network_task = self._proxmox.nodes(self._proxmox_node).network.put()
|
||||
self._await_task(network_task)
|
||||
|
||||
self._created_nodes = []
|
||||
self._last_node_id = 0
|
||||
|
@ -1,5 +1,5 @@
|
||||
from .structure import Node
|
||||
|
||||
from .structure import IpMethod, Interface, Bridge
|
||||
from .generic import IpMethod, Interface, Bridge, Node
|
||||
|
||||
from .structure import SpeedTestServer, LocalPortal, RemotePortal
|
||||
from .tests import StandardTest, DirectTest, IperfResult
|
||||
from .environments import StandardEnvironment, DirectEnvironment, BaseEnvironment
|
||||
|
114
structure/environments.py
Normal file
114
structure/environments.py
Normal file
@ -0,0 +1,114 @@
|
||||
import threading
|
||||
from typing import Tuple, Optional
|
||||
|
||||
from structure import Bridge, StandardTest, SpeedTestServer, Node, IperfResult, RemotePortal, Interface, \
|
||||
IpMethod, LocalPortal
|
||||
from structure.tests import repeat_until_satisfied
|
||||
|
||||
|
||||
class BaseEnvironment:
|
||||
def __init__(self, runner, top_level_bridge: Bridge):
|
||||
self.top_level_bridge = top_level_bridge
|
||||
self._runner = runner
|
||||
|
||||
def __enter__(self):
|
||||
try:
|
||||
self._runner.build(self.top_level_bridge)
|
||||
except Exception as e:
|
||||
self._runner.teardown()
|
||||
raise e
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
self._runner.teardown()
|
||||
|
||||
def _test(
|
||||
self,
|
||||
test: StandardTest,
|
||||
inbound_server: SpeedTestServer,
|
||||
inbound_client: SpeedTestServer,
|
||||
rated_node: Node,
|
||||
expected_interfaces: int,
|
||||
) -> Tuple[IperfResult, IperfResult]:
|
||||
if len(test.rates) != expected_interfaces:
|
||||
raise RuntimeError('mismatched number of interfaces')
|
||||
|
||||
results = []
|
||||
for server, client in [(inbound_server, inbound_client), (inbound_client, inbound_server)]:
|
||||
def test_reducer(old: Optional[IperfResult]) -> IperfResult:
|
||||
for i, r in enumerate(test.rates):
|
||||
rated_node.get_interfaces()[i].set_rate(r)
|
||||
server.server()
|
||||
|
||||
for delay, (index, rate) in test.events.items():
|
||||
iface = rated_node.get_interfaces()[index]
|
||||
threading.Timer(6 + delay, iface.set_rate, args=[rate]).start()
|
||||
|
||||
iperf = client.client(server, time=test.duration)
|
||||
if old is None:
|
||||
return IperfResult(test, iperf)
|
||||
else:
|
||||
old.add_results(iperf)
|
||||
return old
|
||||
|
||||
def test_satisfier(val: IperfResult) -> bool:
|
||||
if val.num_tests < 3:
|
||||
return False
|
||||
return val.bandwidth_coefficient_variance() < test.bandwidth_variation_target and False not in \
|
||||
[x < test.interval_variation_target for x in val.interval_coefficient_variances().values()]
|
||||
|
||||
result = repeat_until_satisfied(
|
||||
test_reducer,
|
||||
test_satisfier,
|
||||
max_failures=test.max_failures,
|
||||
max_attempts=test.max_attempts,
|
||||
)
|
||||
results.append(result)
|
||||
|
||||
# Return a tuple of (inbound, outbound)
|
||||
return results[0], results[1]
|
||||
|
||||
def test(self, test: StandardTest) -> Tuple[IperfResult, IperfResult]:
|
||||
raise RuntimeError('not implemented')
|
||||
|
||||
|
||||
class StandardEnvironment(BaseEnvironment):
|
||||
def __init__(self, interfaces: int, runner, setup_params: dict):
|
||||
self._interfaces = interfaces
|
||||
|
||||
self.rp = RemotePortal([Interface(IpMethod.Auto4)], setup_params=setup_params)
|
||||
|
||||
self.st = SpeedTestServer()
|
||||
self.cl = SpeedTestServer(clone_interface=self.rp.get_interfaces()[0])
|
||||
|
||||
self.lp = LocalPortal(
|
||||
[Interface(IpMethod.Auto4) for _ in range(interfaces)],
|
||||
self.cl,
|
||||
setup_params=setup_params,
|
||||
)
|
||||
|
||||
self.rp.set_local_portal(self.lp)
|
||||
self.lp.set_remote_portal(self.rp)
|
||||
|
||||
super().__init__(runner, Bridge(
|
||||
self.st.get_interfaces()[0],
|
||||
self.rp.get_interfaces()[0],
|
||||
*self.lp.get_interfaces()[0:interfaces],
|
||||
))
|
||||
|
||||
def test(self, test: StandardTest) -> Tuple[IperfResult, IperfResult]:
|
||||
return self._test(test, self.st, self.cl, self.lp, self._interfaces)
|
||||
|
||||
|
||||
class DirectEnvironment(BaseEnvironment):
|
||||
def __init__(self, runner):
|
||||
self.st1 = SpeedTestServer()
|
||||
self.st2 = SpeedTestServer()
|
||||
|
||||
super().__init__(runner, Bridge(
|
||||
self.st1.get_interfaces()[0],
|
||||
self.st2.get_interfaces()[0],
|
||||
))
|
||||
|
||||
def test(self, test: StandardTest) -> Tuple[IperfResult, IperfResult]:
|
||||
return self._test(test, self.st2, self.st1, self.st2, 1)
|
132
structure/generic.py
Normal file
132
structure/generic.py
Normal file
@ -0,0 +1,132 @@
|
||||
import ipaddress
|
||||
import random
|
||||
from enum import Enum
|
||||
from typing import Optional, List, Dict, Union
|
||||
|
||||
|
||||
class IpMethod(Enum):
|
||||
Manual = 0
|
||||
Management = 1
|
||||
Auto4 = 2
|
||||
Auto6 = 3
|
||||
Dhcp4 = 4
|
||||
Dhcp6 = 5
|
||||
|
||||
|
||||
class Interface:
|
||||
def __init__(self, method: IpMethod, rate: Optional[int] = None):
|
||||
self._method: IpMethod
|
||||
|
||||
self._node: Optional[Node] = None
|
||||
self._rate: Optional[int] = None
|
||||
self._bridge: Optional[Bridge] = None
|
||||
|
||||
self._method = method
|
||||
self._rate = rate
|
||||
self._address: ipaddress.ip_address = None
|
||||
|
||||
def get_method(self):
|
||||
return self._method
|
||||
|
||||
def set_node(self, node):
|
||||
self._node = node
|
||||
|
||||
def get_node(self):
|
||||
return self._node
|
||||
|
||||
def set_bridge(self, bridge):
|
||||
self._bridge = bridge
|
||||
|
||||
def get_bridge(self):
|
||||
return self._bridge
|
||||
|
||||
def set_address(self, addr: ipaddress.ip_address):
|
||||
self._address = addr
|
||||
|
||||
def get_address(self) -> ipaddress.ip_address:
|
||||
return self._address
|
||||
|
||||
def get_rate(self) -> Optional[int]:
|
||||
return self._rate
|
||||
|
||||
def set_rate(self, rate: Optional[int]):
|
||||
self._rate = rate
|
||||
|
||||
|
||||
class Bridge:
|
||||
def __init__(self, *interfaces: Interface):
|
||||
self._interfaces: List[Interface] = []
|
||||
self._name: str = ''
|
||||
|
||||
for interface in interfaces:
|
||||
self._interfaces.append(interface)
|
||||
interface.set_bridge(self)
|
||||
|
||||
# Generate a random class c private range by default (10.0.0.0)
|
||||
self._addr: ipaddress.ip_address = None
|
||||
self._network_iterator: iter = None
|
||||
|
||||
self.netmask = 24
|
||||
self.new_network()
|
||||
|
||||
def get_interfaces(self) -> List[Interface]:
|
||||
return self._interfaces
|
||||
|
||||
def set_name(self, name: str):
|
||||
self._name = name
|
||||
|
||||
def get_name(self) -> str:
|
||||
return self._name
|
||||
|
||||
def set_netmask(self, mask: int):
|
||||
self.netmask = mask
|
||||
self._network_iterator = ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False).hosts()
|
||||
|
||||
def get_ip_address(self) -> ipaddress.ip_address:
|
||||
return next(self._network_iterator)
|
||||
|
||||
def get_network(self) -> ipaddress.ip_network:
|
||||
return ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False)
|
||||
|
||||
def get_network_string(self) -> str:
|
||||
return str(ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False))
|
||||
|
||||
def new_network(self):
|
||||
self._addr: ipaddress.ip_address = ipaddress.ip_address('10.0.0.0') + random.randint(0, 16777216)
|
||||
self._network_iterator = ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False).hosts()
|
||||
|
||||
|
||||
class Node:
|
||||
def __init__(self, interfaces: List[Interface], setup_params: Dict = None):
|
||||
self._id: Union[int, None] = None
|
||||
self._interfaces: List[Interface] = interfaces
|
||||
self._interfaces.append(Interface(IpMethod.Management))
|
||||
|
||||
for interface in self._interfaces:
|
||||
interface.set_node(self)
|
||||
|
||||
self.setup_params = {} if setup_params is None else setup_params
|
||||
|
||||
def get_interfaces(self):
|
||||
return self._interfaces
|
||||
|
||||
def set_id(self, new_id):
|
||||
self._id = new_id
|
||||
|
||||
def get_id(self):
|
||||
return self._id
|
||||
|
||||
def get_core_count(self) -> int:
|
||||
return 2
|
||||
|
||||
def get_memory_mb(self) -> int:
|
||||
return 2048
|
||||
|
||||
def get_internet_setup(self) -> Optional[str]:
|
||||
return None
|
||||
|
||||
def get_setup(self) -> Optional[str]:
|
||||
return None
|
||||
|
||||
def ssh(self, *args, **kwargs):
|
||||
raise RuntimeError('ssh not implemented')
|
@ -1,140 +1,50 @@
|
||||
import ipaddress
|
||||
import json
|
||||
import textwrap
|
||||
from enum import Enum
|
||||
import random
|
||||
from typing import List, Optional, Union, Dict
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
class IpMethod(Enum):
|
||||
Manual = 0
|
||||
Management = 1
|
||||
Auto4 = 2
|
||||
Auto6 = 3
|
||||
Dhcp4 = 4
|
||||
Dhcp6 = 5
|
||||
|
||||
|
||||
class Interface:
|
||||
def __init__(self, method: IpMethod, rate: Optional[int] = None):
|
||||
self._method: IpMethod
|
||||
|
||||
self._node: Optional[Node] = None
|
||||
self._rate: Optional[int] = None
|
||||
self._bridge: Optional[Bridge] = None
|
||||
|
||||
self._method = method
|
||||
self._rate = rate
|
||||
self._address: ipaddress.ip_address = None
|
||||
|
||||
def get_method(self):
|
||||
return self._method
|
||||
|
||||
def set_node(self, node):
|
||||
self._node = node
|
||||
|
||||
def get_node(self):
|
||||
return self._node
|
||||
|
||||
def set_bridge(self, bridge):
|
||||
self._bridge = bridge
|
||||
|
||||
def get_bridge(self):
|
||||
return self._bridge
|
||||
|
||||
def set_address(self, addr: ipaddress.ip_address):
|
||||
self._address = addr
|
||||
|
||||
def get_address(self) -> ipaddress.ip_address:
|
||||
return self._address
|
||||
|
||||
def get_rate(self) -> Optional[int]:
|
||||
return self._rate
|
||||
|
||||
def set_rate(self, rate: Optional[int]):
|
||||
self._rate = rate
|
||||
|
||||
|
||||
class Bridge:
|
||||
def __init__(self, *interfaces: Interface):
|
||||
self._interfaces: List[Interface] = []
|
||||
self._name: str = ''
|
||||
|
||||
for interface in interfaces:
|
||||
self._interfaces.append(interface)
|
||||
interface.set_bridge(self)
|
||||
|
||||
# Generate a random class c private range by default (10.0.0.0)
|
||||
self.netmask = 24
|
||||
self._addr: ipaddress.ip_address = ipaddress.ip_address('10.0.0.0') + random.randint(0, 16777216)
|
||||
self._network_iterator = ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False).hosts()
|
||||
|
||||
def get_interfaces(self) -> List[Interface]:
|
||||
return self._interfaces
|
||||
|
||||
def set_name(self, name: str):
|
||||
self._name = name
|
||||
|
||||
def get_name(self) -> str:
|
||||
return self._name
|
||||
|
||||
def set_netmask(self, mask: int):
|
||||
self.netmask = mask
|
||||
self._network_iterator = ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False).hosts()
|
||||
|
||||
def get_ip_address(self) -> ipaddress.ip_address:
|
||||
return next(self._network_iterator)
|
||||
|
||||
def get_network(self) -> str:
|
||||
return str(ipaddress.ip_network('{}/{}'.format(self._addr, self.netmask), False))
|
||||
|
||||
|
||||
class Node:
|
||||
def __init__(self, interfaces: List[Interface], setup_params: Dict = None):
|
||||
self._id: Union[int, None] = None
|
||||
self._interfaces: List[Interface] = interfaces
|
||||
self._interfaces.append(Interface(IpMethod.Management))
|
||||
|
||||
for interface in self._interfaces:
|
||||
interface.set_node(self)
|
||||
|
||||
self.setup_params = {} if setup_params is None else setup_params
|
||||
|
||||
def get_interfaces(self):
|
||||
return self._interfaces
|
||||
|
||||
def set_id(self, new_id):
|
||||
self._id = new_id
|
||||
|
||||
def get_id(self):
|
||||
return self._id
|
||||
|
||||
def get_core_count(self) -> int:
|
||||
return 2
|
||||
|
||||
def get_memory_mb(self) -> int:
|
||||
return 2048
|
||||
|
||||
def get_internet_setup(self) -> Optional[str]:
|
||||
return None
|
||||
|
||||
def get_setup(self) -> Optional[str]:
|
||||
return None
|
||||
|
||||
def ssh(self, *args, **kwargs):
|
||||
raise RuntimeError('ssh not implemented')
|
||||
from structure import IpMethod, Interface, Bridge, Node
|
||||
|
||||
|
||||
class SpeedTestServer(Node):
|
||||
def client(self, server: Interface):
|
||||
pass
|
||||
def __init__(self, clone_interface: Interface = None, **kwargs):
|
||||
super().__init__([Interface(IpMethod.Manual)], **kwargs)
|
||||
|
||||
# Entry method for running the serve with `with speedtest:`
|
||||
def __enter__(self):
|
||||
pass
|
||||
self.clone_interface = clone_interface
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
pass
|
||||
def get_internet_setup(self) -> Optional[str]:
|
||||
return textwrap.dedent('''
|
||||
cloud-init status --wait || cloud-init status --long
|
||||
sleep 2
|
||||
sudo apt-get install -y iperf3
|
||||
''')
|
||||
|
||||
def get_setup(self) -> Optional[str]:
|
||||
if self.clone_interface is None:
|
||||
return None
|
||||
|
||||
self.get_interfaces()[0].set_address(self.clone_interface.get_address())
|
||||
return textwrap.dedent('''
|
||||
set -e
|
||||
|
||||
sudo ip addr flush dev eth0
|
||||
sudo ip addr add {} dev eth0
|
||||
sudo ip route add 192.168.1.1 dev eth0
|
||||
sudo ip route add default via 192.168.1.1 dev eth0
|
||||
''').format(self.clone_interface.get_address())
|
||||
|
||||
def server(self):
|
||||
self.ssh('iperf3 -s -1 -D', error_stdout=True, error_stderr=True)
|
||||
|
||||
def client(self, target, time=30, interval_size=2.0):
|
||||
if isinstance(target, SpeedTestServer):
|
||||
target = target.get_interfaces()[0].get_address()
|
||||
|
||||
command = 'iperf3 -c {target} -t {time} -O 6 -i {interval_size} -J'.format(
|
||||
target=target,
|
||||
time=time,
|
||||
interval_size=interval_size,
|
||||
)
|
||||
return self.ssh(command, error_stdout=True, error_stderr=True, return_stdout=True)
|
||||
|
||||
|
||||
class RemotePortal(Node):
|
||||
@ -150,25 +60,18 @@ class RemotePortal(Node):
|
||||
return textwrap.dedent('''
|
||||
set -e
|
||||
|
||||
wget -q http://10.20.0.11/minio-client
|
||||
chmod +x minio-client
|
||||
|
||||
./minio-client alias set s3 http://10.20.0.25:3900 {access_key} {secret_key} || \
|
||||
./minio-client alias set s3 s3.us-west-001.backblazeb2.com {access_key} {secret_key}
|
||||
./minio-client cp s3/dissertation/binaries/debian/{branch} mpbl3p
|
||||
|
||||
wget -q https://f001.backblazeb2.com/file/dissertation/binaries/debian/{branch} -O mpbl3p
|
||||
chmod +x mpbl3p
|
||||
|
||||
cloud-init status --wait || cloud-init status --long
|
||||
sudo apt-get install -y iperf3
|
||||
''').format(**self.setup_params)
|
||||
|
||||
def get_setup(self) -> Optional[str]:
|
||||
return textwrap.dedent('''
|
||||
set -e
|
||||
|
||||
sudo sysctl -w net.ipv4.conf.all.arp_announce=1
|
||||
sudo sysctl -w net.ipv4.conf.all.arp_ignore=2
|
||||
sudo sysctl -w net.ipv4.ip_forward=1
|
||||
sudo sysctl -w net.ipv4.conf.eth0.proxy_arp=1
|
||||
|
||||
cat << EOF > config.ini
|
||||
[Host]
|
||||
@ -184,24 +87,29 @@ class RemotePortal(Node):
|
||||
|
||||
(nohup sudo ./mpbl3p > mpbl3p.log 2>&1 & echo $! > mpbl3p.pid)
|
||||
|
||||
sleep 1
|
||||
sudo ip link set up nc0
|
||||
sudo ip addr add 172.19.152.2/31 dev nc0
|
||||
sleep 10
|
||||
|
||||
ps $(cat mpbl3p.pid)
|
||||
ps $(cat mpbl3p.pid) || cat mpbl3p.log
|
||||
|
||||
sudo ip addr add 172.19.152.2/31 dev nc0
|
||||
sudo ip link set up nc0
|
||||
|
||||
sudo ip rule add from all table local priority 20
|
||||
sudo ip rule del priority 0
|
||||
|
||||
sudo ip rule add to {local_host} dport 1234 table local priority 9
|
||||
|
||||
sudo ip route flush 10
|
||||
sudo ip route add table 10 to {local_host} via 172.19.152.3 dev nc0
|
||||
sudo ip rule add to {local_host} table 10 priority 10
|
||||
|
||||
ping -W 0.1 -c 1 172.19.152.3
|
||||
ps $(cat mpbl3p.pid) || cat mpbl3p.log
|
||||
''').format(
|
||||
local_host=self.get_interfaces()[0].get_address(),
|
||||
**self.setup_params,
|
||||
)
|
||||
|
||||
def speedtest_server(self):
|
||||
self.ssh('iperf3 -s -1 -D', error_stdout=True, error_stderr=True)
|
||||
|
||||
def speedtest_client(self, target, time=30):
|
||||
command = 'iperf3 -c {target} -t {time} -O 5 -J'.format(target=target, time=time)
|
||||
out = self.ssh(command, error_stdout=True, error_stderr=True, return_stdout=True)
|
||||
return json.loads(out)
|
||||
|
||||
|
||||
class LocalPortal(Node):
|
||||
def __init__(self, wan_interfaces: List[Interface], child: Optional[Node], **kwargs):
|
||||
@ -221,17 +129,10 @@ class LocalPortal(Node):
|
||||
return textwrap.dedent('''
|
||||
set -e
|
||||
|
||||
wget -q http://10.20.0.11/minio-client
|
||||
chmod +x minio-client
|
||||
|
||||
./minio-client alias set s3 http://10.20.0.25:3900 {access_key} {secret_key} || \
|
||||
./minio-client alias set s3 s3.us-west-001.backblazeb2.com {access_key} {secret_key}
|
||||
./minio-client cp s3/dissertation/binaries/debian/{branch} mpbl3p
|
||||
|
||||
wget -q https://f001.backblazeb2.com/file/dissertation/binaries/debian/{branch} -O mpbl3p
|
||||
chmod +x mpbl3p
|
||||
|
||||
cloud-init status --wait || cloud-init status --long
|
||||
sudo apt-get install -y iperf3
|
||||
''').format(**self.setup_params)
|
||||
|
||||
def get_setup(self) -> str:
|
||||
@ -249,7 +150,7 @@ class LocalPortal(Node):
|
||||
peers = '\n\n'.join([peer_string.format(
|
||||
local_host=x.get_address(),
|
||||
remote_host=self.remote_portal.get_interfaces()[0].get_address(),
|
||||
) for x in self.get_interfaces()[:-1]])
|
||||
) for x in self.get_interfaces()[:-2]])
|
||||
|
||||
policy_routing_string = textwrap.dedent('''
|
||||
sudo ip route flush {table_number}
|
||||
@ -258,17 +159,22 @@ class LocalPortal(Node):
|
||||
''')
|
||||
|
||||
policy_routing = '\n\n'.join([policy_routing_string.format(
|
||||
table_number=i+10,
|
||||
table_number=i + 10,
|
||||
device='eth{}'.format(i),
|
||||
network=iface.get_bridge().get_network(),
|
||||
network=iface.get_bridge().get_network_string(),
|
||||
local_address=iface.get_address(),
|
||||
) for i, iface in enumerate(self.get_interfaces()[:-1])])
|
||||
) for i, iface in enumerate(self.get_interfaces()[:-2])])
|
||||
|
||||
return textwrap.dedent('''
|
||||
set -e
|
||||
|
||||
sudo sysctl -w net.ipv4.conf.all.arp_announce=1
|
||||
sudo sysctl -w net.ipv4.conf.all.arp_ignore=2
|
||||
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
|
||||
|
||||
sudo sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
sudo ip addr flush dev {local_interface}
|
||||
sudo ip addr add 192.168.1.1 dev {local_interface}
|
||||
|
||||
{policy_routing}
|
||||
|
||||
@ -281,17 +187,27 @@ class LocalPortal(Node):
|
||||
|
||||
(nohup sudo ./mpbl3p > mpbl3p.log 2>&1 & echo $! > mpbl3p.pid)
|
||||
|
||||
sleep 1
|
||||
sudo ip link set up nc0
|
||||
sleep 10
|
||||
|
||||
ps $(cat mpbl3p.pid) || cat mpbl3p.log
|
||||
|
||||
sudo ip addr add 172.19.152.3/31 dev nc0
|
||||
sudo ip link set up nc0
|
||||
|
||||
ps $(cat mpbl3p.pid)
|
||||
''').format(**self.setup_params, peers=peers, policy_routing=policy_routing)
|
||||
sudo ip route flush 18
|
||||
sudo ip route add table 18 default via 172.19.152.2 dev nc0
|
||||
sudo ip rule add from {remote_host} iif {local_interface} table 18 priority 18
|
||||
|
||||
def speedtest_server(self):
|
||||
self.ssh('iperf3 -s -1 -D', error_stdout=True, error_stderr=True)
|
||||
sudo ip route flush 19
|
||||
sudo ip route add to {remote_host} dev {local_interface} table 19
|
||||
sudo ip rule add to {remote_host} table 19 priority 19
|
||||
|
||||
def speedtest_client(self, target, time=30):
|
||||
command = 'iperf3 -c {target} -t {time} -O 5 -J'.format(target=target, time=time)
|
||||
out = self.ssh(command, error_stdout=True, error_stderr=True, return_stdout=True)
|
||||
return json.loads(out)
|
||||
ping -W 0.1 -c 1 172.19.152.2
|
||||
ps $(cat mpbl3p.pid) || cat mpbl3p.log
|
||||
''').format(
|
||||
**self.setup_params,
|
||||
peers=peers,
|
||||
policy_routing=policy_routing,
|
||||
remote_host=self.remote_portal.get_interfaces()[0].get_address(),
|
||||
local_interface='eth{}'.format(len(self.get_interfaces()) - 2),
|
||||
)
|
||||
|
137
structure/tests.py
Normal file
137
structure/tests.py
Normal file
@ -0,0 +1,137 @@
|
||||
import json
|
||||
from typing import List, Dict, Tuple
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
def repeat_until_satisfied(reducer, satisfied, initial=None, max_attempts=100, max_failures=3):
|
||||
val = initial
|
||||
|
||||
for i in range(max_attempts):
|
||||
for j in range(max_failures):
|
||||
try:
|
||||
val = reducer(val)
|
||||
break
|
||||
except Exception as e:
|
||||
print('failed with {}'.format(e))
|
||||
if j == max_failures - 1:
|
||||
raise e
|
||||
|
||||
if satisfied(val):
|
||||
return val
|
||||
|
||||
raise RuntimeError('too many attempts')
|
||||
|
||||
|
||||
class StandardTest:
|
||||
def __init__(
|
||||
self,
|
||||
rates: List[int],
|
||||
events: Dict[float, Tuple[int, int]] = None,
|
||||
duration: int = 10,
|
||||
|
||||
interval_variation_target: float = np.inf,
|
||||
bandwidth_variation_target: float = np.inf,
|
||||
max_failures: int = 3,
|
||||
max_attempts: int = 60,
|
||||
):
|
||||
self.rates = rates
|
||||
self.events = events if events is not None else dict()
|
||||
self.duration = duration
|
||||
|
||||
self.interval_variation_target = interval_variation_target
|
||||
self.bandwidth_variation_target = bandwidth_variation_target
|
||||
self.max_failures = max_failures
|
||||
self.max_attempts = max_attempts
|
||||
|
||||
def name(self) -> str:
|
||||
name_builder = ['R{}-{}'.format(*y) for y in enumerate(self.rates)]
|
||||
name_builder += ['E{}R{}-{}'.format(x, *y) for (x, y) in self.events.items()]
|
||||
name_builder.append('T{}'.format(self.duration))
|
||||
return ''.join(name_builder)
|
||||
|
||||
|
||||
class DirectTest(StandardTest):
|
||||
def __init__(self, rate: int, **kwargs):
|
||||
super().__init__([rate], **kwargs)
|
||||
|
||||
def name(self) -> str:
|
||||
return 'D{}'.format(super().name())
|
||||
|
||||
|
||||
class IperfResult:
|
||||
def __init__(self, test: StandardTest, iperf: str, interval_size=2.0):
|
||||
self.test = test
|
||||
|
||||
self.interval_size = interval_size
|
||||
|
||||
# list containing an exact time and a value
|
||||
self.interval_data: List[Tuple[float, float]] = []
|
||||
|
||||
# list containing the overall data transferred and the time taken
|
||||
self.bandwidth_data: List[float] = []
|
||||
|
||||
self.num_tests = 0
|
||||
self.add_results(iperf)
|
||||
|
||||
def add_results(self, iperf: str):
|
||||
data = json.loads(iperf)
|
||||
|
||||
# grab the overall bandwidth
|
||||
self.bandwidth_data.append(data['end']['sum_sent']['bits_per_second'])
|
||||
|
||||
# grab the sum data of all non omitted intervals, excluding any that are smaller than expected
|
||||
intervals = [
|
||||
x['sum'] for x in data['intervals'] if
|
||||
(not x['sum']['omitted']) and (x['sum']['end'] - x['sum']['start'] > self.interval_size / 2)
|
||||
]
|
||||
|
||||
for (time, result) in zip(
|
||||
[((x['start'] + x['end']) / 2) for x in intervals],
|
||||
[x['bits_per_second'] for x in intervals],
|
||||
):
|
||||
self.interval_data.append((time, result))
|
||||
|
||||
self.num_tests += 1
|
||||
|
||||
def bins(self) -> List[List[Tuple[float, float]]]:
|
||||
bins: List[List[Tuple[float, float]]] = [[] for _ in np.arange(0, self.test.duration, self.interval_size)]
|
||||
|
||||
for time, result in self.interval_data:
|
||||
index = int(np.round((time - self.interval_size / 2) / self.interval_size))
|
||||
bins[index].append((time, result))
|
||||
|
||||
return bins
|
||||
|
||||
def interval_means(self) -> Dict[float, float]:
|
||||
bins = self.bins()
|
||||
means = [np.mean(x, axis=0)[1] for x in bins]
|
||||
times = [i + self.interval_size / 2 for i in np.arange(0, self.test.duration, self.interval_size)]
|
||||
return dict(zip(times, means))
|
||||
|
||||
def interval_standard_deviations(self) -> Dict[float, float]:
|
||||
bins = self.bins()
|
||||
stds = [np.std(x, axis=0)[1] for x in bins]
|
||||
times = [i + self.interval_size / 2 for i in np.arange(0, self.test.duration, self.interval_size)]
|
||||
return dict(zip(times, stds))
|
||||
|
||||
def interval_coefficient_variances(self) -> Dict[float, float]:
|
||||
stds = self.interval_standard_deviations()
|
||||
means = self.interval_means()
|
||||
|
||||
return {k: stds[k] / means[k] for k in stds.keys()}
|
||||
|
||||
def interval_time_ranges(self) -> Dict[float, Tuple[float, float]]:
|
||||
bins = self.bins()
|
||||
times = [i + self.interval_size / 2 for i in np.arange(0, self.test.duration, self.interval_size)]
|
||||
ranges = [(-np.min(x, axis=0)[0] + time, np.max(x, axis=0)[0] - time) for (x, time) in zip(bins, times)]
|
||||
return dict(zip(times, ranges))
|
||||
|
||||
def bandwidth_mean(self):
|
||||
return np.mean(self.bandwidth_data)
|
||||
|
||||
def bandwidth_standard_deviation(self):
|
||||
return np.std(self.bandwidth_data)
|
||||
|
||||
def bandwidth_coefficient_variance(self):
|
||||
return self.bandwidth_standard_deviation() / self.bandwidth_mean()
|
Loading…
Reference in New Issue
Block a user