Raviprakash
Raviprakash

Reputation: 2440

Per Process disk read/write statistics in Mac OS X

How do I get programatically per process disk i/o statistics in Mac OS X. In 'Activity Monitor' application or in 'top' command we can only get whole system disk i/o statistics.
For reference Similar question asked for PC.

Upvotes: 28

Views: 19508

Answers (5)

bfx
bfx

Reputation: 937

Since OP specifically asked for disk I/O statistics I'd recommend

sudo fs_usage -f diskio

which focuses only on read/write events, contrary to -f filesys as mentioned in the accepted answer. (Don't know if the diskio option wasn't available back then.)

Upvotes: 5

Quantum Mechanic
Quantum Mechanic

Reputation: 662

I found iStat Menus, which sits in the menu bar. Only shows the top 5 disk read/write users (and I'm not sure if it's the sum, but it doesn't sort).

Upvotes: 1

rogerdpack
rogerdpack

Reputation: 66751

Activity Monitor shows per process I/O statistics in the "disk" tab (perhaps its new since this question was asked).enter image description here See "Bytes Written" and "Bytes Read" columns.

Upvotes: 2

dgross
dgross

Reputation: 369

Since there isn't an answer here about how to do this programatically, here's some more info. You can get some info out of libproc if you can use C/C++/ObjectiveC++. The function proc_pid_rusage gives you a bunch of resource info for a given process, but the ones related to your question are:

struct rusage_info_v3 {
    ...
    uint64_t ri_diskio_bytesread;
    uint64_t ri_diskio_byteswritten;
    ...
};

Sample code:

pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)
{
    cout << rusage.ri_diskio_bytesread << endl;
    cout << rusage.ri_diskio_byteswritten << endl;
}

See <libproc.h> and <sys/resource.h> for more info.

Upvotes: 4

slerena
slerena

Reputation: 496

Use iotop (as root), for example:

iotop -C 3 10

But the best way (for me) is:

sudo fs_usage -f filesys

Upvotes: 38

Related Questions