7

I'm trying to measure the total amount of disk writing and reading that is done to a particular volume by a particular process over a specified duration.

I've found iotop, which can output IO every second for a particular process like this:

iotop --batch --pid $(pidof my_process)

Where you can specify x iterations with -n x.

But then I have to filter out the actual number, and tally it up myself.

Is there an easier way to do this?

Neil
  • 2,589

3 Answers3

9

Don't know of an easier way off hand, but this bash snippet might help you with parsing out what you need from iotop:

iotop --batch --pid 1 > log
line_num=0
while read line; do 
    line_num=$(($line_n+1)) 
    if [[ $(($line_num % 3)) -eq 0 ]]; then 
        #print Column 3
        echo $line | awk '{print $3}'
    fi 
done < log > processed_file
#Get total of column three:
cat processed_file | (tr '\n' +; echo 0) | bc

Actually, Might be easier to read /proc/$PID/io every x seconds:

val=0
total=0
counter=0
pid=2323
while [[ $counter < 100 ]]; do 
    counter=$(($counter +1 ))
    #Change the sed number for different line, 5 is read_bytes
    val=$(cat /proc/$pid/io | sed -n '5p' | awk '{ print $2 }')
    total=$(($total + $val))
    echo $total 
    sleep 1 
done

Actually, looks like the above script is wrong, because it seems like /proc/<pid>/io is just the total, so really, just grab it once, wait however long, grab it again, find the differnce and there is your answer. You might want to look at the source code and find out its data type to see if it eventually wraps around. Probably not a problem for a little tablet though.

Kyle Brandt
  • 85,693
4

It might be over kill, and you might need to customize a plugin, but you could try "Munin", which is a graphing application that does just what you need.

It does not have a plugin for per process IO, but I'm sure hacking one up is not too hard. You'll then get all the added value of munin/rrdtool with avereges over day/week/year, graphing, limits, warnings, etc.

katriel
  • 4,547
0

You can install sysstat with apt-get in most Debian-based distros, including Maemo, and run iostat to monitor disk read/write totals.

Just make sure nothing else is writing to the disk, which may or may not be possible in your situation.

iostat prints total Blocks read and written since bootup, or some other arbitrary point in time. You have to figure out how big a block is to know how much data is written.

I did this by having dd write a known amount of data, and dividing the blocks.

Neil
  • 2,589