Comment détecter si un disque cherche?

16

Je peux utiliser une variété d'outils pour mesurer le volume d'E / S de disque circulant actuellement dans le système (comme iotopet iostat), mais je suis curieux de savoir s'il est possible de détecter facilement si un disque recherche beaucoup avec seulement une petite quantité de E / S.

Je le sais; est-il possible d'extraire ces informations à l'aide blktracepuis de les décoder à l'aide, bttmais celles-ci sont quelque peu compliquées et j'espérais qu'il y avait une alternative plus simple?

Gearoid Murphy
la source
4
Mettez votre oreille près de votre lecteur? :)
terdon
2
Un faible ratio ne devrait-il pas (rkB/s + wkB/s)/%utilsignifier que le disque recherche (en iostat -x)?
Marco
1
Voulez-vous un outil qui montre cela en direct ou cherchez-vous à regarder les données sur une période de temps donnée?
slm
1
AFAIK, kernel.org/doc/Documentation/iostats.txt sont les seules statistiques maintenues par le noyau, donc je ne m'attends pas à ce que vous trouviez mieux que blktrace.
Stéphane Chazelas

Réponses:

4

Le rapport (rkB/s + wkB/s)/%utilde iostat -xsortie devrait vous donner un aperçu:

Device:  rrqm/s wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda        0.04   3.65  7.16  6.37 150.82 212.38    53.71     0.03  1.99    0.82    3.31   0.76   1.03

Je ne sais pas exactement comment ce rapport correspond à la recherche de disque. Mais l'idée est que, si le disque est occupé et n'a pas un débit élevé, il recherche probablement. Cependant, ce n'est pas garanti. Les disques cassés affichent parfois une utilisation élevée et n'ont pratiquement aucun débit. Mais c'est au moins un indicateur.

Vous pouvez également fournir un nombre à iostat (par exemple iostat -x 5) pour spécifier l'intervalle de mise à jour. De cette façon, vous pouvez surveiller en continu.

Marco
la source
Vraisemblablement, de nombreuses demandes de lecture associées à un faible rkB / s seraient révélatrices d'une telle situation
Gearoid Murphy
8

Vous ne savez pas si vous recherchez des outils qui affichent ce type d'informations de manière en temps réel ou sur une période de temps, mais voici 2 outils qui montrent les aspects en temps réel du disque auquel vous accédez.

nmon

Vous l'invoquez ainsi nmon. Ensuite, une fois qu'il est ouvert, vous appuyez sur le j(Filesystems) suivi d'un d(Disk I / O Graphs D = Stats). Voir l'aide intégrée ( h) pour plus de détails.

$ nmon
┌nmon─13g─────────────────────Hostname=manny────────Refresh= 2secs ───11:15.32─────────────────────────────────────────────────────┐
│ Filesystems ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
│Filesystem            SizeMB  FreeMB %Used Type     MountPoint                                                                    │
│v/mapper/ubuntu-root 465389.0 457483.9   1.7 ext4     /                                                                           │
│/proc                                      proc     not a real filesystem                                                         │
│/sys                                       sysfs    not a real filesystem                                                         │
│/sys/fs/fuse/connections                   fusectl  not a real filesystem                                                         │
│/sys/kernel/debug                          debugfs  not mounted                                                                   │
│/sys/kernel/security                       security not a real filesystem                                                         │
│/dev                                       devtmpfs not a real filesystem                                                         │
│/dev/pts                                   devpts   not a real filesystem                                                         │
│tmpfs                  740.5   739.4   0.1 tmpfs    /run                                                                          │
│none                     5.0     5.0   0.0 tmpfs    /run/lock                                                                     │
│none                  1851.2  1849.8   0.1 tmpfs    /run/shm                                                                      │
│none                   100.0    99.9   0.1 tmpfs    /run/user                                                                     │
│/dev/sda1              910.9   606.5  33.4 ext2     /boot                                                                         │
│/run/rpc_pipefs                            rpc_pipe fstatfs returned zero blocks!!                                                │
│/run/user/emma/gvfs                        fuse.gvf not mounted                                                                   │
│/run/user/emily/gvfs                       fuse.gvf not mounted                                                                   │
│ Disk I/O ──/proc/diskstats────mostly in KB/s─────Warning:contains duplicates─────────────────────────────────────────────────────│
│DiskName Busy  Read WriteMB|0          |25         |50          |75       100|                                                    │
│sda      100%    0.0   66.4|RWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>                                                    │
│sda1       0%    0.0    0.0|>                                                |                                                    │
│sda2       0%    0.0    0.0|>                                                |                                                    │
│sda5     100%    0.0   66.4|RWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>                                                    │
│dm-0     100%    0.0   48.0|RWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>                                                    │
│dm-1       0%    0.0    0.0|                     >                           |                                                    │
│Totals Read-MB/s=0.0      Writes-MB/s=180.9    Transfers/sec=363.2                                                                │
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│

Un autre outil que j'ai rencontré qui fait au moins une vue en direct des E / S disque est atop.

