Monday, 2 December 2013

[Monitoring] iostat - hiển thị các thông tin thống kê về CPU và I/O

Bài này hướng đến một cuộc thảo luận hơn là một bài tut.
TODO: bài về mount, fstab (mặc dù những thứ này không thú vị cho lắm nhưng đã dùng Linux là phải biết, đặc biệt là đối với các sysadmin)

NOTE một lần nữa, nội dung bài này không thú vị, nhưng là cần thiết với các sysadmin

Bài viết thực hiện trên:
 $ uname -a
Linux archhvn 3.10.9-1-ARCH #1 SMP PREEMPT Wed Aug 21 13:49:35 CEST 2013 x86_64 GNU/Linux #đã lâu rồi không upgrade :D

nội dung có thể áp dụng tương tự cho các Linux based distro khác như Ubuntu ...

Vài thuật ngữ
IO: input/output (for devices and partitions)

report: mỗi output của iostat gọi là một report

iostat là một chương trình nằm trong package sysstat
 $ pacman -Qs iostat
local/sysstat 10.2.0-1
    a collection of performance monitoring tools (iostat,isag,mpstat,pidstat,sadf,sar)

Để cài đặt package này, dùng câu lệnh để cài tương ứng trên OS của bạn. Trên Ubuntu có thể là:
sudo apt-get install -y sysstat

Format câu lệnh iostat:
iostat  [-options ] [ interval [ count ] ]

Vài ví dụ

iostat # hiển thị report từ lúc boot
iostat 2 # hiển thị liên tục report mỗi 2 giây
iostat 2 5 # hiển thị 5 lần report mỗi lần cách nhau 2 giây.

Output của iostat gồm 2 loại report:
  1. the CPU Utilization report  (hiển thị giá trung bình nếu có nhiều CPU)
  2. the Device Utilization report.
$ iostat -y 2 1
Linux 3.10.9-1-ARCH (archhvn)     12/02/2013     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.53    0.00    0.38    4.29    0.00   92.80

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               4.00         0.00        20.00          0         40

Option -y để bỏ qua report từ lúc boot.

Phần CPU Utilization report có 6 giá trị tính bằng đơn vị %.

3 giá trị về % CPU
  • %user: phần trăm CPU được sử dụng khi chạy các ứng dụng ở user level (tất cả những gì không thuộc về kernel)
  • %system: phần trăm CPU được sử dụng khi chạy ở system level (kernel)
  • %nice: tương tự %user nhưng với nice priority.
# Nice priority là gì? `man 2 nice` `man 1 nice`
nice numbers are used to compute the priorities but are not the priorities themselves
http://en.wikipedia.org/wiki/Nice_%28Unix%29
 3 giá trị về % thời gian 
  • %iowait: phần trăm thời gian mà CPU(s) rảnh  khi hệ thống thực hiện disk I/O request.
  • %idle: phần trăm thời gian mà CPU(s) rảnh và hệ thống không thực hiện disk I/O request.
  • %steal: xem thêm ở man 1 iostat.

phần the Device Utilization report cũng gồm 7 giá trị (tên cột / số cột hay đơn vị có thể khác nếu sử dụng các option của iostat, ở đây chỉ viết về ví dụ nói trên)
  • Device: tên device, ở đây là "sda". Một device có 1 hay nhiều partition. (dùng iostat -pd sda để hiển thị thông số cho từng partition trong sda)
  • tps: transfer per second. Mỗi  transfer là một I/O request đến device. Nhiều logical request có thể được hợp lại thành 1 I/O request đến device =>  một transfer không có kích thước cố định.
  • kB_read/s: số kilobytes đọc từ device
  • kB_read: tổng số kilobytes đọc từ device  = kB_read/s * interval (s)
  • kB_wrtn/s: số kilobytes ghi vào device
  • kB_wrtn: tổng số kilobytes ghi  từ device  = kB_read/s * interval (s)

Đến đây coi như đủ, bạn đã có thể đọc được các report của iostat.
Nhiều option khác không liệt kê ở đây, ngoài 1 vài option phổ biến sau:
  • -c: chỉ hiện CPU report
  • -d: chỉ hiện device report

Bonus: từ kernel 2.4 trở lên, 1 block tương đưong với 1 sector = 512 bytes.


Further reading:
man 1 iostat
https://www.kernel.org/doc/Documentation/iostats.txt

Các câu hỏi thảo luận:
Với lần lượt từng giá trị trong 6 giá trị của CPU, khi nó lên cao có nghĩa là gì, có vấn đề gì ?
Ví dụ: %nice tăng cao, chuyên gì đang xảy ra?