Disk I/O 모니터링을 위한 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
'법, 용어 > 용어' 카테고리의 다른 글
| [Spark] Apache Spark란? (0) | 2025.08.21 |
|---|---|
| [pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란? (0) | 2025.08.21 |
| 법의 분류 등 (0) | 2025.08.05 |
| 공기업 공공기관 차이, 산하기관 소속기관 차이(Feat. 행정 용어 정리) (4) | 2025.08.02 |
| 소속기관과 산하기관의 정의 (1) | 2025.08.02 |