$ atop
ATOP - grinchy                           2013/08/23  11:10:58                           ------                           10s elapsed
PRC | sys    2.18s  | user  26.26s  | #proc    315  | #trun  5 |  #tslpi   764 |  #tslpu     1 |  #zombie    0 |  #exit  1 |
CPU | sys      22%  | user    264%  | irq       0%  | idle    110% |  wait      4% |  guest     0% |  curf 1.20GHz |  curscal  44% |
cpu | sys       5%  | user     76%  | irq       0%  | idle     19% |  cpu003 w  0% |  guest     0% |  curf 1.20GHz |  curscal  44% |
cpu | sys       5%  | user     67%  | irq       0%  | idle     26% |  cpu001 w  2% |  guest     0% |  curf 1.20GHz |  curscal  44% |
cpu | sys       5%  | user     62%  | irq       0%  | idle     31% |  cpu000 w  1% |  guest     0% |  curf 1.20GHz |  curscal  44% |
cpu | sys   7%  | user     58%  | irq   0%  | idle     34% |  cpu002 w  1% |  guest     0% |  curf 1.20GHz |  curscal  44% |
CPL | avg1    3.83  | avg5    4.59  | avg15   4.76  |              |  csw    54101 |  intr   45315 |               |  numcpu     4 |
MEM | tot     7.6G  | free  194.3M  | cache 495.5M  | dirty   2.7M |  buff   38.9M |  slab   86.7M |               |               |
SWP | tot     5.7G  | free    5.5G  |               |              |               |               |  vmcom  12.4G |  vmlim   9.5G |
LVM | nchy-lv_home  | busy     11%  | read       1  | write    524 |  KiB/w      3 |  MBr/s   0.00 |  MBw/s   0.20 |  avio 2.05 ms |
LVM | nchy-lv_root  | busy      1%  | read       0  | write      7 |  KiB/w  4 |  MBr/s   0.00 |  MBw/s   0.00 |  avio 9.00 ms |
DSK |          sda  | busy     11%  | read       1  | write    109 |  KiB/w 19 |  MBr/s   0.00 |  MBw/s   0.20 |  avio 10.3 ms |
NET | transport     | tcpi  72  | tcpo     118  | udpi      15 |  udpo   5 |  tcpao     11 |  tcppo      0 |  tcprs      0 |
NET | network       | ipi       87  | ipo      123  | ipfrw      0 |  deliv     87 |               |  icmpi      0 |  icmpo      0 |
NET | wlan0   ----  | pcki      88  | pcko     123  | si   34 Kbps |  so   19 Kbps |  erri       0 |  erro       0 |  drpo       0 |

  PID  RUID       EUID       THR    SYSCPU    USRCPU   VGROW    RGROW    RDDSK   WRDSK   ST   EXC  S   CPUNR    CPU  CMD         1/4
 3649  saml       saml        34     0.33s    11.98s      0K    1752K       4K   2828K   --     -  R       2   122%  chrome
10399  saml       saml         4     0.14s     3.08s   5120K   -12.8M       0K      0K   --     -  S       2    32%  chrome

Plus précisément ces lignes qui montrent l'activité LVM et DSK:

    LVM | nchy-lv_home  | busy     11%  | read       1  | write    524 |  KiB/w      3 |  MBr/s   0.00 |  MBw/s   0.20 |  avio 2.05 ms |
    LVM | nchy-lv_root  | busy      1%  | read       0  | write      7 |  KiB/w  4 |  MBr/s   0.00 |  MBw/s   0.00 |  avio 9.00 ms |
    DSK |          sda  | busy     11%  | read       1  | write    109 |  KiB/w 19 |  MBr/s   0.00 |  MBw/s   0.20 |  avio 10.3 ms |

iostat

Si vous êtes intéressé par les données sur une période de temps, iostatc'est toujours probablement votre meilleure option, enveloppée dans un script. Vous pouvez vous débarrasser de la sortie d'utilisation afin qu'il soit plus facile de gérer:

$ iostat -dx /dev/sda 5
Linux 2.6.35.14-106.fc14.x86_64 (grinchy)   08/23/2013  _x86_64_    (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               1.82    96.60    3.84   20.68   122.26   891.99    41.36     0.46   18.77   7.35  18.01

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    26.20    1.60   24.60    17.60   350.40    14.05     0.31   11.95   8.84  23.16

Directement depuis le noyau

Ce bloc de code (bash) vous montrera les E / S lues traitées, directement depuis le noyau.

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

source: /server//a/525248/2518

Les informations peuvent également provenir de /sys/block/sda/statou /proc/diskstatsdans des situations où vous ne pouvez pas ou ne souhaitez pas installer d'outils.

Les références

slm
la source
Merci pour la réponse détaillée, mais les mesures que vous avez fournies sont toujours axées sur les E / S, idéalement, j'aimerais voir l'activité de recherche de disque indépendamment du débit d'E / S
Gearoid Murphy
@GearoidMurphy - Je n'ai pas trouvé de moyen d'obtenir ce type de données de télémétrie sur les accès disque en dehors des E / S.
slm
Je pense que Marco l'a abordé dans un commentaire ci-dessus, la solution serait de regarder le rapport des transactions sur disque au volume réel de données lues / écrites.
Gearoid Murphy
1
@GearoidMurphy - oui, c'est pourquoi j'ai demandé des précisions dans les commentaires pour savoir si vous vouliez un type de solution en temps réel ou un type de période. Si vous trouvez une solution viable, je l'écrirais comme une réponse et l'accepterais. Il n'y avait pas grand-chose lors de la recherche de votre orientation particulière à ce sujet.
slm