GNUtime
具有可选的 I/O 测量显示:
TIME="%I:%O" /usr/bin/time cp filea fileb
0:5488
但它测量的是什么单位?有任何想法吗?说明书只说
%I Number of filesystem inputs by the process.
%O Number of filesystem outputs by the process.
这没什么帮助。
一些测试表明它可能是 512k 块,包括数据和元数据:
$ 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
但很高兴确认这一点。
有谁知道它来自哪里?
从手册:
所以单元在 I/O 中。也许源代码知道这意味着什么。从 time.c 中的汇总函数文档中:
ru_inblock 和 ru_oblock 来自 getrusage。从 getrusage 手册:
好吧,这并不是特别有用,但是 LKML 显示了正在讨论的补丁(https://lkml.org/lkml/2007/3/19/100)以添加 ru_inblock 和 ru_oublock:
检查当前内核源代码(https://github.com/spotify/linux/blob/master/include/linux/task_io_accounting_ops.h)显示:
和
简而言之,是的,每个块大约有 512 个字节。
我猜“文件系统输入/输出”是指块大小,所以如果底层文件系统已被格式化为 512 字节块,它会返回那个,如果有别的,那么就是那个。
但这只是一个猜测。