xref: /OK3568_Linux_fs/yocto/scripts/oe-time-dd-test.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# oe-time-dd-test records how much time it takes to
4*4882a593Smuzhiyun# write <count> number of kilobytes to the filesystem.
5*4882a593Smuzhiyun# It also records the number of processes that are in
6*4882a593Smuzhiyun# running (R), uninterruptible sleep (D) and interruptible
7*4882a593Smuzhiyun# sleep (S) state from the output of "top" command.
8*4882a593Smuzhiyun# The purporse of this script is to find which part of
9*4882a593Smuzhiyun# the build system puts stress on the filesystem io and
10*4882a593Smuzhiyun# log all the processes.
11*4882a593Smuzhiyunusage() {
12*4882a593Smuzhiyun	echo "$0 is used to detect i/o latency and runs commands to display host information."
13*4882a593Smuzhiyun	echo "The following commands are run in order:"
14*4882a593Smuzhiyun	echo "1) top -c -b -n1 -w 512"
15*4882a593Smuzhiyun	echo "2) iostat -y -z -x 5 1"
16*4882a593Smuzhiyun	echo "3) tail -30 tmp*/log/cooker/*/console-latest.log to gather cooker log."
17*4882a593Smuzhiyun	echo " "
18*4882a593Smuzhiyun	echo "Options:"
19*4882a593Smuzhiyun	echo "-c | --count <amount>		dd (transfer) <amount> KiB of data within specified timeout to detect latency."
20*4882a593Smuzhiyun	echo "				Must enable -t option."
21*4882a593Smuzhiyun	echo "-t | --timeout <time>		timeout in seconds for the <count> amount of data to be transferred."
22*4882a593Smuzhiyun	echo "-l | --log-only			run the commands without performing the data transfer."
23*4882a593Smuzhiyun	echo "-h | --help			show help"
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun}
26*4882a593Smuzhiyun
27*4882a593Smuzhiyunrun_cmds() {
28*4882a593Smuzhiyun    echo "start: top output"
29*4882a593Smuzhiyun	top -c -b -n1 -w 512
30*4882a593Smuzhiyun	echo "end: top output"
31*4882a593Smuzhiyun	echo "start: iostat"
32*4882a593Smuzhiyun	iostat -y -z -x 5 1
33*4882a593Smuzhiyun	echo "end: iostat"
34*4882a593Smuzhiyun	echo "start: cooker log"
35*4882a593Smuzhiyun	tail -30 tmp*/log/cooker/*/console-latest.log
36*4882a593Smuzhiyun	echo "end: cooker log"
37*4882a593Smuzhiyun}
38*4882a593Smuzhiyun
39*4882a593Smuzhiyunif [ $# -lt 1 ]; then
40*4882a593Smuzhiyun	usage
41*4882a593Smuzhiyun	exit 1
42*4882a593Smuzhiyunfi
43*4882a593Smuzhiyun
44*4882a593Smuzhiyunre_c='^[0-9]+$'
45*4882a593Smuzhiyun#re_t='^[0-9]+([.][0-9]+)?$'
46*4882a593Smuzhiyun
47*4882a593Smuzhiyunwhile [[ $# -gt 0 ]]; do
48*4882a593Smuzhiyun	key="$1"
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	case $key in
51*4882a593Smuzhiyun		-c|--count)
52*4882a593Smuzhiyun			COUNT=$2
53*4882a593Smuzhiyun			shift
54*4882a593Smuzhiyun			shift
55*4882a593Smuzhiyun			if ! [[ $COUNT =~ $re_c ]] || [[ $COUNT -le 0 ]] ; then
56*4882a593Smuzhiyun				usage
57*4882a593Smuzhiyun				exit 1
58*4882a593Smuzhiyun			fi
59*4882a593Smuzhiyun			;;
60*4882a593Smuzhiyun		-t|--timeout)
61*4882a593Smuzhiyun			TIMEOUT=$2
62*4882a593Smuzhiyun			shift
63*4882a593Smuzhiyun			shift
64*4882a593Smuzhiyun			if ! [[ $TIMEOUT =~ $re_c ]] || [[ $TIMEOUT -le 0 ]] ; then
65*4882a593Smuzhiyun				usage
66*4882a593Smuzhiyun				exit 1
67*4882a593Smuzhiyun			fi
68*4882a593Smuzhiyun			;;
69*4882a593Smuzhiyun		-l|--log-only)
70*4882a593Smuzhiyun			LOG_ONLY="true"
71*4882a593Smuzhiyun			shift
72*4882a593Smuzhiyun			shift
73*4882a593Smuzhiyun			;;
74*4882a593Smuzhiyun		-h|--help)
75*4882a593Smuzhiyun			usage
76*4882a593Smuzhiyun			exit 0
77*4882a593Smuzhiyun			;;
78*4882a593Smuzhiyun		*)
79*4882a593Smuzhiyun			usage
80*4882a593Smuzhiyun			exit 1
81*4882a593Smuzhiyun			;;
82*4882a593Smuzhiyun	esac
83*4882a593Smuzhiyundone
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun
86*4882a593Smuzhiyunif [ "$LOG_ONLY" = "true" ] ; then
87*4882a593Smuzhiyun    uptime
88*4882a593Smuzhiyun    run_cmds
89*4882a593Smuzhiyun    exit
90*4882a593Smuzhiyunfi
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunif [ -z ${TIMEOUT+x} ] || [ -z ${COUNT+x} ] ; then
93*4882a593Smuzhiyun    usage
94*4882a593Smuzhiyun    exit 1
95*4882a593Smuzhiyunfi
96*4882a593Smuzhiyun
97*4882a593Smuzhiyunuptime
98*4882a593Smuzhiyunecho "Timeout used: ${TIMEOUT}"
99*4882a593Smuzhiyuntimeout ${TIMEOUT} dd if=/dev/zero of=oe-time-dd-test.dat bs=1024 count=${COUNT} conv=fsync
100*4882a593Smuzhiyunif [ $? -ne 0 ]; then
101*4882a593Smuzhiyun    run_cmds
102*4882a593Smuzhiyunfi
103