From 783f2b189da44b628e5088f0a245aad94a126cbd Mon Sep 17 00:00:00 2001 From: dinglimin Date: Fri, 11 Oct 2024 19:08:02 +0800 Subject: [PATCH] Gets qemu process consumption Signed-off-by: dinglimin --- .../tools/detect/virt/qemuflamegraph/Makefile | 2 + .../virt/qemuflamegraph/qemuflamegraph.sh | 75 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 source/tools/detect/virt/qemuflamegraph/Makefile create mode 100644 source/tools/detect/virt/qemuflamegraph/qemuflamegraph.sh diff --git a/source/tools/detect/virt/qemuflamegraph/Makefile b/source/tools/detect/virt/qemuflamegraph/Makefile new file mode 100644 index 00000000..3f62a217 --- /dev/null +++ b/source/tools/detect/virt/qemuflamegraph/Makefile @@ -0,0 +1,2 @@ +target := qemuconsume +include $(SRC)/mk/sh.mk diff --git a/source/tools/detect/virt/qemuflamegraph/qemuflamegraph.sh b/source/tools/detect/virt/qemuflamegraph/qemuflamegraph.sh new file mode 100644 index 00000000..be803887 --- /dev/null +++ b/source/tools/detect/virt/qemuflamegraph/qemuflamegraph.sh @@ -0,0 +1,75 @@ +#!/bin/sh +#****************************************************************# +# ScriptName: qemuflamegraph.sh +# Author: dinglimin@cmss.chinamobile.com +# Create Date: 2023-04-25 10:53 +# Function: +#***************************************************************# +TOOLS_ROOT="$SYSAK_WORK_PATH/tools" +LOGDIR="/var/log/sysak/" +time=20 +global_cpuflamegraph=${LOGDIR}global_cpuflamegraph-`date "+%Y-%m-%d-%H-%M-%S"`.svg +datafile=${LOGDIR}qemucpuflamegraph-`date "+%Y-%m-%d-%H-%M-%S"`.log + +usage() { + sudo echo "sysak qemucpuflamegraph: show qemu-kvm process consumption" + sudo echo "options: -h, help information" + sudo echo " -t, time, perf record time, default to 20 seconds" + sudo echo " -d , domain name or uuid" +} + +collect_global_framegraph() { + if [ -f $TOOLS_ROOT/cpu_flamegraph ]; then + global_cpuflamegraph=${LOGDIR}global_cpuflamegraph-`date "+%Y-%m-%d-%H-%M-%S"`.svg + $TOOLS_ROOT/cpu_flamegraph -d $time -p $1| xargs -I {} sudo cp {} $global_cpuflamegraph + fi +} + +monitor() { + sudo rpm -qa |grep -w "^perf" + if [ $? -ne 0 ]; then + yum install -y perf + fi + + pid=`sudo ps aux |grep qemu |grep $domain | awk '{print $2}'` + if [[ -z "$pid" ]]; then + sudo echo "vm can not find: $domain pid" + exit -1 + fi + + collect_global_framegraph $pid + datafile=${LOGDIR}qemucpuflamegraph-`date "+%Y-%m-%d-%H-%M-%S"`.log + sudo echo "####################################################################################" > $datafile + + sudo echo "Time: `date "+%Y-%m-%d %H:%M:%S"`" >> $datafile + if [ -e $global_cpuflamegraph ];then + sudo echo "$global_cpuflamegraph" >> $datafile + else + sudo echo "Failed to generate cpu flamwgrapg" >> $datafile + fi + + sudo echo "####################################################################################" >> $datafile + sudo cat ${global_cpuflamegraph} >> $datafile + +} + +while getopts 't:d:h' OPT; do + case $OPT in + "h") + usage + exit 0 + ;; + "t") + time="$OPTARG" + ;; + "d") + domain="$OPTARG" + ;; + *) + usage + exit -1 + ;; + esac +done + +monitor -- Gitee