GNU time
has optional display of I/O measurements:
TIME="%I:%O" /usr/bin/time cp filea fileb
0:5488
but what units is it measuring? Any ideas? The manual only says
%I Number of filesystem inputs by the process.
%O Number of filesystem outputs by the process.
which is less than helpful.
A few tests suggest it is probably 512k blocks, both data and metadata:
$ TIME="%I:%O" /usr/bin/time dd if=/dev/zero of=foo bs=1 count=1024
1024 bytes (1.0 kB, 1.0 KiB) copied, 0.0120082 s, 85.3 kB/s
0:8
$ TIME="%I:%O" /usr/bin/time dd if=/dev/zero of=foo bs=1k count=1 conv=sync
1024 bytes (1.0 kB, 1.0 KiB) copied, 0.000354987 s, 2.9 MB/s
0:8
$ TIME="%I:%O" /usr/bin/time dd if=/dev/zero of=foo bs=1k count=1024
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.017763 s, 59.0 MB/s
0:2080
[craig@ayaki-localdomain personal-git]$ TIME="%I:%O" /usr/bin/time dd if=/dev/zero of=foo bs=1M count=1 conv=sync
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0052077 s, 201 MB/s
0:2048
but it'd be nice to confirm that.
Anyone know where it comes from?
From the manual:
So units are in I/Os. Perhaps the source code knows what that means. From the summarize function documentation in time.c:
ru_inblock and ru_oblock come from getrusage. From the getrusage manual:
Well that's not particularly useful, but LKML shows the patches being discussed(https://lkml.org/lkml/2007/3/19/100) to add ru_inblock and ru_oublock:
A check on the current kernel source code(https://github.com/spotify/linux/blob/master/include/linux/task_io_accounting_ops.h) shows:
and
In short, yes, blocks are approximately 512 bytes each.
I would guess the "filesystem inputs/outputs" means the block size, so if the underlying filesystem has been formatted with 512 byte blocks, it returns that, if something else, then that.
But this is just a guess.