Je vide un disque dur sur un système d'exploitation Linux 4.x à l'aide de cette commande:
sudo sh -c 'pv -pterb /dev/zero > /dev/sda'
Et j'ai ouvert un autre tty et j'ai commencé sudo htop
et remarqué ceci:
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
La valeur de IO_WBYTES
semble tout à fait normale, mais IO_RBYTES
reste à 4 Ko et ne change jamais.
J'ai exécuté quelques autres programmes, par exemple
dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero
et a été surpris de voir qu'aucun d'entre eux ne génère beaucoup de IO_RBYTES
ou IO_WBYTES
.
Je pense que cela n'est spécifique à aucun programme, mais pourquoi ne lit-il pas /dev/zero
et n'écrit-il pas pour /dev/{zero,null}
compter comme octets d'E / S?
/dev/null
ne pas finir par interfacer avec un tel matériel et ne pas obstruer les bus d'E / S. Poussé à l'extrême; les lectures / écritures dans / depuis la mémoire sont-elles également des E / S? Bien sûr, il n'y a pas de délimitation stricte pour ces choses, et tout dépend de la perspective que vous adoptez dans ces choses, et de l'utilité de cette perspective pour vous.
/dev/{null,zero}
(qui n'est généralement pas un goulot d'étranglement). C'est juste mon point de vue cependant :)
read(2)
et write(2)
compte comme des E / S, ce qui est très raisonnable dans son propre sens.