본문 바로가기
개발/ETC

Disk I/O 부하인데 메모리 증설을 한다고?

by 상용최 2021. 12. 19.
반응형

서비스를 운영하다보면 시스템에 부하가 발생하는 경우가 존재한다.

부하의 종류에는 다양하게 있는데 이번 글에서는 I/O 부하에 관련된 주제에 대해 다뤄보도록 하겠다.

필자는 Disk I/O 부하가 발생한다면 HDD → SSD 업그레이드를 하는것만이 해결방법이라고 생각했었다.

그러던 도중 “대규모 서비스를 지탱하는 기술” 이라는 책을 읽으면서 I/O 부하가 발생할 때 메모리를 증설하는것도 하나의 방법이 될 수 있다는 것을 알게되었다.

그렇다면 어떠한 원리로 Disk I/O 부하일 때 메모리를 늘리는 것이 부하를 줄이는 방법이 되는지 알아보겠다.

이 방법은 OS 캐시와 관련이 있다. (이 글은 Linux 를 기준으로 작성되었다.)

OS 는 페이지 캐시라는 캐시구조를 가지고 있다.


> 페이지 캐시란?

 

OS 가 확보한 페이지를 메모리상에 계속 확보해두는 기능이다.

프로세스가 데이터를 읽어오는 과정은 아래와 같다.

  1. 디스크로부터 페이지 크기의 블록을 읽어낸다.
  2. 읽어낸것을 메모리에 위치시킨다.
  3. 메모리 주소를 프로세스 에게 알려준다.
  4. 프로세스는 해당 메모리에 액세스를 하게된다.
  5. 프로세스가 데이터를 전부 처리하더라도 메모리를 해제하지 않고 남겨둔다.

5번의 과정으로 인해 다른 프로세스가 같은 디스크를 액세스요청을 할 떄 필요한 정보가 이미 메모리에 있으므로 디스크 액세스가 발생하지 않게 된다.

이것으로 인해 성능을 높이는 것이 페이지 캐시이다.

Linux 에서는 메모리가 비어있으면 전부 캐싱한다.

만약 프로세스에서 메모리를 요청했을 때 캐시로 인해 메모리가 없다면 오래된 캐시를 버림으로써 메모리를 확보한다.

이제는 Disk I/O 부하일 때 메모리 증설을 하면 부하가 줄어드는 원리를 알 수 있을것이다.

OS 가 사용할 수 있는 메모리가 많아지면서 디스크 액세를 줄일 수 있게 된다.

덤으로 디스크 액세스속도보다 메모리 액세스속도가 월등히 빠르므로 속도도 향상될 수 있게된다.

데이터가 많아졌을 때는 메모리 증설로 어느정도 효과를 볼 수 있겠지만 한계점이 있다는것을 알아두자.

 

추가로 "대규모 서비스를 지탱하는 기술" 이라는 책은 나온지 오래되었지만 좋은내용이 정말 많은 책인것 같다.

절판되었다가 얼마전에 다시 출판되기 시작하였으니 한권씩 구매해서 읽어보는것을 추천한다.

반응형

댓글