Skip to content

Commit 2f5c55d

Browse files
Add files via upload
Watch raw input output per block device stats in real time
1 parent ad138ab commit 2f5c55d

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

watch_raw_io

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#! /bin/bash
2+
3+
#----------------------------------------------------------------------
4+
# Description: watch raw input output per block device stats in real time
5+
# Author: Artem S. Tashkinov
6+
# Created at: Sat Apr 6 18:34:33 2013
7+
# Computer: localhost.localdomain
8+
# System: Linux 3.8.7-ic on i686
9+
#
10+
# Copyright (c) 2013 Artem S. Tashkinov All rights reserved.
11+
# Sat Aug 24 19:59:32 2013 - implemented read/write interval counters
12+
# Sun Aug 25 23:51:14 2013 - made refreshing three times faster
13+
# Thu Feb 4 18:59:41 2016 - exit on pressing q/Q, read refresh rate from console
14+
#
15+
#----------------------------------------------------------------------
16+
17+
shopt -s nullglob
18+
export LANG=en_US.UTF-8
19+
rr=2
20+
21+
trap "exit 0" TERM
22+
export TOP_PID=$$
23+
24+
qexit()
25+
{
26+
read -n 1 -t 0.5 -s char
27+
if [ "$char" = "q" -o "$char" = "Q" ]; then
28+
echo "Bye"
29+
kill -s TERM $TOP_PID
30+
fi
31+
}
32+
33+
if [ -n "$1" ]; then
34+
if [ "$1" -eq "$1" ] 2>/dev/null; then
35+
rr="$1"
36+
else
37+
echo "[$1] is not a number, setting refresh rate to $rr"
38+
sleep 3
39+
fi
40+
fi
41+
42+
dsrc=/sys/block
43+
cd $dsrc || die "$dsrc not found"
44+
45+
declare -A intr intw blkr blkw
46+
47+
while :; do
48+
clear
49+
date | tr -d '\n'
50+
echo " [ refresh rate: ${rr} seconds ]"
51+
echo "Device Read bytes Written bytes Interval read Interval written Mount point"
52+
for i in sd* md*; do # adjust for your environment
53+
for j in $i/$i* $i; do
54+
dev=${j##*/}
55+
test -z "$dev" && dev="$j" # when iterating $i itself
56+
57+
read blkr blkw < <(awk '{print $3" "$7}' $j/stat) # let's speed up this a bit
58+
blkr["$dev"]=$blkr
59+
blkw["$dev"]=$blkw
60+
61+
test -z "${intr[$dev]}" && intr[$dev]=0
62+
test -z "${intw[$dev]}" && intw[$dev]=0
63+
intr[$dev]=$((${blkr[$dev]}-${intr[$dev]}))
64+
intw[$dev]=$((${blkw[$dev]}-${intw[$dev]}))
65+
test "${blkr[$dev]}" == "${intr[$dev]}" && intr[$dev]=0 # Don't show when iterating for the first time
66+
test "${blkw[$dev]}" == "${intw[$dev]}" && intw[$dev]=0
67+
68+
printf "%-7s %'17d %'17d %'14d %'14d " $dev $((blkr[$dev]*512)) $((blkw[$dev]*512)) $((intr[$dev]*512)) $((intw[$dev]*512))
69+
70+
mntp=`awk '/^\/dev\/'$dev' /{print $2}' /proc/mounts`
71+
if [ -z "$mntp" ]; then
72+
grep -q "root=/dev/$dev " /proc/cmdline && mntp="/"
73+
fi
74+
echo "$mntp"
75+
76+
intr["$dev"]=${blkr["$dev"]}
77+
intw["$dev"]=${blkw["$dev"]}
78+
done
79+
echo
80+
done
81+
qexit < /dev/stdin &
82+
sleep $rr
83+
done

0 commit comments

Comments
 (0)