bb118b9d13
This is related VMTasks.*runcommand* workloads which can use standard shell script "instance_test.sh". In some rare cases (like [1]) it is possible that wide-used executable is not available on the VM instance. The result is confusing error message from shell interpreter which obstructs understanding what is actually wrong with the scenario (nothing is wrong actually with the scenario, but the instance). This patch adds a small piece of code to script instance_test.sh which checks availability of all used executable commands and outputs clear error message if some command is missed. [1] https://bugs.launchpad.net/rally/+bug/1613144 Change-Id: I63db699b053c16dce14df919f72579af2f66fa3e
108 lines
2.7 KiB
Bash
108 lines
2.7 KiB
Bash
#!/bin/sh
|
|
# Load server and output JSON results ready to be processed
|
|
# by Rally scenario
|
|
|
|
for ex in awk top grep free tr df dc dd gzip
|
|
do
|
|
if ! type ${ex} >/dev/null
|
|
then
|
|
echo "Executable is required by script but not available on a server: ${ex}" >&2
|
|
return 1
|
|
fi
|
|
done
|
|
|
|
get_used_cpu_percent() {
|
|
echo 100 $(top -b -n 1 | grep -i CPU | head -n 1 | awk '{print $8}' | tr -d %) - p | dc
|
|
}
|
|
|
|
get_used_ram_percent() {
|
|
local total=$(free | grep Mem: | awk '{print $2}')
|
|
local used=$(free | grep -- -/+\ buffers | awk '{print $3}')
|
|
echo ${used} 100 \* ${total} / p | dc
|
|
}
|
|
|
|
get_used_disk_percent() {
|
|
df -P / | grep -v Filesystem | awk '{print $5}' | tr -d %
|
|
}
|
|
|
|
get_seconds() {
|
|
(time -p ${1}) 2>&1 | awk '/real/{print $2}'
|
|
}
|
|
|
|
complete_load() {
|
|
local script_file=${LOAD_SCRIPT_FILE:-/tmp/load.sh}
|
|
local stop_file=${LOAD_STOP_FILE:-/tmp/load.stop}
|
|
local processes_num=${LOAD_PROCESSES_COUNT:-20}
|
|
local size=${LOAD_SIZE_MB:-5}
|
|
|
|
cat << EOF > ${script_file}
|
|
until test -e ${stop_file}
|
|
do dd if=/dev/urandom bs=1M count=${size} 2>/dev/null | gzip >/dev/null ; done
|
|
EOF
|
|
|
|
local sep
|
|
local cpu
|
|
local ram
|
|
local dis
|
|
rm -f ${stop_file}
|
|
for i in $(seq ${processes_num})
|
|
do
|
|
i=$((i-1))
|
|
sh ${script_file} &
|
|
cpu="${cpu}${sep}[${i}, $(get_used_cpu_percent)]"
|
|
ram="${ram}${sep}[${i}, $(get_used_ram_percent)]"
|
|
dis="${dis}${sep}[${i}, $(get_used_disk_percent)]"
|
|
sep=", "
|
|
done
|
|
> ${stop_file}
|
|
cat << EOF
|
|
{
|
|
"title": "Generate load by spawning processes",
|
|
"description": "Each process runs gzip for ${size}M urandom data in a loop",
|
|
"chart_plugin": "Lines",
|
|
"axis_label": "Number of processes",
|
|
"label": "Usage, %",
|
|
"data": [
|
|
["CPU", [${cpu}]],
|
|
["Memory", [${ram}]],
|
|
["Disk", [${dis}]]]
|
|
}
|
|
EOF
|
|
}
|
|
|
|
additive_dd() {
|
|
local c=${1:-50} # Megabytes
|
|
local file=/tmp/dd_test.img
|
|
local write=$(get_seconds "dd if=/dev/urandom of=${file} bs=1M count=${c}")
|
|
local read=$(get_seconds "dd if=${file} of=/dev/null bs=1M count=${c}")
|
|
local gzip=$(get_seconds "gzip ${file}")
|
|
rm ${file}.gz
|
|
cat << EOF
|
|
{
|
|
"title": "Write, read and gzip file",
|
|
"description": "Using file '${file}', size ${c}Mb.",
|
|
"chart_plugin": "StackedArea",
|
|
"data": [
|
|
["write_${c}M", ${write}],
|
|
["read_${c}M", ${read}],
|
|
["gzip_${c}M", ${gzip}]]
|
|
},
|
|
{
|
|
"title": "Statistics for write/read/gzip",
|
|
"chart_plugin": "StatsTable",
|
|
"data": [
|
|
["write_${c}M", ${write}],
|
|
["read_${c}M", ${read}],
|
|
["gzip_${c}M", ${gzip}]]
|
|
}
|
|
|
|
EOF
|
|
}
|
|
|
|
cat << EOF
|
|
{
|
|
"additive": [$(additive_dd)],
|
|
"complete": [$(complete_load)]
|
|
}
|
|
EOF
|