본문 바로가기
IT

리눅스 IO 상태 모니터링 하기 - iostat 명령어 알아보기

by geddy 2024. 1. 24.

우분투나 Centos등 리눅스에서 시스템을 관리하거나 테스트를 하다보면 IO를 모니터링해야할 때가 많습니다. 오늘은 리눅스에서 iostat으로 시스템에 발생중인 I/O를 모니터링하는 간단한 방법과 결과를 해석하는 방법을 알아보겠습니다.

리눅스 IO 상태 모니터링 하기 - iostat 명령어 알아보기

리눅스에서 I/O 모니터링 하기

리눅스에서 I/O 상태를 1초마다 모니터링하는 한 줄 쉘 명령은 다음과 같습니다:

iostat -x 1

이 명령은 iostat 명령을 사용하여 확장된 통계(-x 옵션)를 1초마다(1 옵션) 출력합니다. 이 명령은 CPU 사용률과 각 디스크 장치의 I/O 통계를 보여줍니다. 이 명령은 대부분의 리눅스에서 사용 가능합니다.

 

iostat 명령 수행 결과

iostat -x 1을 수행하면 다음과 같은 결과가 나타납니다.

% iostat -x 1
Linux 3.10.0-693.5.2.el7.x86_64 (bdw-ex-altibase)       2024년 01월 24일        _x86_64_        (192 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.64    0.00    1.59    0.00    0.00   97.77

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0.00     0.06    0.78   23.98    53.88  2011.62   166.84     0.21    8.41    0.36    8.67   0.05   0.12
scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00  381.91  381.91    0.00 381.91   0.00
sda               0.00     0.87    1.15   11.88   132.43  1051.46   181.73     0.07    5.29    0.36    5.76   0.14   0.18
dm-0              0.00     0.00    0.01    0.30     0.86     5.52    40.41     0.00    1.67    0.28    1.73   0.13   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    17.73     0.00    0.13    0.13    0.00   0.10   0.00
dm-2              0.00     0.00    1.13   12.47   131.57  1045.94   173.05     0.07    5.29    0.36    5.74   0.13   0.18
dm-3              0.00     0.00    0.00    0.00     0.00     0.00    21.14     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.19    0.00    0.34    0.00    0.00   98.47

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0.00     0.00    0.00   80.00     0.00  6180.00   154.50     0.01    0.07    0.00    0.07   0.07   0.60
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    1.00    0.00     8.00     0.00    16.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    1.00    0.00     8.00     0.00    16.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

 

iostat 수행 결과 분석

`iostat` 명령어의 출력 결과를 해석하는 것은 다음과 같습니다.

1. Device: 디바이스 (파티션) 이름입니다.
2. rrqm/s: 해당 디바이스에 초당 큐잉된 Merged read request 수를 나타냅니다.
3. wrqm/s: 해당 디바이스에 초당 큐잉된 Merged write request 수를 나타냅니다.
4. r/s: 해당 디바이스에 Merge 후 초당 완료된 read request 수를 나타냅니다.
5. w/s: 해당 디바이스에 Merge 후 초당 완료된 write request 수를 나타냅니다.
6. rsec/s (rKB/s, rMB/s): 해당 디바이스로부터 read한 sector (KB,MB) 수를 나타냅니다.
7. wsec/s (wKB/s, wMB/s): 해당 디바이스로부터 write한 sector (KB,MB) 수를 나타냅니다.
8. avgrq-sz: 해당 디바이스에 발생된 request의 평균 size (sector 기준)를 나타냅니다.
9. avgqu-sz: 해당 디바이스에 발생된 request들의 queue의 평균 length를 나타냅니다.
10. await: 해당 디바이스에 발생된 I/O request의 평균 서비스 Time (milliseconds). queue 대기시간(서비스 시간 포함)을 나타냅니다.
11. r_await: 해당 디바이스에 발생된 read request의 평균 서비스 Time (milliseconds). queue 대기시간(서비스 시간 포함)을 나타냅니다.
12. w_await: 해당 디바이스에 발생된 write request의 평균 서비스 Time (milliseconds). queue 대기시간(서비스 시간 포함)을 나타냅니다.
13. svctm: 해당 디바이스에 발생된 I/O request의 서비스 Time (milliseconds)를 나타냅니다.
14. %util: 해당 디바이스에 발생된 I/O request의 bandwidth utilization을 나타냅니다.

이러한 정보들을 통해 디바이스의 I/O 상태를 확인하고, 특정 디바이스의 지연 현상을 감지하고 적절한 대처를 할 수 있습니다.

 

Merged read/write request 란?

"Merged read/write request"는 하드 디스크 드라이브(HDD) 또는 솔리드 스테이트 드라이브(SSD)와 같은 스토리지 장치에서 발생하는 I/O 작업을 설명하는 데 사용되는 용어입니다.

스토리지 장치는 데이터를 읽고 쓰는 요청을 처리합니다. 이러한 요청은 일반적으로 운영 체제나 애플리케이션에 의해 생성되며, 각 요청은 특정 데이터 블록을 대상으로 합니다.

"Merged read/write request"는 여러 개의 연속된 읽기 혹은 쓰기 요청이 하나의 큰 요청으로 합쳐진 것을 의미합니다. 이는 스토리지 장치의 효율성을 높이는 데 도움이 됩니다. 왜냐하면 하나의 큰 요청을 처리하는 것이 여러 개의 작은 요청을 개별적으로 처리하는 것보다 더 빠르고 효율적이기 때문입니다.

예를 들어, 운영 체제가 디스크에서 연속된 두 개의 데이터 블록을 읽어야 하는 경우, 이 두 개의 읽기 요청은 "merged"되어 하나의 요청으로 처리될 수 있습니다. 이렇게 하면 디스크 헤드의 움직임이 줄어들어 I/O 작업의 전반적인 성능이 향상됩니다.

이러한 요청 병합은 스토리지 장치의 드라이버나 컨트롤러에 의해 자동으로 수행되며, 이는 I/O 스케줄러의 일부로 구현되어 있습니다. I/O 스케줄러는 스토리지 장치로의 요청을 관리하고 최적화하는 컴퓨터 시스템의 구성 요소입니다.

따라서 "Merged read request"는 스토리지 장치의 성능과 효율성을 높이는 중요한 최적화 기법을 나타냅니다.

결론

오늘은 iostat을 통해서 1초마다 리눅스 시스템의 IO 성능을 모니터링하고 결과를 해석하는 방법을 알아보았습니다. 시스템 모니터링은 시스템 관리자 뿐 아니라 여러 프로그램 개발자 등도 자주 필요로 하는 기술이므로 알아두면 도움이 될 것 같습니다. 

facebook twitter kakaoTalk kakaostory naver band shareLink