GNU time
tem exibição opcional de medições de E/S:
TIME="%I:%O" /usr/bin/time cp filea fileb
0:5488
mas quais unidades ele mede? Alguma ideia? O manual diz apenas
%I Number of filesystem inputs by the process.
%O Number of filesystem outputs by the process.
o que é menos do que útil.
Alguns testes sugerem que provavelmente são 512k blocos, dados e metadados:
$ 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
mas seria bom confirmar isso.
Alguém sabe de onde vem?
Do manual:
Portanto, as unidades estão em I/Os. Talvez o código-fonte saiba o que isso significa. Da documentação da função de resumo em time.c:
ru_inblock e ru_oblock vêm de getrusage. Do manual getrusage:
Bem, isso não é particularmente útil, mas o LKML mostra os patches que estão sendo discutidos ( https://lkml.org/lkml/2007/3/19/100 ) para adicionar ru_inblock e ru_oublock:
Uma verificação no código-fonte atual do kernel ( https://github.com/spotify/linux/blob/master/include/linux/task_io_accounting_ops.h ) mostra:
e
Resumindo, sim, os blocos têm aproximadamente 512 bytes cada.
Eu acho que as "entradas/saídas do sistema de arquivos" significam o tamanho do bloco, portanto, se o sistema de arquivos subjacente foi formatado com blocos de 512 bytes, ele retornará isso, se algo mais, então isso.
Mas isso é apenas um palpite.