mirror of
https://github.com/clearlinux/cloud-native-setup.git
synced 2026-08-19 05:27:26 +00:00
9510b068e0
If the cpu-load function is enabled, save its config settings into the JSON results file. This required a little bit of re-sequencing of the json library calls, to ensure we did the init of the JSON early enough, but not more than once. Signed-off-by: Graham Whaley <graham.whaley@intel.com>
105 lines
3.2 KiB
Bash
105 lines
3.2 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2019 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Helper routines for setting up a constant CPU load on the cluster/nodes
|
|
|
|
CPULOAD_DIR=${THIS_FILE%/*}
|
|
|
|
# Default to testing all cores
|
|
SMF_CPU_LOAD_NODES_NCPU=${SMF_CPU_LOAD_NODES_NCPU:-0}
|
|
# Default to 100% load (yes, this might kill your node)
|
|
SMF_CPU_LOAD_NODES_PERCENT=${SMF_CPU_LOAD_NODES_PERCENT:-}
|
|
# Default to not setting any limits or requests, so no cpuset limiting and
|
|
# no cpu core pinning
|
|
SMF_CPU_LOAD_NODES_LIMIT=${SMF_CPU_LOAD_NODES_LIMIT:-}
|
|
SMF_CPU_LOAD_NODES_REQUEST=${SMF_CPU_LOAD_NODES_REQUEST:-}
|
|
|
|
cpu_load_post_deploy_sleep=${cpu_load_post_deploy_sleep:-30}
|
|
|
|
cpu_per_node_daemonset=cpu-load
|
|
clean_up_cpu_per_node=false
|
|
|
|
# Use a DaemonSet to place one cpu stressor on each node.
|
|
cpu_per_node_init() {
|
|
info "Generating per-node CPU load daemonset"
|
|
|
|
local ds_template=${CPULOAD_DIR}/cpu_load_daemonset.yaml.in
|
|
local ds_yaml=${ds_template%\.in}
|
|
|
|
# Grab a copy of the template
|
|
cp -f ${ds_template} ${ds_yaml}
|
|
|
|
# If a setting is not used (defined), then delete its relevant
|
|
# lines from the YAML. Note, the YAML is constructed when necessary
|
|
# with comments on the correct lines to ensure all necessary lines are
|
|
# deleted
|
|
if [ -z "$SMF_CPU_LOAD_NODES_NCPU" ]; then
|
|
sed -i '/CPU_NCPU/d' ${ds_yaml}
|
|
fi
|
|
|
|
if [ -z "${SMF_CPU_LOAD_NODES_PERCENT}" ]; then
|
|
sed -i '/CPU_PERCENT/d' ${ds_yaml}
|
|
fi
|
|
|
|
if [ -z "${SMF_CPU_LOAD_NODES_LIMIT}" ]; then
|
|
sed -i '/CPU_LIMIT/d' ${ds_yaml}
|
|
fi
|
|
|
|
if [ -z "${SMF_CPU_LOAD_NODES_REQUEST}" ]; then
|
|
sed -i '/CPU_REQUEST/d' ${ds_yaml}
|
|
fi
|
|
|
|
# And then finally replace all the remaining defined parts with the
|
|
# real values.
|
|
sed -i \
|
|
-e "s|@CPU_NCPU@|${SMF_CPU_LOAD_NODES_NCPU}|g" \
|
|
-e "s|@CPU_PERCENT@|${SMF_CPU_LOAD_NODES_PERCENT}|g" \
|
|
-e "s|@CPU_LIMIT@|${SMF_CPU_LOAD_NODES_LIMIT}|g" \
|
|
-e "s|@CPU_REQUEST@|${SMF_CPU_LOAD_NODES_REQUEST}|g" \
|
|
${ds_yaml}
|
|
|
|
# Launch the daemonset...
|
|
info "Deploying cpu-load-per-node daemonset"
|
|
kubectl apply -f ${ds_yaml}
|
|
kubectl rollout status --timeout=${wait_time}s daemonset/${cpu_per_node_daemonset}
|
|
clean_up_cpu_per_node=yes
|
|
info "cpu-load-per-node daemonset Deployed"
|
|
if [ -n "$cpu_load_post_deploy_sleep" ]; then
|
|
info "Sleeping ${cpu_load_post_deploy_sleep}s for cpu-load to settle"
|
|
sleep ${cpu_load_post_deploy_sleep}
|
|
fi
|
|
|
|
# And store off our config into the JSON results
|
|
metrics_json_start_array
|
|
local json="$(cat << EOF
|
|
{
|
|
"LOAD_NODES_NCPU": "${SMF_CPU_LOAD_NODES_NCPU}",
|
|
"LOAD_NODES_PERCENT": "${SMF_CPU_LOAD_NODES_PERCENT}",
|
|
"LOAD_NODES_LIMIT": "${SMF_CPU_LOAD_NODES_LIMIT}",
|
|
"LOAD_NODES_REQUEST": "${SMF_CPU_LOAD_NODES_REQUEST}"
|
|
}
|
|
EOF
|
|
)"
|
|
metrics_json_add_array_element "$json"
|
|
metrics_json_end_array "cpu-load"
|
|
}
|
|
|
|
cpu_load_init() {
|
|
info "Check if we need CPU load generators..."
|
|
# This is defaulted of off (not defined), unless the high level test requests it.
|
|
if [ -n "$SMF_CPU_LOAD_NODES" ]; then
|
|
info "Initialising per-node CPU load"
|
|
cpu_per_node_init
|
|
fi
|
|
}
|
|
|
|
cpu_load_shutdown() {
|
|
if [ "$clean_up_cpu_per_node" = "yes" ]; then
|
|
info "Cleaning up cpu per node load daemonset"
|
|
kubectl delete daemonset --wait=true --timeout=${delete_wait_time}s "${cpu_per_node_daemonset}" || true
|
|
fi
|
|
}
|