From 2baea981d00f01723f96f9d6669d35c3c6613c81 Mon Sep 17 00:00:00 2001 From: Dave Taht Date: Mon, 17 Mar 2025 19:57:04 -0500 Subject: [PATCH] Add TCP Prague tests Prague vs BBR ought to be interesting. --- flent/tests/4up_squarewave_prague_bbr.conf | 79 +++++++ flent/tests/prague_bbr.conf | 239 +++++++++++++++++++++ flent/tests/prague_cubic_westwood_cdg.conf | 180 ++++++++++++++++ 3 files changed, 498 insertions(+) create mode 100644 flent/tests/4up_squarewave_prague_bbr.conf create mode 100644 flent/tests/prague_bbr.conf create mode 100644 flent/tests/prague_cubic_westwood_cdg.conf diff --git a/flent/tests/4up_squarewave_prague_bbr.conf b/flent/tests/4up_squarewave_prague_bbr.conf new file mode 100644 index 00000000..50267ee4 --- /dev/null +++ b/flent/tests/4up_squarewave_prague_bbr.conf @@ -0,0 +1,79 @@ +## -*- mode: python; coding: utf-8 -*- + +include("netperf_definitions.inc") +DESCRIPTION="Four TCP upload streams; 2nd streams started delayed, Prague vs BBR" +DEFAULTS={'PLOT': 'totals'} +TOTAL_LENGTH=(LENGTH + DELAY*6) + +DATA_SETS = o([ + ('TCP bbr 1', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': +'-M ,64k', 'cong_control': 'bbr', 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP prague 2', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': +'-M ,64k', 'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', +'runner': 'netperf_demo'}), + ('TCP prague 3', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': +'-M ,64k', 'cong_control': 'prague', 'delay': DELAY * 5, 'units': +'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP bbr 4', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': +'-M ,64k', 'cong_control': 'bbr', 'delay': DELAY * 3, 'units': +'Mbits/s', 'runner': 'netperf_demo'}), + ] +) + + +PLOTS = o([ + ('totals', + {'description': 'Bandwidth plot', + 'type': 'timeseries', + 'series': [{'data': 'TCP bbr 1', + 'label': 'BBR 1'}, + {'data': 'TCP prague 2', + 'label': 'Prague 2'}, + {'data': 'TCP prague 3', + 'label': 'Prague 3'}, + {'data': 'TCP bbr 4', + 'label': 'BBR 4'},]} + ), + ('totals_5s', + {'description': 'Bandwidth plot, 5 second smoothed sample size', + 'type': 'timeseries', + 'series': [{'data': 'TCP bbr 1', + 'label': 'BBR 1', + 'smoothing': 5.0/STEP_SIZE}, + {'data': 'TCP prague 2', + 'label': 'Prague 2', + 'smoothing': 5.0/STEP_SIZE}, + {'data': 'TCP prague 3', + 'label': 'Prague 3', + 'smoothing': 5.0/STEP_SIZE}, + {'data': 'TCP bbr 4', + 'label': 'BBR 4', + 'smoothing': 5.0/STEP_SIZE}]}, + ), + ('box_combine', + {'description': 'Summarising combined tests', + 'type': 'box_combine', + 'cutoff': (DELAY,0), + 'group_by': 'series', + 'axis_labels': ['Mean bandwidth (MBits/s)'], + 'series': [{'data': 'TCP bbr 1', + 'label': 'BBR 1', + 'combine_mode': 'mean'}, + {'data': 'TCP prague 2', + 'label': 'Prague 2', + 'combine_mode': 'mean'}, + {'data': 'TCP prague 3', + 'label': 'Prague 3', + 'combine_mode': 'mean'}, + {'data': 'TCP bbr 4', + 'label': 'BBR 4', + 'combine_mode': 'mean'}]}, + ), + ]) + +include("common.inc") diff --git a/flent/tests/prague_bbr.conf b/flent/tests/prague_bbr.conf new file mode 100644 index 00000000..15c2c0e8 --- /dev/null +++ b/flent/tests/prague_bbr.conf @@ -0,0 +1,239 @@ +## -*- mode: python; coding: utf-8 -*- + +## rrul test specification + +include("netperf_definitions.inc") +DESCRIPTION="Prague VS BBR smackdown" +DEFAULTS={'PLOT': "all_scaled"} + +DATA_SETS = o([ + ('TCP upload Prague BE', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', +'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP upload BBR BE', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', +'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP upload Prague CS1', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', +'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP upload BBR CS1', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', + 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': + 'netperf_demo'}), + ('TCP upload avg', + {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], + 'units': 'Mbits/s', + 'runner': 'average',}), + ('TCP upload sum', + {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], + 'units': 'Mbits/s', + 'runner': 'sum',}), + + ('TCP download Prague BE', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', +'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP download BBR BE', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', + 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': + 'netperf_demo'}), + ('TCP download Prague CS1', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', +'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', 'runner': +'netperf_demo'}), + ('TCP download BBR CS1', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', + 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': + 'netperf_demo'}), + ('TCP download avg', + {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], + 'units': 'Mbits/s', + 'runner': 'average',}), + ('TCP download sum', + {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], + 'units': 'Mbits/s', + 'runner': 'sum',}), + + ('Ping (ms) UDP BE', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': + 'CS0,CS0', 'units': 'ms'}), + ('Ping (ms) UDP CS1', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': + 'CS1,CS1', 'units': 'ms'}), + ('Ping (ms) UDP CS6', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': + 'CS6,CS6', 'units': 'ms'}), + ('Ping (ms) ICMP', + {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, + 'host': HOST, 'units': 'ms', 'runner': 'ping'}), + ('Ping (ms) avg', + {'apply_to': [glob("Ping (ms)*")], + 'units': 'ms', + 'runner': 'average',}), + ]) + +PLOTS = o([ + ('download', + {'description': 'Download bandwidth plot', + 'type': 'timeseries', + 'legend_title': 'TCP download', + 'series': [{'data': 'TCP download BBR BE', + 'label': 'BBR BE', + 'linewidth': 2.0}, + {'data': 'TCP download Prague BE', + 'label': 'Prague BE'}, + {'data': 'TCP download BBR CS1', + 'label': 'BBR CS1'}, + {'data': 'TCP download Prague CS1', + 'label': 'Prague CS1'}, + {'data': 'TCP download avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('download_scaled', + {'description': 'Download bandwidth w/axes scaled to remove outliers', + 'parent': 'download', + 'scaling': (5,95)}), + + ('upload', + {'description': 'Upload bandwidth plot', + 'type': 'timeseries', + 'legend_title': 'TCP upload', + 'series': [{'data': 'TCP upload BBR BE', + 'label': 'BBR BE', + 'linewidth': 2.0}, + {'data': 'TCP upload Prague BE', + 'label': 'Prague BE'}, + {'data': 'TCP upload BBR CS1', + 'label': 'BBR CS1'}, + {'data': 'TCP upload Prague CS1', + 'label': 'Prague CS1'}, + {'data': 'TCP upload avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('upload_scaled', + {'description': 'Upload bandwidth w/axes scaled to remove outliers', + 'parent': 'upload', + 'scaling': (5,95)}), + + ('ping', + {'description': 'Ping plot', + 'type': 'timeseries', + 'legend_title': 'Ping (ms)', + 'axis_labels': ['Latency (ms)'], + 'series': [{'data': 'Ping (ms) UDP CS6', + 'label': 'UDP CS6'}, + {'data': 'Ping (ms) UDP CS1', + 'label': 'UDP CS1'}, + {'data': 'Ping (ms) UDP BE', + 'label': 'UDP BE'}, + {'data': 'Ping (ms) ICMP', + 'label': 'ICMP'}, + {'data': 'Ping (ms) avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('ping_scaled', + {'description': 'Ping w/axes scaled to remove outliers', + 'parent': 'ping', + 'scaling': (5,95)}), + + ('ping_cdf', + {'description': 'Ping CDF plot', + 'type': 'cdf', + 'axis_labels': ['Latency (ms)'], + 'parent': 'ping', + 'cutoff': (DELAY,-DELAY)}), + + ('icmp_cdf', + {'description': 'ICMP CDF plot', + 'type': 'cdf', + 'axis_labels': ['Latency (ms)'], + 'series': [{'data': 'Ping (ms) ICMP', + 'label': 'Ping (ms)'}, + ], + 'cutoff': (DELAY,-DELAY)}), + + ('totals', + {'description': 'Total bandwidth and average ping plot', + 'type': 'timeseries', + 'dual_axes': True, + 'axis_labels': [None, 'Latency (ms)'], + 'series': [{'data': 'TCP download sum', + 'label': 'Download', + 'smoothing': 10}, + {'data': 'TCP upload sum', + 'label': 'Upload', + 'smoothing': 10}, + {'data': 'Ping (ms) avg', + 'label': 'Ping (ms)', + 'smoothing': 10, + 'axis': 2}]}), + ('totals_scaled', + {'description': 'Total bandwidth and average ping plot (scaled)', + 'parent': 'totals', + 'scaling': (5,95)}), + + ('all_scaled', + {'description': 'Download, upload, ping (scaled versions)', + 'type': 'meta', + 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), + + ('all', + {'description': 'Download, upload, ping (unscaled versions)', + 'type': 'meta', + 'subplots': ('download', 'upload', 'ping')}), + + ('box_download', + {'description': 'Download bandwidth box plot', + 'parent': 'download', + 'type': 'box'}), + + ('box_upload', + {'description': 'Upload bandwidth box plot', + 'parent': 'upload', + 'type': 'box'}), + + ('box_ping', + {'description': 'Ping box plot', + 'parent': 'ping', + 'type': 'box'}), + + ('box_totals', + {'description': 'Box plot of totals', + 'parent': 'totals', + 'type': 'box',}), + + ('qq_icmp', + {'description': 'Q-Q plot of ICMP pings', + 'type': 'qq', + 'series': [{'data': 'Ping (ms) ICMP', + 'label': 'Latency (ms)'}, + ]}), + + ('qq_download', + {'description': 'Q-Q plot of total download bandwidth', + 'type': 'qq', + 'series': [{'data': 'TCP download sum', + 'label': 'Download (Mbps)'}, + ]}), + + ('qq_upload', + {'description': 'Q-Q plot of total upload bandwidth', + 'type': 'qq', + 'series': [{'data': 'TCP upload sum', + 'label': 'Upload (Mbps)'}, + ]}), + ]) + +include("common.inc") diff --git a/flent/tests/prague_cubic_westwood_cdg.conf b/flent/tests/prague_cubic_westwood_cdg.conf new file mode 100644 index 00000000..ba5ffb3b --- /dev/null +++ b/flent/tests/prague_cubic_westwood_cdg.conf @@ -0,0 +1,180 @@ +## -*- mode: python; coding: utf-8 -*- + +## rrul test specification + +include("netperf_definitions.inc") +DESCRIPTION="Realtime Response Under Load\n(with different congestion control algs)" +DEFAULTS={'PLOT': "all_scaled"} + +DATA_SETS = o([ + ('TCP upload PRAGUE', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': + 'prague', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP upload WESTWOOD', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': + 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP upload CUBIC', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': + 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP upload CDG', + {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': + 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP upload avg', + {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], + 'units': 'Mbits/s', + 'runner': 'average',}), + ('TCP upload sum', + {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], + 'units': 'Mbits/s', + 'runner': 'sum',}), + + ('TCP download PRAGUE', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': + '-M ,64k', 'cong_control': 'prague', 'delay': DELAY, 'units': 'Mbits/s', + 'runner': 'netperf_demo'}), + ('TCP download WESTWOOD', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': + '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY, 'units': + 'Mbits/s', 'runner': 'netperf_demo'}), + ('TCP download CUBIC', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': + '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', + 'runner': 'netperf_demo'}), + ('TCP download CDG', + {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': + '-M ,64k', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', + 'runner': 'netperf_demo'}), + ('TCP download avg', + {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], + 'units': 'Mbits/s', + 'runner': 'average',}), + ('TCP download sum', + {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], + 'units': 'Mbits/s', + 'runner': 'sum',}), + + ('Ping (ms) UDP EF', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': + 'EF,EF', 'units': 'ms'}), + ('Ping (ms) UDP BK', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': + 'CS1,CS1', 'units': 'ms'}), + ('Ping (ms) UDP BE', + {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), + ('Ping (ms) ICMP', + {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, + 'host': HOST, 'units': 'ms', 'runner': 'ping'}), + ('Ping (ms) avg', + {'apply_to': [glob("Ping (ms)*")], + 'units': 'ms', + 'runner': 'average',}), + ]) + +PLOTS = o([ + ('download', + {'description': 'Download bandwidth plot', + 'type': 'timeseries', + 'legend_title': 'TCP download', + 'series': [{'data': 'TCP download PRAGUE', + 'label': 'PRAGUE', + 'linewidth': 2.0}, + {'data': 'TCP download WESTWOOD', + 'label': 'WESTWOOD'}, + {'data': 'TCP download CUBIC', + 'label': 'CUBIC'}, + {'data': 'TCP download CDG', + 'label': 'CDG'}, + {'data': 'TCP download avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('download_scaled', + {'description': 'Download bandwidth w/axes scaled to remove outliers', + 'parent': 'download', + 'scaling': (5,95)}), + + ('upload', + {'description': 'Upload bandwidth plot', + 'type': 'timeseries', + 'legend_title': 'TCP upload', + 'series': [{'data': 'TCP upload PRAGUE', + 'label': 'PRAGUE', + 'linewidth': 2.0}, + {'data': 'TCP upload WESTWOOD', + 'label': 'WESTWOOD'}, + {'data': 'TCP upload CUBIC', + 'label': 'CUBIC'}, + {'data': 'TCP upload CDG', + 'label': 'CDG'}, + {'data': 'TCP upload avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('upload_scaled', + {'description': 'Upload bandwidth w/axes scaled to remove outliers', + 'parent': 'upload', + 'scaling': (5,95)}), + + ('ping', + {'description': 'Ping plot', + 'type': 'timeseries', + 'legend_title': 'Ping (ms)', + 'series': [{'data': 'Ping (ms) UDP EF', + 'label': 'UDP EF'}, + {'data': 'Ping (ms) UDP BK', + 'label': 'UDP BK'}, + {'data': 'Ping (ms) UDP BE', + 'label': 'UDP BE'}, + {'data': 'Ping (ms) ICMP', + 'label': 'ICMP'}, + {'data': 'Ping (ms) avg', + 'label': 'Avg', + 'smoothing': 10, + 'color': 'black', + 'linewidth': 2}]}), + + ('ping_scaled', + {'description': 'Ping w/axes scaled to remove outliers', + 'parent': 'ping', + 'scaling': (5,95)}), + + ('ping_cdf', + {'description': 'Ping CDF plot', + 'type': 'cdf', + 'parent': 'ping', + 'cutoff': (DELAY,-DELAY)}), + + ('totals', + {'description': 'Total bandwidth and average ping plot', + 'type': 'timeseries', + 'dual_axes': True, + 'series': [{'data': 'TCP download sum', + 'label': 'Download', + 'smoothing': 10}, + {'data': 'TCP upload sum', + 'label': 'Upload', + 'smoothing': 10}, + {'data': 'Ping (ms) avg', + 'label': 'Ping (ms)', + 'smoothing': 10, + 'axis': 2}]}), + ('totals_scaled', + {'description': 'Total bandwidth and average ping plot (scaled)', + 'parent': 'totals', + 'scaling': (5,95)}), + + ('all_scaled', + {'description': 'Download, upload, ping (scaled versions)', + 'type': 'meta', + 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), + + ('all', + {'description': 'Download, upload, ping (unscaled versions)', + 'type': 'meta', + 'subplots': ('download', 'upload', 'ping')}), + ]) +include("common.inc")