Bagaimana cara mendeteksi jika disk mencari?

15

Saya dapat menggunakan berbagai alat untuk mengukur volume disk I / O yang saat ini mengalir melalui sistem (seperti iotopdan iostat) tetapi saya ingin tahu apakah mungkin untuk dengan mudah mendeteksi apakah disk mencari banyak dengan hanya sejumlah kecil I / O.

Saya tahu; apakah mungkin untuk mengekstrak informasi ini menggunakan blktracedan kemudian mendekode menggunakan btttetapi ini agak sulit dan saya berharap ada alternatif yang lebih sederhana?

Murphy Gearoid
sumber
4
Dekatkan telinga Anda dengan drive Anda? :)
terdon
2
Bukankah seharusnya rasio rendah (rkB/s + wkB/s)/%utilmenandakan bahwa disk sedang mencari (dalam iostat -x)?
Marco
1
Apakah Anda menginginkan alat yang menampilkan langsung ini atau Anda ingin melihat data selama periode waktu tertentu?
slm
1
AFAIK, kernel.org/doc/Documentation/iostats.txt adalah satu-satunya statistik yang dikelola oleh kernel, jadi saya tidak berharap Anda akan menemukan lebih baik daripada blktrace.
Stéphane Chazelas

Jawaban:

4

Rasio (rkB/s + wkB/s)/%utildari iostat -xoutput harus memberikan beberapa wawasan:

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

Saya tidak yakin bagaimana tepatnya rasio ini sesuai dengan pencarian disk. Tetapi idenya adalah, jika disk sibuk dan tidak memiliki throughput yang tinggi itu mungkin mencari. Namun, itu tidak dijamin. Disk yang rusak terkadang menunjukkan utilisasi yang tinggi dan hampir tidak memiliki throughput. Tapi setidaknya itu indikator.

Anda juga dapat memberikan nomor ke iostat (mis. iostat -x 5) Untuk menentukan interval pembaruan. Dengan begitu Anda bisa memonitor secara terus menerus.

Marco
sumber
Agaknya, banyak permintaan baca yang dipasangkan dengan rkB rendah / s akan mengindikasikan situasi seperti itu
Gearoid Murphy
7

Tidak yakin apakah Anda sedang mencari alat yang menunjukkan jenis informasi ini dalam cara waktu nyata atau selama periode waktu tertentu, tetapi di sini ada 2 alat yang menunjukkan aspek waktu nyata dari disk yang sedang diakses.

nmon

Anda memintanya seperti itu nmon,. Kemudian setelah terbuka Anda menekan j(Filesystems) diikuti oleh d(Disk I / O Graphs D = Stats). Lihat bantuan bawaan ( h) untuk detail lebih lanjut.

$ 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                                                                │
│──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│

Alat lain yang pernah saya jumpai yang melakukan setidaknya live view dari disk I / O adalah 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

Khususnya baris-baris ini yang menunjukkan aktivitas LVM dan 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

Jika Anda tertarik pada data selama periode waktu tertentu, iostatmungkin masih merupakan pilihan terbaik Anda, yang dibungkus menjadi naskah. Anda dapat menyingkirkan output pemanfaatan sehingga lebih mudah untuk ditangani:

$ 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

Langsung dari Kernel

Blok kode ini (bash) akan menunjukkan kepada Anda read I / O yang diproses, langsung dari Kernel.

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

sumber: /server//a/525248/2518

Informasi ini juga dapat diperoleh dari salah satu /sys/block/sda/statatau /proc/diskstatsdalam situasi di mana Anda tidak dapat atau tidak ingin menginstal alat apa pun.

Referensi

slm
sumber
Terima kasih atas jawaban terinci tetapi metrik yang Anda berikan masih fokus pada I / O, idealnya, saya ingin melihat aktivitas mencari disk terlepas dari throughput I / O
Gearoid Murphy
@GearoidMurphy - Saya tidak melihat cara untuk mendapatkan jenis data telemetri tentang akses disk di luar I / O.
slm
Saya pikir Marco mengenai hal itu dalam komentar di atas, solusinya adalah dengan melihat rasio transaksi disk dengan volume aktual dari data yang dibaca / ditulis.
Gearoid Murphy
1
@GearoidMurphy - ya itu sebabnya saya meminta klarifikasi dalam komentar, apakah Anda menginginkan jenis solusi waktu nyata atau periode waktu. Jika Anda menemukan solusi yang bisa diterapkan, saya akan menuliskannya sebagai jawaban dan menerimanya. Tidak banyak ketika mencari miring khusus Anda tentang ini.
slm