Merge pull request #8206 from dborquez/memory_footprint_test_removing_trailing_commas_to_make_json_results_file_valid

Memory footprint test removing trailing commas to make json results file valid
This commit is contained in:
David Esparza 2023-10-16 14:31:28 -06:00 committed by GitHub
commit 59e8b1d5a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 30 deletions

View File

@ -38,6 +38,7 @@ global_shim_mem=0
function remove_tmp_file() { function remove_tmp_file() {
rm -rf "${MEM_TMP_FILE}" "${PS_TMP_FILE}" rm -rf "${MEM_TMP_FILE}" "${PS_TMP_FILE}"
clean_env_ctr
} }
trap remove_tmp_file EXIT trap remove_tmp_file EXIT
@ -97,19 +98,22 @@ function get_pss_memory(){
local avg=0 local avg=0
[ -z "${ps}" ] && die "No argument to get_pss_memory()" [ -z "${ps}" ] && die "No argument to get_pss_memory()"
ps="$(readlink -f ${ps})" ps="$(readlink -f ${ps})"
# Save all the processes names # Save all the processes names
# This will be help us to retrieve raw information # This will be help us to retrieve raw information
echo "${ps}" >> "${PS_TMP_FILE}" echo "${ps}" >> "${PS_TMP_FILE}"
data=$(sudo "${SMEM_BIN}" --no-header -P "^${ps}" -c "pss" | sed 's/[[:space:]]//g' | tr '\n' ' ' | sed 's/[[:blank:]]*$//') data="$(sudo "${SMEM_BIN}" --no-header -P "^${ps}" -c "pss" | sed 's/[[:space:]]//g' | tr '\n' ' ' | sed 's/[[:blank:]]*$//')"
# Save all the smem results # Save all the smem results
# This will help us to retrieve raw information # This will help us to retrieve raw information
echo "${data}" >> "${MEM_TMP_FILE}" echo "${data}" >> "${MEM_TMP_FILE}"
for i in ${data[*]}; do arrData=($data)
for i in "${arrData[@]}"; do
if [ ${i} -gt 0 ]; then if [ ${i} -gt 0 ]; then
let "mem_amount+=i" let "mem_amount+=i"
let "count+=1" let "count+=1"
@ -124,7 +128,7 @@ function get_pss_memory(){
if [ "${shim_result_on}" -eq "1" ]; then if [ "${shim_result_on}" -eq "1" ]; then
global_shim_mem="${avg}" global_shim_mem="${avg}"
else else
global_hypervisor_mem="${avg}" global_hypervisor_mem="${avg}"
fi fi
} }
@ -144,13 +148,15 @@ function get_pss_memory_virtiofsd() {
mem_amount=0 mem_amount=0
count=0 count=0
avg=0 avg=0
virtiofsd_path=${1:-} virtiofsd_path=${1:-}
[ -z "${virtiofsd_path}" ] && die "virtiofsd_path not provided" [ -z "${virtiofsd_path}" ] && die "virtiofsd_path not provided"
echo "${virtiofsd_path}" >> "${PS_TMP_FILE}" echo "${virtiofsd_path}" >> "${PS_TMP_FILE}"
virtiofsd_pids=$(ps aux | grep [v]irtiofsd | awk '{print $2}' | head -1)
data=$(sudo smem --no-header -P "^${virtiofsd_path}" -c pid -c "pid pss") virtiofsd_pids="$(ps aux | grep '[v]irtiofsd' | awk '{print $2}' | head -1)"
data="$(sudo smem --no-header -P "^${virtiofsd_path}" -c "pid pss")"
for p in "${virtiofsd_pids}"; do for p in "${virtiofsd_pids}"; do
parent_pid=$(ppid "${p}") parent_pid=$(ppid "${p}")
@ -176,7 +182,6 @@ function get_pss_memory_virtiofsd() {
done done
[ "${count}" -gt 0 ] && global_virtiofsd_mem=$(bc -l <<< "scale=2; ${mem_amount} / ${count}") [ "${count}" -gt 0 ] && global_virtiofsd_mem=$(bc -l <<< "scale=2; ${mem_amount} / ${count}")
} }
function get_individual_memory(){ function get_individual_memory(){
@ -194,32 +199,45 @@ function get_individual_memory(){
read -r -a second_values <<< "${second_process_result}" read -r -a second_values <<< "${second_process_result}"
read -r -a third_values <<< "${third_process_result}" read -r -a third_values <<< "${third_process_result}"
declare -a fv_array
declare -a sv_array
declare -a tv_array
# remove null values from arrays of results
for ((i=0;i<"${NUM_CONTAINERS}";++i)); do
[ -n "${first_values[i]}" ] && fv_array+=( "${first_values[i]}" )
[ -n "${second_values[i]}" ] && sv_array+=( "${second_values[i]}" )
[ -n "${third_values[i]}" ] && tv_array+=( "${third_values[i]}" )
done
# remove trailing commas
fv_array[-1]="$(sed -r 's/,*$//g' <<< "${fv_array[-1]}")"
sv_array[-1]="$(sed -r 's/,*$//g' <<< "${sv_array[-1]}")"
tv_array[-1]="$(sed -r 's/,*$//g' <<< "${tv_array[-1]}")"
metrics_json_start_array metrics_json_start_array
local json="$(cat << EOF local json="$(cat << EOF
{ {
"${first_process_name} memory": [ "${first_process_name} memory": [
$(for ((i=0;i<"${NUM_CONTAINERS[@]}";++i)); do $(for i in "${fv_array[@]}"; do
[ -n "${first_values[i]}" ] && printf '\n\t\t\t%s' "${i}"
printf '%s\n\t\t\t' "${first_values[i]}"
done) done)
], ],
"${second_process_name} memory": [ "${second_process_name} memory": [
$(for ((i=0;i<"${NUM_CONTAINERS[@]}";++i)); do $(for i in "${sv_array[@]}"; do
[ -n "${second_values[i]}" ] && printf '\n\t\t\t%s' "${i}"
printf '%s\n\t\t\t' "${second_values[i]}"
done) done)
], ],
"${third_process_name} memory": [ "${third_process_name} memory": [
$(for ((i=0;i<"${NUM_CONTAINERS[@]}";++i)); do $(for i in "${tv_array[@]}"; do
[ -n "${third_values[i]}" ] && printf '\n\t\t\t%s' "${i}"
printf '%s\n\t\t\t' "${third_values[i]}"
done) done)
] ]
} }
EOF EOF
)" )"
metrics_json_add_array_element "$json" metrics_json_add_array_element "${json}"
metrics_json_end_array "Raw results" metrics_json_end_array "Raw results"
} }
@ -272,7 +290,6 @@ function get_memory_usage(){
} }
EOF EOF
)" )"
else [ "$RUNTIME" == "kata-runtime" ] || [ "$RUNTIME" == "kata-qemu" ] else [ "$RUNTIME" == "kata-runtime" ] || [ "$RUNTIME" == "kata-qemu" ]
# Get PSS memory of VM runtime components. # Get PSS memory of VM runtime components.
# And check that the smem search has found the process - we get a "0" # And check that the smem search has found the process - we get a "0"
@ -281,7 +298,6 @@ EOF
# As an added bonus - this script must be run as root. # As an added bonus - this script must be run as root.
# Now if you do not have enough rights # Now if you do not have enough rights
# the smem failure to read the stats will also be trapped. # the smem failure to read the stats will also be trapped.
get_pss_memory ${HYPERVISOR_PATH} get_pss_memory ${HYPERVISOR_PATH}
if [ "${global_hypervisor_mem}" == "0" ]; then if [ "${global_hypervisor_mem}" == "0" ]; then
@ -293,13 +309,11 @@ EOF
if [ "${global_virtiofsd_mem}" == "0" ]; then if [ "${global_virtiofsd_mem}" == "0" ]; then
echo >&2 "WARNING: Failed to find PSS for ${VIRTIOFSD_PATH}" echo >&2 "WARNING: Failed to find PSS for ${VIRTIOFSD_PATH}"
fi fi
get_pss_memory ${SHIM_PATH} 1 get_pss_memory ${SHIM_PATH} 1
if [ "${global_shim_mem}" == "0" ]; then if [ "${global_shim_mem}" == "0" ]; then
die "Failed to find PSS for ${SHIM_PATH}" die "Failed to find PSS for ${SHIM_PATH}"
fi fi
mem_usage="$(bc -l <<< "scale=2; ${global_hypervisor_mem} + ${global_virtiofsd_mem} + ${global_shim_mem}")" mem_usage="$(bc -l <<< "scale=2; ${global_hypervisor_mem} + ${global_virtiofsd_mem} + ${global_shim_mem}")"
local json="$(cat << EOF local json="$(cat << EOF
@ -361,10 +375,10 @@ function main(){
#Check for KSM before reporting test name, as it can modify it #Check for KSM before reporting test name, as it can modify it
check_for_ksm check_for_ksm
init_env
check_cmds "${SMEM_BIN}" bc check_cmds "${SMEM_BIN}" bc
clean_env_ctr
init_env
check_images "${IMAGE}" check_images "${IMAGE}"
if [ "${CTR_RUNTIME}" == "io.containerd.kata.v2" ]; then if [ "${CTR_RUNTIME}" == "io.containerd.kata.v2" ]; then
export RUNTIME="kata-runtime" export RUNTIME="kata-runtime"
elif [ "${CTR_RUNTIME}" == "io.containerd.runc.v2" ]; then elif [ "${CTR_RUNTIME}" == "io.containerd.runc.v2" ]; then
@ -372,7 +386,6 @@ function main(){
else else
die "Unknown runtime ${CTR_RUNTIME}" die "Unknown runtime ${CTR_RUNTIME}"
fi fi
metrics_json_init metrics_json_init
save_config save_config
get_memory_usage get_memory_usage
@ -385,7 +398,6 @@ function main(){
info "memory usage test completed" info "memory usage test completed"
metrics_json_save metrics_json_save
clean_env_ctr
} }
main "$@" main "$@"

View File

@ -168,15 +168,18 @@ function init_env()
cmd=("docker" "ctr") cmd=("docker" "ctr")
sudo systemctl restart docker
# check dependencies # check dependencies
check_cmds "${cmd[@]}" check_cmds "${cmd[@]}"
# Remove all stopped containers # Remove all stopped containers
clean_env
clean_env_ctr clean_env_ctr
# restart docker only if it is not masked by systemd
docker_masked="$(systemctl list-unit-files --state=masked | grep -c docker)"
if [ "${docker_masked}" -eq 0 ]; then
sudo systemctl restart docker
fi
# This clean up is more aggressive, this is in order to # This clean up is more aggressive, this is in order to
# decrease the factors that could affect the metrics results. # decrease the factors that could affect the metrics results.
kill_processes_before_start kill_processes_before_start
@ -188,8 +191,12 @@ function init_env()
# killed to start test with clean environment. # killed to start test with clean environment.
function kill_processes_before_start() function kill_processes_before_start()
{ {
DOCKER_PROCS=$(sudo "${DOCKER_EXE}" ps -q) docker_masked="$(systemctl list-unit-files --state=masked | grep -c "${DOCKER_EXE}")"
[[ -n "${DOCKER_PROCS}" ]] && clean_env
if [ "${docker_masked}" -eq 0 ]; then
DOCKER_PROCS=$(sudo "${DOCKER_EXE}" ps -q)
[[ -n "${DOCKER_PROCS}" ]] && clean_env
fi
CTR_PROCS=$(sudo "${CTR_EXE}" t list -q) CTR_PROCS=$(sudo "${CTR_EXE}" t list -q)
[[ -n "${CTR_PROCS}" ]] && clean_env_ctr [[ -n "${CTR_PROCS}" ]] && clean_env_ctr