iotop et iostat ne sont pas d'accord

J'essaie de comprendre ce qui se passe avec les disques de mon server. Il exécute Ubuntu 12.04LTS et je suis habitué à utiliser iostat pour savoir quand le disque est le goulet d'étranglement. Mais iostat -xd me semble que le disque est plutôt inactif:

 Linux 3.2.0-41-generic (loki) 07/05/2013 _x86_64_ (8 CPU) Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.16 1.23 0.69 1.49 9.94 37.03 43.05 0.52 239.02 14.16 343.06 3.65 0.80 sdb 0.00 0.00 0.00 0.00 0.00 0.00 8.10 0.00 0.25 0.25 0.00 0.25 0.00 dm-0 0.00 0.00 0.82 2.70 9.92 37.03 26.67 0.72 203.84 16.80 260.64 2.27 0.80 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 7.99 0.00 198.63 9.33 1232.65 13.97 0.00 dm-2 0.00 0.00 0.00 0.00 0.00 0.00 7.99 0.00 497.11 14.27 1858.12 20.96 0.00 

Alors que iotop raconte une image très différente:

 Total DISK READ: 31.84 M/s | Total DISK WRITE: 19.55 M/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 27472 be/4 mongodb 31.35 M/s 3.92 K/s 0.00 % 46.56 % mongod --config /etc/mongodb.conf 318 be/3 root 0.00 B/s 94.06 K/s 0.00 % 44.52 % [jbd2/dm-0-8] 1493 be/4 mongodb 0.00 B/s 48.88 M/s 0.00 % 9.13 % mongod --config /etc/mongodb.conf 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 

avec le mongod écrit des dizaines de mégaoctets par seconde.

D'où vient le décalage et à qui devrais-je croire?

iostat -xd vous donnera les moyennes depuis la dernière réinitialisation du countur (généralement le dernier redémarrage du système) tandis que iotop produit des moyennes de la dernière seconde. Si vous voulez des résultats comparables, vous devez append un intervalle de time de rafraîchissement à votre appel iostat comme

 iostat -xdm 5 

à une moyenne sur une période de 5 secondes. Vous devriez toujours jeter les premières lignes de sortie (comme elles seraient moyennes à partir de la dernière réinitialisation du countur) et attendre le deuxième set de lignes de sortie pour voir les moyennes "actuelles".