Count the running time and actual IO processing time of the sqpoll thread, and output the statistical time to terminal. --- The test results are as follows: PID WorkTime(us) TotalTime(us) COMMAND 1188923 1528823 1817846 iou-sqp-1188916 1188920 1539703 1833793 iou-sqp-1188917 1188921 1544210 1847887 iou-sqp-1188918 1188922 1561503 1857846 iou-sqp-1188919 Signed-off-by: Xiaobing Li <xiaobing.li@xxxxxxxxxxx> --- test/sqtimeshow.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/sqtimeshow.sh diff --git a/test/sqtimeshow.sh b/test/sqtimeshow.sh new file mode 100644 index 0000000..e85fd2f --- /dev/null +++ b/test/sqtimeshow.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +UPLINE=$(tput cuu1) + +function set_header() { + printf "\033[47;30m%-15s %-15s %-15s %-15s \033[0m\n" PID WorkTime\(us\) TotalTime\(us\) COMMAND +} + +function get_time() { + pid=$1 + item=$2 + proc_file="/proc/$pid/fdinfo/6" + if [ ! -e $proc_file ]; then + return + fi + content=$(cat ${proc_file} | grep ${item} | awk -F" " '{print $2}') + echo ${content%us} +} + +function show_util() { + index=0 + while true + do + data=$(top -H -b -n 1 | grep iou-sqp) + if [ -z "${data}" ]; then + echo "no sq thread is running." + exit + fi + index=0 + num=$(echo $data | tr -cd R |wc -c) + arr=($data) + len=$((${#arr[@]} / ${num})) + i=0 + while [ ${i} -lt ${num} ] + do + pid=${arr[${i} * ${len}]} + name=${arr[${i} * ${len} + len - 1]} + work_time=$(get_time $pid "SqWorkTime") + total_time=$(get_time $pid "SqTotalTime") + printf "%-15s %-15s %-15s %-15s\n" ${pid} ${work_time} ${total_time} ${name} + ((i++)) + done + sleep 2 + update=$UPLINE + for j in $(seq 1 ${num}); do + update=$update$UPLINE + done + if [ ! -z "$(top -H -b -n 1 | grep iou-sqp)" ]; then + echo "$update" + fi + done +} + +function main() { + # set header + set_header + # show util + show_util +} + +main -- 2.34.1