2024-02-06 05:23:37

by Xiaobing Li

[permalink] [raw]
Subject: [PATCH] liburing: add script for statistics sqpoll running time

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 <[email protected]>
---
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



2024-02-18 06:00:21

by Xiaobing Li

[permalink] [raw]
Subject: Re: [PATCH] liburing: add script for statistics sqpoll running time.

On 2/6/24 10:40 AM, Xiaobing Li wrote:
>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

Hi, Jens and Pavel
This patch is to add a script that displays the statistics of the
sqpoll thread to the terminal.

--
Xiaobing Li

2024-02-18 13:00:52

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] liburing: add script for statistics sqpoll running time.

On 2/17/24 10:59 PM, Xiaobing Li wrote:
> On 2/6/24 10:40 AM, Xiaobing Li wrote:
>> 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
>
> Hi, Jens and Pavel
> This patch is to add a script that displays the statistics of the
> sqpoll thread to the terminal.

No objections to this one, but it will not get applied until the kernel
side is sorted out.

--
Jens Axboe