Estou esvaziando um disco rígido em alguns sistemas operacionais Linux 4.x usando este comando:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
E eu abri outro tty e comecei sudo htop
e notei isso:
PID USER PRI NI CPU% RES SHR IO_RBYTES IO_WBYTES S TIME+ Command
4598 root 20 0 15.5 1820 1596 4096 17223823 D 1:14.11 pv -pterb /dev/zero
O valor de IO_WBYTES
parece bastante normal, mas IO_RBYTES
permanece em 4 KiB e nunca muda.
Eu corri alguns outros programas, por exemplo
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
e ficou surpreso ao ver que nenhum deles gera muito IO_RBYTES
ou IO_WBYTES
.
Eu acho que isso não é específico para nenhum programa, mas por que não lê /dev/zero
e grava para /dev/{zero,null}
contar como bytes de E / S?
/dev/null
não terminam a interface com esse hardware e não obstruem os barramentos de E / S. Levado ao extremo; As leituras / gravações na / da memória também são de E / S? Obviamente, não há delineamento rígido para essas coisas, e tudo depende de qual perspectiva você adota e de quão útil essa perspectiva acaba sendo para você.
/dev/{null,zero}
(que geralmente não é um gargalo). Essa é apenas a minha perspectiva:)
read(2)
e write(2)
conta como I / O, que é muito razoável em seu próprio sentido.