From 64fdb98704e68ec91f4683624872f06037c388ed Mon Sep 17 00:00:00 2001 From: Gabriela Cervantes Date: Wed, 2 Aug 2023 16:46:48 +0000 Subject: [PATCH 1/4] metrics: Add network latency test This PR adds network latency test for kata metrics. Fixes #7526 Signed-off-by: Gabriela Cervantes --- latency_kubernetes/latency-network.sh | 85 +++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 latency_kubernetes/latency-network.sh diff --git a/latency_kubernetes/latency-network.sh b/latency_kubernetes/latency-network.sh new file mode 100755 index 0000000000..19c84ef14e --- /dev/null +++ b/latency_kubernetes/latency-network.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +set -o pipefail + +SCRIPT_PATH=$(dirname "$(readlink -f "$0")") + +source "${SCRIPT_PATH}/../../lib/common.bash" +latency_file=$(mktemp latencyresults.XXXXXXXXXX) +TEST_NAME="${TEST_NAME:-latency}" + +function remove_tmp_file() { + rm -rf "${latency_file}" +} + +trap remove_tmp_file EXIT + +function main() { + init_env + cmds=("bc" "jq") + check_cmds "${cmds[@]}" + + # Check no processes are left behind + check_processes + + wait_time=20 + sleep_time=2 + + # Create server + kubectl create -f "${SCRIPT_PATH}/runtimeclass_workloads/latency-server.yaml" + + # Get the names of the server pod + export server_pod_name="latency-server" + + # Verify the server pod is working + local cmd="kubectl get pod $server_pod_name -o yaml | grep 'phase: Running'" + waitForProcess "$wait_time" "$sleep_time" "$cmd" + + # Create client + kubectl create -f "${SCRIPT_PATH}/runtimeclass_workloads/latency-client.yaml" + + # Get the names of the client pod + export client_pod_name="latency-client" + + # Verify the client pod is working + local cmd="kubectl get pod $client_pod_name -o yaml | grep 'phase: Running'" + waitForProcess "$wait_time" "$sleep_time" "$cmd" + + # Get the ip address of the server pod + export server_ip_add=$(kubectl get pod "$server_pod_name" -o jsonpath='{.status.podIP}') + + # Number of packets (sent) + local number="${number:-30}" + + local client_command="ping -c ${number} ${server_ip_add}" + + kubectl exec "$client_pod_name" -- sh -c "$client_command" > "$latency_file" + + metrics_json_init + + local latency=$(cat $latency_file | grep avg | cut -f2 -d'=' | sed 's/[[:blank:]]//g' | cut -f2 -d'/') + + metrics_json_start_array + + local json="$(cat << EOF + { + "latency": { + "Result" : $latency, + "Units" : "ms" + } + } +EOF +)" + + metrics_json_add_array_element "$json" + metrics_json_end_array "Results" + metrics_json_save + + kubectl delete pod "$client_pod_name" "$server_pod_name" + check_processes +} +main "$@" From 9bb8451df5e278ac31db7ed00156cb77ed9186c8 Mon Sep 17 00:00:00 2001 From: Gabriela Cervantes Date: Wed, 2 Aug 2023 16:50:51 +0000 Subject: [PATCH 2/4] metrics: Add latency client yaml This PR adds latency client yaml for the kubernetes test. Signed-off-by: Gabriela Cervantes --- .../runtimeclass_workloads/latency-client.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 latency_kubernetes/runtimeclass_workloads/latency-client.yaml diff --git a/latency_kubernetes/runtimeclass_workloads/latency-client.yaml b/latency_kubernetes/runtimeclass_workloads/latency-client.yaml new file mode 100644 index 0000000000..8e1f3bd0ea --- /dev/null +++ b/latency_kubernetes/runtimeclass_workloads/latency-client.yaml @@ -0,0 +1,17 @@ +# Copyright (c) 2022-2023 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +apiVersion: v1 +kind: Pod +metadata: + name: latency-client +spec: + terminationGracePeriodSeconds: 0 + runtimeClassName: kata + containers: + - name: client-container + image: quay.io/prometheus/busybox:latest + command: + - sleep + - "180" From 3b45060b6169934943212d399299713b5511f28c Mon Sep 17 00:00:00 2001 From: Gabriela Cervantes Date: Wed, 2 Aug 2023 16:52:17 +0000 Subject: [PATCH 3/4] metrics: Add latency server yaml This PR adds latency server yaml for kubernetes test. Signed-off-by: Gabriela Cervantes --- .../runtimeclass_workloads/latency-server.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 latency_kubernetes/runtimeclass_workloads/latency-server.yaml diff --git a/latency_kubernetes/runtimeclass_workloads/latency-server.yaml b/latency_kubernetes/runtimeclass_workloads/latency-server.yaml new file mode 100644 index 0000000000..ce301f6535 --- /dev/null +++ b/latency_kubernetes/runtimeclass_workloads/latency-server.yaml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022-2023 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +apiVersion: v1 +kind: Pod +metadata: + name: latency-server +spec: + terminationGracePeriodSeconds: 0 + runtimeClassName: kata + containers: + - name: server-container + image: quay.io/prometheus/busybox:latest + command: + - sleep + - "180" From 66db5b53500b5e75be3f25882cd59273f71d0b9a Mon Sep 17 00:00:00 2001 From: Gabriela Cervantes Date: Wed, 2 Aug 2023 16:56:27 +0000 Subject: [PATCH 4/4] metrics: Add latency test to network README This PR adds latency test to network README for kata metrics. Signed-off-by: Gabriela Cervantes --- tests/metrics/network/README.md | 1 + .../metrics/network/latency_kubernetes}/latency-client.yaml | 0 .../metrics/network/latency_kubernetes}/latency-network.sh | 0 .../metrics/network/latency_kubernetes}/latency-server.yaml | 0 4 files changed, 1 insertion(+) rename {latency_kubernetes/runtimeclass_workloads => tests/metrics/network/latency_kubernetes}/latency-client.yaml (100%) rename {latency_kubernetes => tests/metrics/network/latency_kubernetes}/latency-network.sh (100%) rename {latency_kubernetes/runtimeclass_workloads => tests/metrics/network/latency_kubernetes}/latency-server.yaml (100%) diff --git a/tests/metrics/network/README.md b/tests/metrics/network/README.md index c109a68411..05acd4cd67 100644 --- a/tests/metrics/network/README.md +++ b/tests/metrics/network/README.md @@ -10,6 +10,7 @@ bandwidth, jitter, latency and parallel bandwidth. ## Networking tests - `k8s-network-metrics-iperf3.sh` measures bandwidth which is the speed of the data transfer. +- `latency-network.sh` measures network latency. ## Running the tests diff --git a/latency_kubernetes/runtimeclass_workloads/latency-client.yaml b/tests/metrics/network/latency_kubernetes/latency-client.yaml similarity index 100% rename from latency_kubernetes/runtimeclass_workloads/latency-client.yaml rename to tests/metrics/network/latency_kubernetes/latency-client.yaml diff --git a/latency_kubernetes/latency-network.sh b/tests/metrics/network/latency_kubernetes/latency-network.sh similarity index 100% rename from latency_kubernetes/latency-network.sh rename to tests/metrics/network/latency_kubernetes/latency-network.sh diff --git a/latency_kubernetes/runtimeclass_workloads/latency-server.yaml b/tests/metrics/network/latency_kubernetes/latency-server.yaml similarity index 100% rename from latency_kubernetes/runtimeclass_workloads/latency-server.yaml rename to tests/metrics/network/latency_kubernetes/latency-server.yaml