diff --git a/perf/benchmark/configs/istio/ext_authz/installation.yaml b/perf/benchmark/configs/istio/ext_authz/installation.yaml index 3e48963962..8be2d7521d 100644 --- a/perf/benchmark/configs/istio/ext_authz/installation.yaml +++ b/perf/benchmark/configs/istio/ext_authz/installation.yaml @@ -19,4 +19,4 @@ spec: telemetry: enabled: true v2: - enabled: true \ No newline at end of file + enabled: true diff --git a/perf/benchmark/graph_plotter/graph_plotter.py b/perf/benchmark/graph_plotter/graph_plotter.py index b8f2d01d7c..786edd7b9f 100755 --- a/perf/benchmark/graph_plotter/graph_plotter.py +++ b/perf/benchmark/graph_plotter/graph_plotter.py @@ -29,6 +29,9 @@ def plotter(args): df = pd.read_csv(args.csv_filepath) telemetry_modes_y_data = {} + if not args.telemetry_modes: + args.telemetry_modes = df["Labels"].unique() + metric_name = get_metric_name(args) constructed_query_str = get_constructed_query_str(args) @@ -41,6 +44,8 @@ def plotter(args): fig = plt.figure(figsize=(1138 / dpi, 871 / dpi), dpi=dpi) ax = fig.add_subplot(111) ax.set_ylim(0, 1.0) + if args.title: + ax.set_title(args.title) for key, val in telemetry_modes_y_data.items(): plot_key = key match key: @@ -107,15 +112,15 @@ def get_data_helper(df, query_list, query_str, telemetry_mode, metric_name): try: data[metric_name].head().empty except KeyError as e: - y_series_data.append(None) + y_series_data.append(0) else: if not data[metric_name].head().empty: if metric_name.startswith('cpu') or metric_name.startswith('mem'): y_series_data.append(data[metric_name].head(1).values[0]) else: - y_series_data.append(data[metric_name].head(1).values[0] / data["ActualQPS"].head(1).values[0]) + y_series_data.append(data[metric_name].head(1).values[0] / 1000) else: - y_series_data.append(None) + y_series_data.append(0) return y_series_data @@ -174,7 +179,8 @@ def get_parser(): parser.add_argument( "--query_str", help="Specify the qps or conn query_str that will be used to query your y-axis data based on the CSV file." - "For example: conn_query_str=ActualQPS==1000, qps_query_str=NumThreads==16." + "For example: conn_query_str=ActualQPS==1000, qps_query_str=NumThreads==16.", + default="" ) parser.add_argument( "--csv_filepath", @@ -182,7 +188,11 @@ def get_parser(): ) parser.add_argument( "--graph_title", - help="The graph title." + help="Output path." + ) + parser.add_argument( + "--title", + help="Visual title of graph." ) return parser diff --git a/perf/benchmark/runner/fortio.py b/perf/benchmark/runner/fortio.py index a35bb40f60..4e66ec1be3 100644 --- a/perf/benchmark/runner/fortio.py +++ b/perf/benchmark/runner/fortio.py @@ -177,7 +177,7 @@ def sync_fortio(url, table, selector=None, promUrl="", csv=None, csv_output="", if gd.get('errorPercent', 0) > 10: print("... Run resulted in", gd['errorPercent'], "% errors") continue - min_duration = METRICS_START_SKIP_DURATION + METRICS_END_SKIP_DURATION + min_duration = 5 # METRICS_START_SKIP_DURATION + METRICS_END_SKIP_DURATION if min_duration > gd['ActualDuration']: print("... {} duration={}s is less than minimum {}s".format( gd["Labels"], gd['ActualDuration'], min_duration)) diff --git a/perf/benchmark/setup_test.sh b/perf/benchmark/setup_test.sh index 42621a11ce..ee20656678 100755 --- a/perf/benchmark/setup_test.sh +++ b/perf/benchmark/setup_test.sh @@ -33,6 +33,7 @@ RBAC_ENABLED="false" SERVER_REPLICA="${SERVER_REPLICA:-1}" CLIENT_REPLICA="${CLIENT_REPLICA:-1}" ISTIO_INJECT="${ISTIO_INJECT:-false}" +AMBIENT_ENABLED="${AMBIENT_ENABLED:-false}" LINKERD_INJECT="${LINKERD_INJECT:-disabled}" INTERCEPTION_MODE="${INTERCEPTION_MODE:-REDIRECT}" FORTIO_SERVER_INGRESS_CERT_ENABLED="${FORTIO_SERVER_INGRESS_CERT_ENABLED:-false}" @@ -55,12 +56,13 @@ function setup_test() { --set rbac.enabled="${RBAC_ENABLED}" \ --set namespace="${NAMESPACE}" \ --set loadGenType="${LOAD_GEN_TYPE}" \ - --set excludeOutboundIPRanges=$(pod_ip_range)\ - --set includeOutboundIPRanges=$(svc_ip_range) \ --set server.replica="${SERVER_REPLICA}" \ --set client.replica="${CLIENT_REPLICA}" \ --set server.inject="${ISTIO_INJECT}" \ --set client.inject="${ISTIO_INJECT}" \ + --set server.waypoint="${WAYPOINT_ENABLED}" \ + --set server.ambient="${AMBIENT_ENABLED}" \ + --set client.ambient="${AMBIENT_ENABLED}" \ --set server.injectL="${LINKERD_INJECT}" \ --set client.injectL="${LINKERD_INJECT}" \ --set domain="${DNS_DOMAIN}" \ @@ -92,6 +94,10 @@ then kubectl label namespace "${NAMESPACE}" istio-injection=enabled --overwrite || true fi +if [[ "$AMBIENT_ENABLED" == "true" ]] +then + kubectl label namespace "${NAMESPACE}" istio.io/dataplane-mode=ambient --overwrite || true +fi if [[ "$LINKERD_INJECT" == "enabled" ]] then kubectl annotate namespace "${NAMESPACE}" linkerd.io/inject=enabled || true diff --git a/perf/benchmark/templates/fortio.yaml b/perf/benchmark/templates/fortio.yaml index 8b33e6aa88..16d03d754a 100644 --- a/perf/benchmark/templates/fortio.yaml +++ b/perf/benchmark/templates/fortio.yaml @@ -20,13 +20,32 @@ spec: kind: ServiceRole name: "{{ $ruleName }}" {{- end }} - {{- define "fortio" }} + +--- +{{- if and .Values.server.waypoint .Values.server.ambient }} +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: {{ $.name }}-wp + labels: + istio.io/waypoint-for: service +spec: + gatewayClassName: istio-waypoint + listeners: + - name: mesh + port: 15008 + protocol: HBONE +{{- end }} --- apiVersion: v1 kind: Service metadata: name: {{ $.name }} +{{- if and .Values.server.waypoint .Values.server.ambient }} + labels: + istio.io/use-waypoint: {{ $.name }}-wp +{{- end }} spec: ports: - name: http-echo @@ -388,6 +407,7 @@ spec: labels: app: {{ $.name }} spec: + terminationGracePeriodSeconds: 0 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: @@ -509,6 +529,9 @@ spec: - /var/lib/fortio/ {{- else }} image: {{ $.Values.fortioImage }} + volumeMounts: + - name: shared-data + mountPath: /var/lib/fortio args: - report - -http-port diff --git a/perf/benchmark/values.yaml b/perf/benchmark/values.yaml index 1f2c5fad69..c1ee53c22f 100644 --- a/perf/benchmark/values.yaml +++ b/perf/benchmark/values.yaml @@ -31,6 +31,8 @@ server: # server overrides #tlsmode: DISABLE tlsmode: ISTIO_MUTUAL expose: false + waypoint: false + ambient: false inject: "false" injectL: "disabled" # "enabled" or "disabled" replica: 1 # default value @@ -39,6 +41,7 @@ client: # client overrides #tlsmode: DISABLE tlsmode: ISTIO_MUTUAL expose: true + ambient: false inject: "false" injectL: "disabled" # "enabled" or "disabled" replica: 1 # default value diff --git a/perf/istio-install/base/templates/prometheus-operator.yaml b/perf/istio-install/base/templates/prometheus-operator.yaml index 12236332e3..1732056e26 100644 --- a/perf/istio-install/base/templates/prometheus-operator.yaml +++ b/perf/istio-install/base/templates/prometheus-operator.yaml @@ -175,4 +175,4 @@ spec: selector: app.kubernetes.io/component: controller app.kubernetes.io/name: prometheus-operator -{{- end }} \ No newline at end of file +{{- end }} diff --git a/perf/istio-install/istioctl_profiles/ambient.yaml b/perf/istio-install/istioctl_profiles/ambient.yaml new file mode 100644 index 0000000000..45d8e445b2 --- /dev/null +++ b/perf/istio-install/istioctl_profiles/ambient.yaml @@ -0,0 +1,4 @@ +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +spec: + profile: ambient