web-dev-qa-db-fra.com

Pourquoi ne lit-il pas à partir de / dev / zero comme IO_RBYTES?

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 commencé Sudo htop et j'ai 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 normal, 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'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 à partir de /dev/zero et écrit dans /dev/{zero,null} compte comme octets d'E/S?

25
iBug

Ils comptent comme des E/S, mais pas du type mesuré par les champs que vous regardez.

Dans htop, IO_RBYTES Et IO_WBYTES Affichez les champs read_bytes Et write_bytes De /proc/<pid>/io, Et ces champs mesurent les octets qui traversent la couche de blocs. /dev/zero N'implique pas la couche de blocs, donc les lectures ne s'affichent pas là-bas.

Pour voir les E/S de /dev/zero, Vous devez regarder les champs rchar et wchar dans /proc/<pid>/io, Qui apparaissent dans htop as RCHAR et WCHAR:

rchar : caractères lus

Le nombre d'octets que cette tâche a provoqué à lire à partir du stockage. Il s'agit simplement de la somme des octets que ce processus a transmis à read(2) et des appels système similaires. Il inclut des éléments tels que les E/S du terminal et n'est pas affecté par la nécessité ou non des E/S de disque physique réelles (la lecture peut avoir été satisfaite à partir de la mise en cache).

wchar : caractères écrits

Le nombre d'octets que cette tâche a provoqué ou doit faire écrire sur le disque. Des mises en garde similaires s'appliquent ici comme avec rchar.

Voir man 5 proc et man 1 htop pour plus de détails.

54
Stephen Kitt