본문 바로가기
법, 용어/용어

Disk I/O 모니터링을 위한 iostat 명령어 활용법

by 3604 2025. 8. 13.
728x90

Disk I/O 모니터링을 위한 iostat 명령어 활용법

 

 

iostat

- Summary
  . CPU 상태와 Disk device의 input/output 통계 정보를 확인할 수 있는 명령어임
  . iostat 명령어는 시스템에 로드된 device에 대한 활동 정보(평균 I/O 전송율, 큐잉시간, 서비스타임등)를 device별로 확인할 수 있음
  . 각, device에 대한 활동 정보를 검토함으로써 특정 device의 지연현상을 감지하고 적절한 대처(옵션변경,구성변경등)를 통해 성능 및 안정성을 확보할 수 있음
 
  [관련 정보 및 사전 지식]
  * Disk Model
    . Simple Disk with queue 


    . Caching Disk



    . Controller



  * Disk I/O Stack
    . Generic disk I/O stack

    . Linux 


    . AIX


  * Disk performance Concept
    . Meauring Time 


      . Service Time  : queue 대기 시간을 제외한 실 I/O 처리 시간
      . Wait Time : queue에 대기한 시간
- Usage
  . 일반적인 명령어 실행 방식
    . iostat [옵션] [수행 interval] [수행 횟수]
  . 주요 옵션
    . -c  : display CPU utilization
    . -d  : display disk utilization
    . -k  : use kilobites instead of(512-byte) blocks
    . -m  : use megabytes instead of(512-byte) blocks
    . -p  : include per-partition statistics
    . -t  : timestamp output
    . -x  : extended statistics
    . -z  : skip displaying zero-activity summaries
  . 주요 사용 옵션 조합
    . iostat -xkdzt -p ALL 3
      . 설명 : 3초 간격 정보를 출력하며 KB 단위(-k)로 disk의 상태(-d)를 출력함
               출력 시 timestamp를 추가(-t)하며, 확장된 정보(-x)도 같이 출력함
               idle disk에 대한 출력은 제거(-z)하고 파티션되어 있는 disk는 모두 출력(-p ALL)하게 됨
- Output
  . 출력은 CPU와 Disk로 두가지로 나누어짐
  . 여기서는 Disk에 대한 출력 정보에 대해 다루기로 함
  . 출력 정보
    . Device : Device(Partition) 명
               * Partition은 hard disk를 하나이상의 logical disk 나눈것임 (lsblk 명령으로 확인)
    . tps : 해당 Device에 전송된 초당 request transfer임. transfer의 size는 알 수 없음
    . Blk_read/s (KB_read/s, MB_read/s) : 해당 Device를 통해 읽어들인 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
      * sector : disk 상의 하나의 block임. 전통적으로 512byte의 크기임
    . Blk_wrtn/s (KB_wrtn/s, MB_wrtn/s) : 해당 Device를 통해 기록한 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
    . Blk_read (KB_read, MB_read) : 해당 Device를 통해 읽어들인 전체 block 수
    . Blk_wrtn (KB_wrtn, MB_wrtn) : 해당 Device를 통해 기록한 전체 block 수
    . rrqm/s  : 해당 Device에 초당 큐잉된 Merged read request 수 (그림 9.8 참고)
    . wrqm/s  : 해당 Device에 초당 큐잉된 Merged write request 수 (그림 9.8 참고)
    . r/s : 해당 Device에 Merge후 초당 완료된 read request 수
    . w/s : 해당 Device에 Merge후 초당 완료된 write request 수
    . rsec/s (rKB/s, rMB/s) : 해당 Device로 부터 read한 sector(KB,MB) 수
    . wsec/s (wKB/s, wMB/s) : 해당 Device로 부터 write한 sector(KB,MB) 수
    . avgrq-sz  : 해당 Device에 발생된 request의 평균 size(sector 기준)
    . avgqu-sz  : 해당 Device에 발생된 request들의 queue의 평균 length
    . await : 해당 Device에 발생된 I/O request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . r_await : 해당 Devive에 발생된 read request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . w_await : 해당 Devive에 발생된 write request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . svctm : 해당 Device에 발생된 I/O request의 서비스 Time (milliseconds).  Do not trust this field any more.  This field will be removed in a future sysstat version.
    . %util : 해당 Device에 발생된 I/O request의 bandwidth utilization. serial request의 경우 100%에 근접할 경우 Device saturation이 발생함. parallel일 경우 (RAID, SSD등)는 해당 수치가 성능 한계를 반영하지는 않음
   
- 활용 사례


    iostat 명령어를 통해 avgrq-sz,avgqu-sz,await,%util의 컬럼 정보를 분석을 통해 현재 device의 I/O 상태를 확인 할 수 있음
    위의 경우 avgrq-sz(request size)의 수치는 거의 동일하나, avgqu-sz(queue length)가 지속적으로 증가하는 것을 알 수 있으며,
    await(queue time + service time) 또한 지속적로 증가하는 것을 알 수 있음. 그리고 %util이 증가하여 100이므로 disk의 bandwidth 만큼
    request가 발생하여 disk I/O 병목이 있음을 알 수 있음
    또한 동일한 avgrq-sz가 거의 동일한 수준에서 avgqu-sz가 증가하는 것으로 보아 service time 보단 queue 대기 시간이 지속적으로
    증가하여 await 수치가 증가하는 것을 알 수 있음. (그림)
    disk I/O를 발생시키는 프로세스를 확인하기 위해 아래와 같이 iotop 명령어를 활용할 수 있음


    위와 같이 dd 명령어 5개가 I/O를 점유하고 있음을 알 수 있음
  . 위이 사례는 단순히 disk I/O를 발생시키는 명령어를 찾아서 조치하는 방법이나, 현실에서는 실제 I/O 증가로 인해 병목이 발생할 수 있으며,
    이를 해결하기 위해서는 다음과 같은 방법들을 적용해야할 필요가 있음
    1) Application Level에서의 불필요한 disk I/O가 발생하는지 점검 (log level등)
    2) OS에서 제공하는 파라미터 튜닝을 통한 개선 (Disk Queuing Algorithm 변경)
    3) Disk 분산을 통한 I/O bandwidth 개선
    . 1)번이 가장 선행되어야할 분석 작업임
    . 2)의 경우 linux에서는 Noop,Deadline,Anticipatory,CFQ 등이 있으며, write로 인한 read 지연을 어느정도 개선할 수 있음
    . 3)의 경우 I/O가 편중되는 FileSystem에 대해 volume을 물리적인 여러 Disk로 분산할 수 있도록 재구성하는 방법(증설,재구성)이며, Disk I/O 개선을 위한 현실적인 방안임
- 관련 정보
  . 유사 명령어 : sar -d [interval]
 
- 출처
  . man page
  . "System Performance : Enterprise and the Cloud" by Brendan D. Gregg
  . "IBM Power Systems Performance Guide Implementing and Optimizing" by IBM Redbooks

출처: https://m.blog.naver.com/bumsukoh/221022044759

728x90