본문 바로가기
STUDY/SYSTEM

Understanding Disk I/O

by simongs 2013. 9. 6.

해당 글은 다음 URL의 글을 보고 정리한 글입니다.

 http://blog.scoutapp.com/articles/2011/02/10/understanding-disk-i-o-when-should-you-be-worried

DISK I/O 에 대한 이해

당신이 floppy drive에 대해 기억을 하고 있다면 아마 disk I/O bottleneck 이슈에 대해 들어본 적이 있을 것이다.
disk 가 당신의 desktop에 없다면 I/O bottleneck을 감지하기란 매우 어렵다.
web 어플리케이션에서의 4자기 I/O 이슈가 있다

-   Do you have an I/O bottleneck?
-   What impacts I/O performance?
-   What’s the best path to fixing an I/O bottleneck?
-   How do you monitor disk I/O?

disk 가 당신의 desktop에 없다면 I/O bottleneck을 감지하기란 매우 어렵다.
Disk I/O는 물리적 디스크의 입/출력 연산을 포함한다.
디스크에 있는 파일을 읽는 중이라면, 프로세서는 파일이 모두 읽어질 때까지 대기해야할 필요가 있다.

(이것은 쓰기 작업도 마찬가지이다)

Access time!
이것은 컴퓨터가 프로세서로부터 요청받은 데이터를 프로세스하는 시간이다.
하드디스크는 물리적이기 때문에 disk sector를 회전하는 시간이 필요하다.
디스크 latency가 13ms 정도이고 RAM latency는 83 nanoseconds 정도이다.

이 둘의 차이는 최고 속도 1,190 mph 의 F-18 Hornet 전투기와 최고속도 0.007 mph의 달팽이와 대조할 수 있다.
바로 이 차이가 성능을 고려할 때 memory에 데이터를 cache 해야하는 이슈이다.

1. Do you have an I/O bottleneck

I/O wait는 I/O bottleneck과 연관이 있다.
I/O wait는 프로세서가 디스크 작업을 기다린 시간에 대한 percentage이다.
예를 들어서 MySQL로 부터 10,000 row를 가져오는데 1초가 걸렸다고 가정하자.

각 row들이 검색되는 동안 Disk에 Access 된다.
이 시간 동안프로세서는 유휴상태가 된다. 이것이 Disk를 기다리는 시간이다.
위의 그림을 보면 disk access time은 700ms 이고 I/O wait는 70%를 의미하게 된다.
top 명령어를 통해서 해당 정보를 확인할 수 있다.

만약 I/O wait가 (1/# of CPU cores) 보다 크다면 당신의 CPU들은 상당한 양의 시간을 기다리는 중을 의미한다.
위의 그림을 보면 12.1%의 I/O wait을 지닌다. 이 서버는 8개의 cores 이다. 이것은 1/8 즉 0.125에 상당히 근접해있다.
I/O wait 값이 지속적으로 이 임계치(0.125) 주변이라면 Disk Access는 점점 느려질 것이다.

2. What impacts I/O performance?

For random disk access (a database, mail server, file server ..),
1초에 얼마나 많은 input/output 연산을 수행할 수 있는지에 초점을 맞춰야 한다. (IOPS)
IOPS에는 4가지 중요한 Factor가 있다.

1. Multidisk Arrays - 디스크가 많을수록 IOPS는 높다.
2. Average IOPS per-drive - 회전 속도에 따라 결정된다.
3. RAID Factor - Storage에 RAID 설정을 사용하고 있다면 신뢰성을 위해서 여러 개의 디스크를 사용하고 있음을 의미한다.

특정 RAID 구성은 쓰기 연산에 상당히 취약하다. RAID 6 에서는 모든 쓰기 연산은 6개 디스크에 쓰기 연산을 한다.
RAID 1, RAID 10에서는 쓰기 연산이 오직 2번만 요청한다. 디스크 연산이 낮을수록, 높은 IOPS 가용치를 가진다.

This article has a great breakdown onRAID and IOPS performance.

4. Read and Write Workload - 만약 쓰기 연산이 많은 시스템이라면 RAID 구성을 쓰기연산에 적합하게 끔 해야한다. (RAID 5, RAID 6)

IOPS 최대치 계산하기

좀 더 정확한 방법은 이론적인 IOPS 값을 계산하고 실제 IOPS와 비교하는 것이다. 만약 이 숫자들이 가깝다면 I/O 이슈가 있을 가능성이 있다.

이론적인 IOPS를 측정한 후 sar -A 명령어를 통해서 tps 정보와 비교해야 한다.
이 tps 컬럼은 물리적 디스크에서 발생한 초당 전송량이며 여기서의 전송은 물리적 디스크에 요청한 I/O이다.
두 값이 비슷한 정도라면 최대치에 거의 다다른 것이다.

'STUDY > SYSTEM' 카테고리의 다른 글

CPU load average  (0) 2013.09.05

댓글