18d588fbcSMichal Berger#!/usr/bin/env bash 28d588fbcSMichal Berger# SPDX-License-Identifier: BSD-3-Clause 38d588fbcSMichal Berger# Copyright (C) 2023 Intel Corporation 48d588fbcSMichal Berger# All rights reserved. 58d588fbcSMichal Berger 68d588fbcSMichal Berger_pmdir=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")") 78d588fbcSMichal Berger_pmrootdir=$(readlink -f "$_pmdir/../../../") 88d588fbcSMichal Berger 98d588fbcSMichal Bergerretag() { 108d588fbcSMichal Berger [[ -s $TEST_TAG_FILE ]] || return 0 118d588fbcSMichal Berger # If we got signalled but the tag didn't change, just bail 128d588fbcSMichal Berger [[ $(< "$TEST_TAG_FILE") == "$TEST_TAG" ]] && return 0 138d588fbcSMichal Berger TEST_TAG=$(< "$TEST_TAG_FILE") 148d588fbcSMichal Berger} 158d588fbcSMichal Berger 16d5fe62b2SMichal Bergerstart_monitor_resources() { 17d5fe62b2SMichal Berger local monitor 18d5fe62b2SMichal Berger 19d5fe62b2SMichal Berger for monitor in "${MONITOR_RESOURCES[@]}"; do 20*a874c8d0SMichal Berger ${SUDO[MONITOR_RESOURCES_SUDO["$monitor"]]} \ 21*a874c8d0SMichal Berger "$_pmdir/$monitor" -d "$PM_OUTPUTDIR" \ 22d5fe62b2SMichal Berger -l -p "monitor.${0##*/}.$(date +%s)" & 23d5fe62b2SMichal Berger done 24d5fe62b2SMichal Berger # Give our monitors some time to setup their traps 25d5fe62b2SMichal Berger sleep 1 26d5fe62b2SMichal Berger} 27d5fe62b2SMichal Berger 28d5fe62b2SMichal Bergerstop_monitor_resources() { 29d5fe62b2SMichal Berger signal_monitor_resources TERM 30d5fe62b2SMichal Berger} 31d5fe62b2SMichal Berger 32d5fe62b2SMichal Bergerupdate_tag_monitor_resources() { 33d5fe62b2SMichal Berger local tag=${1:-N/A} 34d5fe62b2SMichal Berger 35d5fe62b2SMichal Berger echo "$tag" > "$TEST_TAG_FILE" 36d5fe62b2SMichal Berger signal_monitor_resources USR1 37d5fe62b2SMichal Berger} 38d5fe62b2SMichal Berger 39d5fe62b2SMichal Bergersignal_monitor_resources() { 40d5fe62b2SMichal Berger local monitor pid pids signal=${1:-15} 41d5fe62b2SMichal Berger 42d5fe62b2SMichal Berger for monitor in "${MONITOR_RESOURCES[@]}"; do 43d5fe62b2SMichal Berger if [[ -e $PM_OUTPUTDIR/$monitor.pid ]]; then 44d5fe62b2SMichal Berger pid=$(< "$PM_OUTPUTDIR/$monitor.pid") 45d5fe62b2SMichal Berger else 46d5fe62b2SMichal Berger continue 47d5fe62b2SMichal Berger fi 48d5fe62b2SMichal Berger 49*a874c8d0SMichal Berger if ! ${SUDO[MONITOR_RESOURCES_SUDO["$monitor"]]} \ 50*a874c8d0SMichal Berger kill "-$signal" "$pid"; then 51d5fe62b2SMichal Berger rm -f "$PM_OUTPUTDIR/$monitor.pid" 52d5fe62b2SMichal Berger fi 2> /dev/null 53d5fe62b2SMichal Berger done 54d5fe62b2SMichal Berger} 55d5fe62b2SMichal Berger 56d5fe62b2SMichal Bergersave_pm_pid() { 57d5fe62b2SMichal Berger echo "$$" > "$PM_OUTPUTDIR/${0##*/}.pid" 58d5fe62b2SMichal Berger} 59d5fe62b2SMichal Berger 60d5fe62b2SMichal Bergerrm_pm_pid() { 61d5fe62b2SMichal Berger rm -f "$PM_OUTPUTDIR/${0##*/}.pid" 62d5fe62b2SMichal Berger} 63d5fe62b2SMichal Berger 648d588fbcSMichal BergerTEST_TAG=${TEST_TAG:-N/A} 658d588fbcSMichal BergerTEST_TAG_FILE=${TEST_TAG_FILE:-"$_pmrootdir/.run_test_name"} 66d5fe62b2SMichal Berger# autotest's $output_dir has a prio 67d5fe62b2SMichal BergerPM_OUTPUTDIR=${output_dir:-/tmp}/power 6806243cb0SMichal BergerPM_OS=$(uname -s) 69d5fe62b2SMichal Berger 70*a874c8d0SMichal Bergerdeclare -A MONITOR_RESOURCES_SUDO=() 71*a874c8d0SMichal BergerMONITOR_RESOURCES_SUDO["collect-bmc-pm"]=1 72*a874c8d0SMichal BergerMONITOR_RESOURCES_SUDO["collect-cpu-load"]=0 73*a874c8d0SMichal BergerMONITOR_RESOURCES_SUDO["collect-cpu-temp"]=0 74*a874c8d0SMichal BergerMONITOR_RESOURCES_SUDO["collect-vmstat"]=0 75*a874c8d0SMichal Berger 76*a874c8d0SMichal BergerSUDO[0]="" SUDO[1]="sudo -E" 77*a874c8d0SMichal Berger 78d5fe62b2SMichal BergerMONITOR_RESOURCES=(collect-cpu-load collect-vmstat) 7906243cb0SMichal Bergerif [[ $PM_OS == FreeBSD ]]; then 8006243cb0SMichal Berger MONITOR_RESOURCES=(collect-vmstat) 8106243cb0SMichal Bergerelif [[ $PM_OS == Linux && $(< /sys/class/dmi/id/chassis_vendor) != QEMU && ! -e /.dockerenv ]]; then 82d5fe62b2SMichal Berger # These are dedicated for the PHY platforms. Skip VMs and systems which identifies as 83d5fe62b2SMichal Berger # a docker containers (latter is specific to our CI's use-case). 84d5fe62b2SMichal Berger MONITOR_RESOURCES+=(collect-cpu-temp) 85d5fe62b2SMichal Berger MONITOR_RESOURCES+=(collect-bmc-pm) 86d5fe62b2SMichal Bergerfi 87d5fe62b2SMichal Berger 88*a874c8d0SMichal Bergerif [[ ! -d $PM_OUTPUTDIR ]]; then 89d5fe62b2SMichal Berger mkdir -p "$PM_OUTPUTDIR" 90*a874c8d0SMichal Berger chmod 777 "$PM_OUTPUTDIR" 91*a874c8d0SMichal Bergerfi 92